文档库 最新最全的文档下载
当前位置:文档库 › 算法分析与设计习题集答案

算法分析与设计习题集答案

算法分析与设计习题集答案
算法分析与设计习题集答案

算法分析与设计习题集基础篇

10、限界函数的功能是什么?

11、设某一函数定义如下:

编写一个递归函数计算给定x的M(x)的值。

本函数是一个递归函数,其递归出口是:

M(x)= x-10x>100

递归体是:

M(M(x+11))x ≤100

实现本题功能的递归函数如下:

intm ( intx )

{ int y;

if ( x>100 )return(x-10 );

else {

y =m(x+11) ;

return (m (y ));

}

12、已知一个顺序表中的元素按元素值非递减有序排列,编写一个函数删除表中多余的值

相同的元素。

本题的算法思想是:由于顺序表中元素已按元素值非递减有序排列,值相同的元素比为相邻的元素,因此依次比较相邻两个元素,若值相等,则删除其中一个,否则继续向后查找,直到最后一个元素。实现本题功能的函数如下:

voiddel ( seqlist*a )

{

inti=0, j;

while ( ilength)

if ( a->data[i]!= a->data[i+1])i++;

else

{

for ( j=i; jlength; j++)a->data[j]=a->data[j+1];

a->length--;

}

13、分别写出求二叉树结点总数及叶子总数的算法。

①计算结点总数

int CountNode(BinTree *root)

{

int num1,num2;

if(root==Null) return(0);

else if(root->lchild==Null&&rooot->rchild==Null)

return(1);

else

{

num1=CountNode(root->lchild);

num2=CountNode(root->rchild);

return(num1+num2+1);

}

②计算叶子总数

int CountLeafs(BinTree *root)

{

int num1,num2;

if(root==Null) return(0);

else if(root->lchild==Null&&root->rchild==Null)

return(1);

else

{

num1=CountLeafs(root->lchild);

num2=CountLeafs(root->rchild);

return(num1+num2);

}

分治术

14、有金币15枚,已知其中有一枚是假的,而且它的重量比真币轻。要求用一个天平将假

的金币找出来,试设计一种算法(方案),使在最坏情况下用天平的次数最少。

procedure SELECKP(p,q)

//A是一个全程数组,分别表示n个硬币的重量,在本题中表示15个硬币;p和q表示假币所在的一组硬币的起始和终止编号;最后返回硬币的编号;在主程序中调用

SELECKP(1,15)

if p=q

then

return(p);

endif;

global ingeger A(p:q);

integer a,b,c,d,m;

a←p;//第一组数的起始编号

d←q;//第二组硬币的终止编号

m←0;//最多余的一个硬币所在的编号

if(ISODD(q-p+1))//如果该组硬币数量为d奇数

then m←q;//最后一个数不作比较

d←d-1;

edif

c←(a+d+1)/2;//第二组硬币的起始编号编号

b←b-1;//第一组硬币的终止编号

//将该组硬币分为平均分为两组,然后用天平比较两组重量,将轻的一组递归调用本方法

If WEIGHT(a,b)

then return(SELECKP(a,b));

else if WEIGHT(a,b)>WEIGHT(c,d)

then return(SELECKP(c,d));

else if m!=0//若两组硬币重量相等,则剩下一个为假币

return(m);

else//如果两组硬币重量相等,且没有不比较的硬币,即本次检查的硬币总数为偶数,表示没有硬币

print("没有假币");

return(0);

endif

end SELECKP

call PARTITION(m,j)//返回j,它使得A(j),它使得A(j)是第j小的值case

:k=j:return //找到该元素该元素为A(j)

:k

:else:m←j+1//j+1是新的下界,k在j+1与m之间 endcase

repeat

end SELECT

procedure PARTITION(m,p)

integer m,p,i;global A(m:p-1);

v←A(m);i←m;//A(m)是划分元素//

loop

loop i←i+1 until A(i)>=v repeat //i由左向右移

loop p←p-1 until A(p)<=v repeat //p由左向右移

if i

then call A(i)?A(p)//A(i)和A(p)换位

else exit

endif

repeat

A(m)←A(p);A(p)←v //划分元素在位置p//

end PARTITION

16、设有n个运动员要进行网球循环赛。设计一个满足以下要求的比赛日程表。

(1)每个选手必须与其它n-1选手各赛一次;

(2)每个选手一天只能赛一次。

17、已知序列{503,87,512,61,908,170,897,275,652,462},写一个自底向上的

归并分类算法对该序列作升序排序,写出算法中每一次归并执行的结果。

void Merge(ElemType *r,ElemType *rf,int u,int v,int t)

{

f or(i=u,j=v,k=u;i

{ if(r[i].key

{ rf[k]=r[i];i++;}

else

{ rf[k]=r[j];j++;}

}

i f(i

i f(j<=t) rf[k…t]=r[j…t];

}

void MergeSort(S_TBL *p,ElemType *rf)

{ /*对*p表归并排序,*rf为与*p表等长的辅助数组*/

ElemType *q1,*q2;

q1=rf;q2=p->elem;

f or(len=1;lenlength;len=2*len) /*从q2归并到q1*/

{ for(i=1;i+2*len-1<=p->length;i=i+2*len)

Merge(q2,q1,i,i+len,i+2*len-1);/*对等长的两个子表合并*/

if(i+len-1length)

Merge(q2,q1,i,i+len,p->length);/*对不等长的两个子表合并*/

else if(i<=p->length)

while(i<=p->length) /*若还剩下一个子表,则直接传入*/

q1[i]=q2[i];

q1<-->q2;/*交换,以保证下一趟归并时,仍从q2归并到q1*/

if(q1!=p->elem) /*若最终结果不在*p表中,则传入之*/

for(i=1;i<=p->length;i++)

p->elem[i]=q1[i];

}

Procedure MERGE(low, mid, high)

//A(low : high)是一个全程数组,它含有两个放在A(low : mid)和A(mid+1 : high)中的已分类的子集合。目标是将这两个已分类的集合归并成一个集合,并存放到A(low : high)中//

//使用一个辅助数组B(low : high)//

Integer h, I, j, k, low, mid, high;//low≤mid

Global A(low : high); local B(low : high)

h ← low;//A中第一队列的队头

i←low;//第三队列,即B的队头

j←mid+1;//A中第二队列的队头

while h≤mid and j≤high do//当两个集合都没有取尽时//

if A(h)≤A(j)

then B(i)←A(h);h←h+1

else B(i)←A(j);j←j+1

endif

i←i+1

repeat

if h>mid then//处理剩余的元素//

for k←j to high do//第二队列未处理完

B(i)←A(k);i←i+1

repeat

Else for k←h to mid do//第一队列未处理完

B(i)←A(k);i←i+1

repeat

endif

for k← low to high do//将已归并的集合复制到A//

A(k)← B(k)

repeat

endMERGE

归并过程(黄色底纹的是每次归并的数)

1 2 3 4 5 6 7 8 9 10

0 503 87 512 61 908 170 897 275 652 462

1 87 503 51

2 61 908 170 897 275 652 462

2 87 50

3 512 61 908 170 897 275 652 462

3 87 503 512 61 908 170 897 275 652 462

4 61 87 503 512 908 170 897 27

5 652 462

5 61 87 503 512 908 170 897 275 652 462

6 61 8

7 503 512 90

8 170 275 897 652 462

7 61 87 503 512 908 170 275 897 462 652

8 61 87 503 512 908 170 275 462 652 897

9 61 87 170 275 462 503 512 652 897 908

贪心法

18、 设有n 个文件f 1,f 2,…,f n 要求存放在一个磁盘上,每个文件占磁盘上1个磁道。这

n 个文件的检索概率分别是p 1,p 2,…,p n ,且

∑=n

i i p 1

=1。磁头从当前磁道移到被检索信

息磁道所需的时间可用这两个磁道之间的径向距离来度量。如果文件f i 存放在第i 道上,1≤i ≤n 则检索这n 个文件的期望时间是

∑≤<≤n

j i 1j

i j)d(i,p p 。其中d(i ,j)是第i 道与第j

道之间的径向距离。磁盘文件的最优存储问题要求确定这n 个文件在磁盘上的存储位置,使期望检索时间达到最小。试设计一个解此问题的算法,并分析算法的正确性与计算复杂性。

/*

磁盘文件最优存储问题具有贪心选择性质:先将n 个文件从大到小按概率进行排序。假设排序后有p1>=p2>=…>=pn 。贪心选择性质表示每次所选择加入的对象文件,都能得到当前的最优值,即使得期望检索时间达到最小。在磁盘最优存储问题中,要想使期望检索时间达到最小。那么就要使两个概率较大者的径向距离越小越好。因此第一次从p1>=p2>=…>=pn 中选取P1所对应的文件f1置于中心磁道上。随后从剩余概率队列中选取概率最大和次最大者所对应的文件放在靠着f1的左磁道,和f1的右磁道。这将得到初始的最优值。同样地,继续选择剩余概率队列中概率最大和次最大者所对应的文件分别置于靠着刚才所得最优位置的左磁道和右磁道上,将得到新的最优值。所以磁盘最优存储问题具有贪心选择性质。

最优子结构性质:按照这n 个文件的排序概率(p1>=p2>=…>=pn)假设排序后的理想最优序列为:

f (n-1),f(n-3),f(n-5),…,f(i)…f4,f2,f1,f3,f5,…,f(j)…f(n -2),fn 。(n 为奇数)。若n 为偶数个,则补上一个数0。那么不管n 为奇数或者是偶数,其理想最优序列都可以表示为f (n-1),f(n-3),f(n-5),…,f(i)…f4,f2,f1,f3,f5,…,f(j)…f(n -2),fn 。(因为加上一个0,对其达到最小期望检索时间无影响,所以可以进行此处理。) 利用反证法思想假设存在一个

f (n-1),f(n-3),f(n-5),…,f(j)…f4,f2,f1,f3,f5,…,f(i)…f(n -2),fn 。该序列是原序列对调f(i)与f(j)的位置所得。该序列所得到的期望检索时间小于上面的贪心策略时间。经验证发现,该序列所获得的期望检索时间>原所获得的期望检索时间。与最优值相矛盾。故贪心解为最优解。 */

procedure GreedySearch (P ,A ,n )

//P(1:n)是按照P(i)>=P(i+1)排序的n 个文件读取的概率;A(1:n)表示对应的文件序号;X(1:n)表示n 个文件分别所放的在磁盘上的存储位置,即所要求的解 integer P (1:n ),A (1:n ); integer i ,k , n ;

k ←n /2; //取中间位置,除法为向下取整// X (k )←A (1); //中间位置放概率最大的文件// for i ←2 to n by +2 do X (k +i /2)←A (i ); repeat

for i ←3 to n by +2 do

19、设有n个正整数,编写一个算法将他们连接成一排,组成一个最大的多位整数。用贪

20、键盘输入一个高精度的正整数N(此整数中没有‘0’),去掉其中任意S个数字后剩下

的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小(输出应包括所去掉的数字的位置和组成的新的正整数,N

21、对于下图给出的有向网,写出用Dijkstra方法求从顶点A到图中其它顶点的最短路径

的算法,并写出执行算法过程中顶点的求解次序及从顶点A到各顶点路径的长度。

22、对于上图给出的有向图,写出最小成本生成树,给出求解算法。

动态规划

24、下图中给出了一个地图,地图中每个顶点代表一个城市,两个城市间的连线代表道路,

连线上的数值代表道路的长度。现在,想从城市A到达城市E,怎样走路程最短,最短路程的长度是多少?

1→3→7 →10 →11 (13)

25、已知序列a1,a2,…,a n,试设计一算法,从中找出一子序列

a i1 < a i2 < …< a ik

repeat

repeat

return f(n-1)

end lis

这个算法有两层循环,外层循环次数为n-1次,内层循环次数为i次,算法的时间复杂度

所以T(n)=O(n2)。这个算法的最坏时间复杂度与第一种算法的阶是相同的。

算法二:(改进后算法)

procedure lis1(A,B,n)

//A(1:n)为长度为n数组序列,数组B来存储“子序列的”最大递增子序列的最末元素

B[0]=-10000;//把B[0]设为最小,假设任何输入都大于-10000;

B[1]=A[0];//初始时,最大递增子序列长度为1的最末元素为a1

int len =1;//Aen为当前最大递增子序列长度,初始化为1;

int p,r,m;//p,r,m分别为二分查找的上界,下界和中点;

for i =1 to n do

p=0;r=len;

while p<=r do//二分查找最末元素小于ai+1的长度最大的最大递增子序列;

m =(p+r)/2;

if B[m]

then p = m+1;

else r = m-1;

endif

repeat

B[p]= A[i];//将长度为p的最大递增子序列的当前最末元素置为ai+1;

if(p>len)

then len++;//更新当前最大递增子序列长度;

endif

repeat

return len;

end lis1

算法的循环次数为n,每次循环二分查找用时logn,所以算法的时间复杂度为O(nlogn)。这个算法在第二种算法的基础上得到了较好的改进

26、设计一个O(n2)时间的算法,找出由n个数组成的序列的最长的单调递增子序列。(上题算法一)

27、旅游预算问题。一个旅行社需要估算乘汽车从某城市到另一城市的最小费用,沿路有

若干加油站,每个加油站收费不一定相同。旅游预算有如下规则:若油箱的油过半,不停车加油,除非油箱中的油不可支持到下一站;每次加油时都加满;在一个加油站加油时,司机要花费2元买东西吃;司机不必为其他意外情况而准备额外的油;汽车开出时在起点加满油箱;计算精确到分(1元=100分)。编写算法估计实际行驶在某路线所需的最小费用。

Procedure LESTCOST(v,vm,f,n,S,FP,P)

//共n个加油站,起点、加油站、和终点,分别编号为0,1,2......n,n+1,v为油箱容量,vm为每升油行驶的公里数,S为n个加油站和起点的距离,FP(1:n)为每个加油站的油价,

P(1:n)为每次所停的加油站

integer n,P(1:n),N(1:n);

float v,vm,f,S(1:n),FP(1:n),LEST(1:n);

integer i,j,k;

float vf;

i=0;vf=0;

LEST←MAX

LEST(0)←f

while i

j=i+1

while j

j←j-1

repeat

if S(j)-S(i)>v*vm

then j←j-1;

endif

if j<=i then print("不可能到达终点")return endif

if j=n then //到达终点

continue;

endif

k=j;

while j

vf=(S(j)-S(i))/vm//需要补充的汽油量

cost=LEST(i)+vf*FP(j)+2//在j站停车的最小血糖

if cost

LEST(j)=cost

N(j)=i

endif

j=j+1

repeat

i=k;

repeat

从k到n到到t,使LEST(t)最小

P(n)=n;

p(n-1)=j

while j>0

P(j-1)=F(P(j));

j=P(j-1);

enif

enif

28、下图表示城市之间的交通路网,线段上的数字表示费用,单向通行由A->E。试用动态

规划的最优化原理求出A->E的最省费用。

基本的多段图问题(略)

A---->B1(5)---->C1(6)---->D1(3)---->E(5),最短的距离为19

29、已知如下图,写出用动态规划求最短路径的递推关系式,并写出求从源点A0到终点

A3 的最短路径过程。给出求解算法。

6

A1 A2

5 5 2

A0 A3

3 4 4

B12

5

基本的多段图问题(略)

COST(2,A1)=min(6+COST(3,A2),5+COST(3,B2))=8

OCST(2,B1)=min(4+COST(3,A2),5+COST(3,B2))=6

COST(1,A0)=min(5+COST(2,A1),3+COST(2,B1))=9

最小成本路径为S=A0,B1,A2,A3

搜索与遍历问题

30、已知有向图G=,试设计一算法以判断对于任意两点u和v,是否存在一条从u

31、对于给定的一个二叉树T(如下图)

a)设计一个算法,统计二叉树中结点总数;

b)设计一个算法,求二叉树最大宽度及最大宽度所在深度。

算法设计与分析考试题及答案

算法设计与分析考试题 及答案 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】

一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:确定性 有穷性 可行性 0个或多个输入 一个或多个输出 2.算法的复杂性有时间复杂性 空间复杂性之分,衡量一个算法好坏的标准是 时间复杂度高低 3.某一问题可用动态规划算法求解的显着特征是 该问题具有最优子结构性质 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y 的一个最长公共子序列{BABCD}或{CABCD}或{CADCD } 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解 6.动态规划算法的基本思想是将待求解问题分解成若干_子问题 ,先求解_子问题 ,然后从这些子问题 的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为回溯法 背包问题的回溯算法所需的计算时间为o(n*2n ) ,用动态规划算法所需的计算时间为o(min{nc,2n }) 9.动态规划算法的两个基本要素是最优子结构 _和重叠子问题 10.二分搜索算法是利用动态规划法实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 ①问题具有最优子结构性质;②构造最优值的递归关系表达式; ③最优值的算法描述;④构造最优解; 2. 流水作业调度问题的johnson 算法的思想。 ①令N 1={i|a i =b i };②将N 1中作业按a i 的非减序排序得到N 1’,将N 2中作业按b i 的非增序排序得到N 2’;③N 1’中作业接N 2’中作业就构成了满足Johnson 法则的最优调度。 3. 若n=4,在机器M1和M2上加工作业i 所需的时间分别为a i 和b i ,且 (a 1,a 2,a 3,a 4)=(4,5,12,10),(b 1,b 2,b 3,b 4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 步骤为:N1={1,3},N2={2,4}; N 1’={1,3}, N 2’={4,2}; 最优值为:38 4. 使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为: 该问题的最优值为:16 最优解为:(1,1,0) 5. 设S={X 1,X 2,···,X n }是严格递增的有序集,利用二叉树的结点来存储S 中的元素,在表示S 的二叉搜索树中搜索一个元素X ,返回的结果有两种情形,(1)在二叉搜索树的内结点中找到X=X i ,其概率为b i 。(2)在二叉搜索树的叶结点中确定X ∈(X i ,X i+1),其概率为a i 。在表示S 的二叉搜索树T 中,设存储元素X i 的结点深度为C i ;叶结点(X i ,X i+1)的结点深度为d i ,则二叉搜索树T 的平均路长p 为多少假设二叉搜索树T[i][j]={X i ,X i+1,···,X j }最优值为m[i][j],W[i][j]= a i-1+b i +···+b j +a j ,则m[i][j](1<=i<=j<=n)递归关系表达式为什么 .二叉树T 的平均路长P=∑=+n i 1 Ci)(1*bi +∑=n j 0 dj *aj

算法分析与设计试卷

《算法分析与设计》试卷(A) (时间90分钟满分100分) 一、填空题(30分,每题2分)。 1.最长公共子序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法2.在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( B ). A.回溯法 B.分支限界法 C.回溯法和分支限界法 D.回溯法求解子集树问题 3.实现最大子段和利用的算法是( B )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法4..广度优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法5.衡量一个算法好坏的标准是( C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 6.Strassen矩阵乘法是利用( A)实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 7. 使用分治法求解不需要满足的条件是( A )。 A 子问题必须是一样的 B 子问题不能够重复 C 子问题的解可以合并 D 原问题和子问题使用相同的方法解 8.用动态规划算法解决最大字段和问题,其时间复杂性为( B ). A.logn B.n C.n2 D.nlogn 9.解决活动安排问题,最好用( B )算法 A.分治 B.贪心 C.动态规划 D.穷举 10.下面哪种函数是回溯法中为避免无效搜索采取的策略( B ) A.递归函数 B.剪枝函数C。随机数函数 D.搜索函数11. 从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( C )之外都是最常见的方式. A.队列式分支限界法 B.优先队列式分支限界法 C.栈式分支限界法 D.FIFO分支限界法 12. .回溯算法和分支限界法的问题的解空间树不会是( D ). A.有序树 B.子集树 C.排列树 D.无序树 13.优先队列式分支限界法选取扩展结点的原则是( C )。 A、先进先出 B、后进先出 C、结点的优先级 D、随机14.下面是贪心算法的基本要素的是( C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解15.回溯法在解空间树T上的搜索方式是( A ). A.深度优先 B.广度优先 C.最小耗费优先 D.活结点优先 二、填空题(20分,每空1分)。 1.算法由若干条指令组成的又穷序列,且满足输入、输出、 确定性和有限性四个特性。 2.分支限界法的两种搜索方式有队列式(FIFO)分支限界法、优先队列式分支限界法,用一个队列来存储结点的表叫活节点表。

2015年算法分析与设计期末考试试卷B卷

西南交通大学2015 — 2016学年第(一)学期考试试卷 课程代码 3244152课程名称 算法分析与设计 考试时间 120分钟 阅卷教师签字: __________________________________ 填空题(每空1分,共15分) 1、 程序是 (1) 用某种程序设计语言的具体实现。 2、 矩阵连乘问题的算法可由 (2) 设计实现。 3、 从分治法的一般设计模式可以看出,用它设计出的程序一般是 (3) 4、 大整数乘积算法是用 (4) 来设计的。 5、 贪心算法总是做出在当前看来 (5) 的选择。也就是说贪心算法并不从整体最优 考虑,它所做出的选择只是在某种意义上的 (6) o 6、 回溯法是一种既带有 (7) 又带有 (8) 的搜索算法。 7、 平衡二叉树对于查找算法而言是一种变治策略,属于变治思想中的 (9) 类型 8、 在忽略常数因子的情况下,0、门和0三个符号中, (10) 提供了算法运行时 间的一个上界。 9、 算法的“确定性”指的是组成算法的每条 (11) 是清晰的,无歧义的。 10、 冋题的(12) 是该冋题可用动态规划算法或贪心算法求解的关键特征。 11、 算法就是一组有穷 (13),它们规定了解决某一特定类型问题的 (14) o 12、 变治思想有三种主要的类型:实例化简,改变表现, (15) o 、 ___________________________________________________________________________________ L 线订装封密 线订装封密 、 __________________ 二 线订装封密 级班 选择题(每题2分,共20 分)

《算法设计与分析》试卷A

《算法设计与分析》试卷 一.计算题(共25分) 1. 用表示函数f与g之间的关系。(10分,每小题2分) (1) f(n)=10000n g(n)=n-10000 (2) f(n)=2n g(n)=3n/n (3) f(n)=n3log2n g(n)=n2log3n (4) f(n)=log2n g(n)=log3n (5) f(n)=100n+n100 g(n)=n! 2.估计下列算法的时间复杂性的阶。(10分,每小题5分) (1)算法A的时间复杂性为, (2)算法B的时间复杂性为 3. 计算下面算法中count=count+1的执行次数(5分) 算法 COUNT count=0 for i=1 to for j=i to i+5 for k=1 to i2 count=count+1 end for end for end for 二.简答题(共15分) 1. 随机算法分成那几类,各有什么特点?(7分) 2.最大k乘积问题:设I是一个n位十进制整数。如果将I划分为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。对于给定的I和k,求出I的最大k乘积。当用动态规划求解该问题时,最优子结构是什么?递归关系式是什么?(8分) 三.算法填空题(共45分,每空3分) 1. 以下是计算x m的值的过程 power ( x, m ) if m=0 then y=_____ (1)_______ else y=_____ (2)_______

装订 线 y=y*y if m 为奇数 then y=x*y

C=multiply( A , B) //计算两个矩阵乘积C=AB。 return C end if end matchain_product 3. 以下是迷宫问题的算法 算法 MAZE 输入:正整数m, n,表示迷宫的数组M[0..m+1, 0..n+1] (迷宫数据存于M[1..m, 1..n]中),迷宫的入口位置(ix, iy),出口位置(ox, oy)。 输出:迷宫中入口至出口的一条通路,若无通路,则输出no solution。 M[0, 0..n+1]=M[m+1, 0..n+1]=1

算法设计与分析考试题及答案

1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。 2.算法的复杂性有_____________和___________之分,衡量一个算法 好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是 ____________________________________。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。 6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为_____________。 8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。 10.二分搜索算法是利用_______________实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 2.流水作业调度问题的johnson算法的思想。

算法设计与分析试卷A及答案

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

参考答案 一、填空 1、空间复杂度 时间复杂度 2、回溯法 3、递归算法 4、渐进确界或紧致界 5、原问题的较小模式 递归技术 6、问题的计算复杂性分析有一个共同的客观尺度 7、②③④① 8、问题的最优解包含其子问题的最优解 9、局部最优 10、正确的 三、简答题 1、高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作; 高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高; 高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可植性好、重用率高; 把繁杂琐碎的事务交给编译程序,所以自动化程度高,开发周期短,程序员可以集中时间和精力从事更重要的创造性劳动,提高程序质量。 2、 ①不能保证最后求得的解是最佳的;即多半是近似解。(少数问题除外) ②策略容易发现(关键:提取清楚问题中的维度), 而且运用简单,被广泛运用。 ③策略多样,结果也多样。 ④算法实现过程中,通常用到辅助算法:排序 3、解:① 因为:;01 -10n n )1-10n n (lim 22 2=+-+→∞n n 由渐近表达式的定义易知: 1-10n n 2 2+是n ;的渐近表达式。 ② 因为:;0n 1/ 5/n 1414)n 1/ 5/n 14(lim 22=++-++∞→n 由渐近表达式的定义易知: 14是14+5/n+1/ n 2的渐近表达式。 4、 找出最优解的性质,并刻划其结构特征。 递归地定义最优值。 以自底向上的方式计算出最优值。 根据计算最优值时得到的信息,构造最优解。 四、算法设计题 1、按照单位效益从大到小依次排列这7个物品为:FBGDECA 。将它们的序号分别记为1~7。则可生产如下的状态空间搜索树。其中各个节点处的限界函数值通过如下方式求得:【排序1分】 5x =6x =7x =

(完整版)算法设计与分析期末考试卷及答案a

一.填空题(每空 2 分,共30分) 1.算法的时间复杂性指算法中的执行次数。 2.在忽略常数因子的情况下,O、和三个符号中,提供了算法运行时间的一个上界。 3.设D n表示大小为n的输入集合,t(I)表示输入为I时算法的运算时间, p(I)表示输入 I 出现的概率,则算法的平均情况下时间复杂性A(n)= 。 4.分治算法的时间复杂性常常满足如下形式的递归方程: f (n) d , n n0 f(n) af(n/c) g(n) , n n0 其中,g(n)表示。 5. 分治算法的基本步骤包括。6.回溯算法的基本思想是。 7.动态规划和分治法在分解子问题方面的不同点是。 8.贪心算法中每次做出的贪心选择都是最优选择。 9.PQ 式的分支限界法中,对于活结点表中的结点,其下界函数值越小,优先级 10.选择排序、插入排序和归并排序算法中,算法是分治算法。 11.随机算法的一个基本特征是对于同一组输入,不同的运行可能得到的结果。12. 对于下面的确定性快速排序算法,只要在步骤3 前加入随机 化步骤,就可得到一个随机化快速排序算法,该随机化步骤的功能是。 算法QUICKSORT 输入:n 个元素的数组A[1..n] 。 输出:按非降序排列的数组 A 中的元素

1. quicksort(1, n) end QUICKSORT _ _ 过程 quicksort(A, low, high) _ _ // 对 A[low..high] 中的元素按非降序排序。 _ 号 学 2. if low

5.《算法设计与分析》试题库

《算法分析与设计》试题库 (一) 一、 选择题 1.应用Johnson 法则的流水作业调度采用的算法是(D ) A. 贪心算法 B.分支限界法 C.分治法 B. void hanoi(int n, int A, int B, int C) { if (n > 0) { hanoi(n-1, A, C, B); move( n, a,b); hanoi(n-1, C, B, A); 2.Hanoi 塔问题如下图所示。现要求将塔座A 上的的所有圆盘移到塔座 B 上,并 D.动态规划算法

3. 动态规划算法的基本要素为(C) A. 最优子结构性质与贪心选择性质 B ?重叠子问题性质与贪心选择性质 C.最优子结构性质与重叠子问题性质

D.预排序与递归调用 4. 算法分析中,记号0表示(B),记号0表示(A),记号。表示(D) A. 渐进下界 B. 渐进上界 C. 非紧上界 D. 紧渐进界 E. 非紧下界 5. 以下关于渐进记号的性质是正确的有:(A) A. f(n) - P(g(n)),g(n) - 心(h(n))二f(n) - P(h(n)) B. f(n) =0(g(n)),g(n) =0(h(n))二h(n) =0(f(n)) C. O(f(n ))+0(g( n)) = O(mi n{f(n ),g( n)}) D. f(n) =0(g(n)) = g(n) -0(f (n)) 6?能采用贪心算法求最优解的问题,一般具有的重要性质为:(A) A. 最优子结构性质与贪心选择性质 B ?重叠子问题性质与贪心选择性质 C. 最优子结构性质与重叠子问题性质 D. 预排序与递归调用 7.回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。 A. 广度优先 B.活结点优先 C.扩展结点优先 D.深度优先

算法设计与分析试卷(2010)

内部资料,转载请注明出处,谢谢合作。 算法设计与分析试卷(A 卷) 一、 选择题 ( 选择1-4个正确的答案, 每题2分,共20分) (1)计算机算法的正确描述是: A .一个算法是求特定问题的运算序列。 B .算法是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型的问题的运算序列。 C .算法是一个对任一有效输入能够停机的图灵机。 D .一个算法,它是满足5 个特性的程序,这5个特性是:有限性、确定性、能 行性、有0个或多个输入且有1个或多个输出。 (2)影响程序执行时间的因素有哪些? A .算法设计的策略 B .问题的规模 C .编译程序产生的机器代码质量 D .计算机执行指令的速度 (3)用数量级形式表示的算法执行时间称为算法的 A .时间复杂度 B .空间复杂度 C .处理器复杂度 D .通信复杂度 (4)时间复杂性为多项式界的算法有: A .快速排序算法 B .n-后问题 C .计算π值 D .prim 算法 (5)对于并行算法与串行算法的关系,正确的理解是: A .高效的串行算法不一定是能导出高效的并行算法 B .高效的串行算法不一定隐含并行性 C .串行算法经适当的改造有些可以变化成并行算法 D. 用串行方法设计和实现的并行算法未必有效 (6)衡量近似算法性能的重要标准有: A .算法复杂度 B .问题复杂度 C .解的最优近似度 D .算法的策略 (7)分治法的适用条件是,所解决的问题一般具有这些特征: A .该问题的规模缩小到一定的程度就可以容易地解决; B .该问题可以分解为若干个规模较小的相同问题; C .利用该问题分解出的子问题的解可以合并为该问题的解 D .该问题所分解出的各个子问题是相互独立的。 (8)具有最优子结构的算法有: A .概率算法 B .回溯法 C .分支限界法 D .动态规划法 (9)下列哪些问题是典型的NP 完全问题: A .排序问题 B .n-后问题 C .m-着色问题 D .旅行商问题 (10)适于递归实现的算法有: A .并行算法 B .近似算法 C .分治法 D .回溯法 二、算法分析题(每小题5分,共10分) (11)用展开法求解递推关系: (12)分析当输入数据已经有序时快速排序算法的不足,提出算法的改进方案。 ???>+-==1 1)1(211)(n n T n n T

算法设计与分析试卷及答案

湖南科技学院二○年学期期末考试 信息与计算科学专业年级《算法设计与分析》试题 考试类型:开卷试卷类型:C卷考试时量:120分钟 题号一二三四五总分统分人 得分 阅卷人 复查人 一、填空题(每小题3 分,共计30 分) 1、用O、Ω与θ表示函数f与g之间得关系______________________________。 2、算法得时间复杂性为,则算法得时间复杂性得阶为__________________________。 3、快速排序算法得性能取决于______________________________。 4、算法就是_______________________________________________________。 5、在对问题得解空间树进行搜索得方法中,一个活结点最多有一次机会成为活结点得就是_________________________。 6、在算法得三种情况下得复杂性中,可操作性最好且最有实际价值得就是_____情况下得时间复杂性。 7、大Ω符号用来描述增长率得下限,这个下限得阶越___________,结果就越有价值。。 8、____________________________就是问题能用动态规划算法求解得前提。 9、贪心选择性质就是指____________________________________________________________________________________________________________________。 10、回溯法在问题得解空间树中,按______________策略,从根结点出发搜索解空间树。 二、简答题(每小题10分,共计30分) 1、试述回溯法得基本思想及用回溯法解题得步骤。 2、有8个作业{1,2,…,8}要在由2台机器M1与M2组成得流水线上完成加工。每个作业加工得顺序都就是先在M1上加工,然后在M2上加工。M1与M2加工作业i所需得时间分别为: M110 2 8 12 6 9414

算法分析与设计模拟试卷A

算法设计与分析期末考试模拟试卷 A卷 考试说明: 承诺: 本人已学习了《北京工业大学考场规则》和《北京工业大学学生违纪处分条例》,承诺在考试过程中自觉遵守有关规定,服从监考教师管理,诚信考试,做到不违纪、不作弊、不替考。若有违反,愿接受相应的处分。 承诺人:学号:班号: 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。注:本试卷共三大题,共 6 页,满分100分,考试时答案请写在试卷空白处。 一、算法时间复杂性问题(共30分) Part 1. The Time Complexity Of the Algorithm Test 1、试证明下面的定理:[12分] (1) 如果f(n)=O(s(n))并且g(n)=O(r(n)),则f(n)+g(n)=O(s(n)+r(n)) (2) 如果f(n)=O(s(n))并且g(n)=O(r(n)),则f(n)*g(n)=O(s(n)*r(n)) 1. Prove the following Theorem [12 marks] (1) if f(n)=O(s(n)) and g(n)=O(r(n)), to prove f(n)+g(n)=O(s(n)+r(n)) (2) if f(n)=O(s(n)) and g(n)=O(r(n)),to prove f(n)*g(n)=O(s(n)*r(n))

2、已知有如下的断言: f(n)=O(s(n))并且g(n)=O(r(n))蕴含f(n)-g(n)=O(s(n)-r(n)) 请你举出一个反例。[8分] 2. Known as the following assertion If f(n)=O(s(n)) and g(n)=O(r(n)),then f(n)-g(n)=O(s(n)-r(n)) 。 Please cite a counter-example [8 marks] 3、假设某算法在输入规模为n时的计算时间为:T(n)=3*2n,在A型计算机上实现并完成该算法的时间为t秒,现有更先进的B型计算机,其运算速度为A 型计算机的256倍。试求出若在先进的B型机上运行同一算法则在t秒内能求解输入规模为多大的问题?[10分] 3. Assume that in the case of the input size is n, the computing time of the algorithm required is T(n)=3*2n. It would take t seconds to implement the algorithm on Computer A. Computer B is more advanced. The operation ability of Computer B is 256 times of Computer A. If the same algorithm running on Computer B, please find out the input size so that the algorithm would solve in t seconds.[10 marks]

算法分析与设计复习题及答案

算法分析与设计复习题及答案一、单选题 1.D 2.B 3.C 4.D 5.D 6.D 7.C 8.D 9.B 10.C 11.D 12.B 13.D 14.C 15.C 16.D 17.D 18.D 19.D 20.C 1.与算法英文单词algorithm具有相同来源的单词是()。 A logarithm B algiros C arithmos D algebra 2.根据执行算法的计算机指令体系结构,算法可以分为()。 A精确算法与近似算法B串行算法语并行算法 C稳定算法与不稳定算法D32位算法与64位算法 3.具有10个节点的完全二叉树的高度是()。 A6B5C3D 2 4.下列函数关系随着输入量增大增加最快的是()。 Alog2n B n2 C 2n D n! 5.下列程序段的S执行的次数为( )。 for i ←0 to n-1 do for j ←0 to i-1 do s //某种基本操作 A.n2 B n2/2 C n*(n+1) D n(n+1)/2 6.Fibonacci数列的第十项为( )。 A 3 B 13 C 21 D 34 7.4个盘子的汉诺塔,至少要执行移动操作的次数为( )。 A 11次 B 13次 C 15次 D 17次 8.下列序列不是堆的是()。 A 99,85,98,77,80,60,82,40,22,10,66 B 99,98,85,82,80,77,66,60,40,22,10 C 10,22,40,60,66,77,80,82,85,98,99 D 99,85,40,77,80,60,66,98,82,10,22 9.Strassen矩阵乘法的算法复杂度为()。 AΘ(n3)BΘ(n2.807) CΘ(n2) DΘ(n) 10.集合A的幂集是()。 A.A中所有元素的集合 B. A的子集合 C. A 的所有子集合的集合 D. 空集 11.与算法英文单词algorithm具有相同来源的单词是()。 A logarithm B algiros C arithmos D algebra 12.从排序过程是否完全在内存中显示,排序问题可以分为()。 A稳定排序与不稳定排序B内排序与外排序 C直接排序与间接排序D主排序与辅助排序 13.下列()不是衡量算法的标准。 A时间效率B空间效率 C问题难度D适应能力 14.对于根树,出度为零的节点为()。 A0节点B根节点C叶节点D分支节点 15.对完全二叉树自顶向下,从左向右给节点编号,节点编号为10的父节点编号为()。 A0B2C4D6 16.下列程序段的算法时间的复杂度为()。 for i ←0 to n do for j ←0 to m do

《算法分析与设计》期末试题及参考答案

《算法分析与设计》期末试题及参考答案 一、简要回答下列问题: 1.算法重要特性是什么? 1.确定性、可行性、输入、输出、有穷性 2. 2.算法分析的目的是什么? 2.分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。 3. 3.算法的时间复杂性与问题的什么因素相关? 3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。 4.算法的渐进时间复杂性的含义? 4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。 5.最坏情况下的时间复杂性和平均时间复杂性有什么不同? 5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的 算法所耗时间。最坏情况下的时间复杂性取的输入实例中最大的时间复杂度: W(n) = max{ T(n,I) } , I∈Dn 平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和: A(n) =∑P(I)T(n,I) I∈Dn 6.简述二分检索(折半查找)算法的基本过程。 6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较, 如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]

《算法分析与设计》期末复习题

一、选择题 1.一个.java文件中可以有()个public类。 A.一个B.两个C.多个D.零个 2.一个算法应该是() A.程序B.问题求解步骤的描述 C.要满足五个基本特性D.A和C 3.用计算机无法解决“打印所有素数”的问题,其原因是解决该问题的算法违背了算法特征中的()A.唯一性B.有穷性C.有0个或多个输入D.有输出 4.某校有6位学生参加学生会主席竞选,得票数依次为130,20,98,15,67,3。若采用冒泡排序算法对其进行排序,则完成第二遍时的结果是() A.3,15,130,20,98,67B.3,15,20,130,98,67 C.3,15,20,67,130,98 D.3,15,20,67,98,130 5.下列关于算法的描述,正确的是() A.一个算法的执行步骤可以是无限的B.一个完整的算法必须有输出 C.算法只能用流程图表示D.一个完整的算法至少有一个输入 6.Java Application源程序的主类是指包含有()方法的类。 A、main方法 B、toString方法 C、init方法 D、actionPerfromed方法 7.找出满足各位数字之和等于5的所有三位数可采用的算法思路是() A.分治法B.减治法C.蛮力法D.变治法 8.在编写Java Application程序时,若需要使用到标准输入输出语句,必须在程序的开头写上( )语句。 A、import java.awt.* ; B、import java.applet.Applet ; C、import java.io.* ; D、import java.awt.Graphics ; 9.计算某球队平均年龄的部分算法流程图如图所示,其中:c用来记录已输入球员的人数,sum用来计算有效数据之和,d用来存储从键盘输入的球员年龄值,输入0时表示输入结束。

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末复习题 一、选择题 1.算法必须具备输入、输出和( D )等4个特性。 A.可行性和安全性 B.确定性和易读性 C.有穷性和安全性 D.有穷性和确定性 2.算法分析中,记号O表示( B ),记号Ω表示( A ) A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。在某台计算机上实现并 完成概算法的时间为t秒。现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题( B )解题方法:3*2^n*64=3*2^x A.n+8 B.n+6 C.n+7 D.n+5 4.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1, T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。 A.O(logN) B.O(N) C.O(NlogN) D.O(N2logN) 5.直接或间接调用自身的算法称为( B )。 A.贪心算法 B.递归算法 C.迭代算法 D.回溯法 6.Fibonacci数列中,第4个和第11个数分别是( D )。 A.5,89 B.3,89 C.5,144 D.3,144 7.在有8个顶点的凸多边形的三角剖分中,恰有( B )。

A.6条弦和7个三角形 B.5条弦和6个三角形 C.6条弦和6个三角形 D.5条弦和5个三角形 8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。 A.重叠子问题 B.最优子结构性质 C.贪心选择性质 D.定义最优解 9.下列哪个问题不用贪心法求解( C )。 A.哈夫曼编码问题 B.单源最短路径问题 C.最大团问题 D.最小生成树问题 10.下列算法中通常以自底向上的方式求解最优解的是( B )。 A.备忘录法 B.动态规划法 C.贪心法 D.回溯法 11.下列算法中不能解决0/1背包问题的是( A )。 A.贪心法 B.动态规划 C.回溯法 D.分支限界法 12.下列哪个问题可以用贪心算法求解( D )。 A.LCS问题 B.批处理作业问题 C.0-1背包问题 D.哈夫曼编码问题 13.用回溯法求解最优装载问题时,若待选物品为m种,则该问题的解空间树的结点 个数为()。 A.m! B.2m+1 C.2m+1-1 D.2m 14.二分搜索算法是利用( A )实现的算法。 A.分治策略 B.动态规划法 C.贪心法 D.回溯法 15.下列不是动态规划算法基本步骤的是( B )。P44 A.找出最优解的性质 B.构造最优解 C.算出最优解(应该是最优值) D.定义最优解

算法设计与分析期末试题-考试版(汇编)

1、用计算机求解问题的步骤:1、问题分析 2、数学模型建立 3、算法设计与选择 4、算法指标 5、算法分析 6、算法实现 7、程序调试 8、结果整理文档编制 2、算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程 3、算法的三要素 1、操作 2、控制结构 3、数据结构 算法具有以下5个属性: 有穷性: 确定性: 可行性: 输入: 输出: 算法设计的质量指标: 正确性:算法应满足具体问题的需求; 可读性:算法应该好读,以有利于读者对程序的理解; 健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。 效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。一般这两者与问题的规模有

关。 复杂性的渐近性态 设T(N)是算法A的复杂性函数,使得当N→∞时有: (T(N)-T’(N))/T(N) → 0 那么,我们就说T’(N)是T(N)当N→∞时的渐近性态,或叫T’(N)为算法A当N→∞的渐近复杂性而与T(N)相区别。 P = NP 经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法 分而治之法 1、基本思想 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以

便各个击破,分而治之。 分治法所能解决的问题一般具有以下几个特征: (1)该问题的规模缩小到一定的程度就可以容易地解决; (2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质; (3)利用该问题分解出的子问题的解可以合并为该问题的解; (4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。 3、分治法的基本步骤 (1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题; (2)解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题; (3)合并:将各个子问题的解合并为原问题的解。 递归: 直接或间接的调用自身的算法,叫做递归算法。 1·期盘覆盖 用分治策略,可以设计解棋盘问题的一个简捷的算法。 当k>0时,将2^k * 2^k棋盘分割为4个2^(k-1) * 2^(k-1)子棋盘 特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,我们可以用一个L型骨牌覆盖这3个较小的棋盘的汇合处,如下图所示,这3个子棋盘上被L型骨牌覆盖的方格就成为该棋盘上的特殊方格,从而将原问题化为4个较小规模的棋盘覆盖问题。递归的使用这种分割,直至棋盘简化为1x1棋盘。

算法设计与分析试题与答案

一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性: 确定性,有穷性,可行性,0个或多个输入,一个或多个输出。 2.算法的复杂性有时间复杂性和空间复杂性之分,衡量一个算法好坏的标准是时间复杂度高低。 3.某一问题可用动态规划算法求解的显著特征是该问题具有最优子结构性质。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X和Y的一个最长公共子序列{BABCD}或{CABCD}或{CADCD}。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解。 6.动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为回溯法。 8.0-1背包问题的回溯算法所需的计算时间为o(n*2n) ,用动态规划算法所需的计算时间为o(min{nc,2n})。 9.动态规划算法的两个基本要素是最优子结构和重叠子问题。 10.二分搜索算法是利用动态规划法实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 ①问题具有最优子结构性质;

②构造最优值的递归关系表达式; ③最优值的算法描述; ④构造最优解; 2.流水作业调度问题的johnson算法的思想。 ②N1={i|ai=bi}; ②将N1中作业按ai的非减序排序得到N1’,将N2中作业按bi的非增序排序得到N2’; ③N1’中作业接N2’中作业就构成了满足Johnson法则的最优调度。 3.若n=4,在机器M1和M2上加工作业i所需的时间分别为ai和bi,且 (a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 步骤为:N1={1,3},N2={2,4}; N1’={1,3}, N2’={4,2}; 最优值为:38 4.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3 的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为:

算法分析与设计试题

一、选择题(20分) 1.最长公共子序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法2.实现棋盘覆盖算法利用的算法是( A )。 A、分治法 B、动态规划法 C、贪心法 D、回溯法 3.下面是贪心算法的基本要素的是( C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解 4.回溯法的效率不依赖于下列哪些因素( D ) A.满足显约束的值的个数 B. 计算约束函数的时间 C. 计算限界函数的时间 D. 确定解空间的时间 5.下面哪种函数是回溯法中为避免无效搜索采取的策略( B ) A.递归函数 B.剪枝函数C。随机数函数 D.搜索函数6.采用最大效益优先搜索方式的算法是( A )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法7.贪心算法与动态规划算法的主要区别是( B )。 A、最优子结构 B、贪心选择性质 C、构造最优解 D、定义最优解 8. 实现最大子段和利用的算法是( B )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 9.优先队列式分支限界法选取扩展结点的原则是( C )。 A、先进先出 B、后进先出 C、结点的优先级 D、随机 10.下列算法中通常以广度优先方式系统搜索问题解的是( A )。 A、分支限界法 B、动态规划法 C、贪心法 D、回溯法

二、填空题(22分每空2分) 1.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有限性四条性质。 2、大整数乘积算法是用分治法来设计的。 3、以广度优先或以最小耗费方式搜索问题解的算法称为分支限界法。 4、舍伍德算法总能求得问题的一个解。 5、贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。 6.快速排序 template void QuickSort (Type a[], int p, int r) { if (p using namespace std; int Gcd(int m,int n)

相关文档
相关文档 最新文档