算法设计与分析期末考试卷及答案a

一.填空题(每空2分,共30分)

1.算法的时间复杂性指算法中的执行次数。

2.在忽略常数因子的情况下,O、{EMBED Equation.3 | 和三个符号中,提供了算法运行时间的一个上界。

3.设D n表示大小为n的输入集合,t(I)表示输入为I时算法的运算时间, p(I)表示输入I出现的概率,则算法的平均情况下时间复杂性A(n)= 。4.分治算法的时间复杂性常常满足如下形式的递归方程:

其中,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

A[i]A[1]

w =i

return w, A

end SPLIT

二.计算题和简答题(每小题7分,共21分)

1.用O、、表示函数f与g之间阶的关系,并分别指出下列函数中阶最低和最高的函数:

(1) f (n)=100 g(n)=

(2) f(n)=6n+n g(n)=3n

(3) f(n)= n/logn-1 g(n)=

(4) f(n)= g(n)=

(5) f(n)= g(n)=

2.下面是一个递归算法,其中,过程pro1和pro2的运算时间分别是1和。给出该算法的时间复杂性T(n)满足的递归方程,并求解该递归方程,估计T(n)的阶(用表示)。

算法EX1

输入:正整数n,n=2k。

输出:…

ex1(n)

end EX1

过程ex1(n)

if n=1 then

pro1(n)

else

考 生

信 息 栏 _

_

____学

院_

__

___

系__

_

_

_

_

专业

_

_

_

_

_

_

姓名

_

_

_

_

_

_

学号_

___

_ 装 订 线 pro2(n) ex1(n/2) end if return end ex1 3.用Floyd 算法求下图每一对顶点之间的最短路径长度,计算矩阵D 0,D 1,D 2和D 3,其中D k [i, j]表示从顶点i 到顶点j 的不经过编号大于k 的顶点的最短路径长度。 三.算法填空题(共34分) 1.(10分)设n 个不同的整数按升序存于数组A[1..n]中,求使得A[i]=i 的下标i 。下面是求解该问题的分治算法。 算法 SEARCH 输入:正整数n ,存储n 个按升序排列的不同整数的数组A[1..n]。 输出:A[1..n]中使得A[i]=i 的一个下标i ,若不存在,则输出 no solution 。 i=find ( (1) ) if i>0 then output i else output “no solution ” end SEARCH 过程 find (low, high) // 求A[low..high] 中使得A[i]=i 的一个下标并返回,若不存在,

//则返回0。

if (2) then return 0

else

mid=

if (3) then return mid

else

if A[mid]

return find( (4) )

else

return (5)

end if

end if

end if

end find

2.(10分) 下面是求解矩阵链乘问题的动态规划算法。

矩阵链乘问题:给出n个矩阵M1, M2, …, M n , M i 为r i r i+1阶矩阵,i=1, 2, …, n,求计算M1M2…M n所需的最少数量乘法次数。

记M i, j=M i M i+1…M j , i<=j。设C[i, j], 1<=i<=j<=n, 表示计算M i, j的所需的最少数量乘法次数,则

算法MATCHAIN

输入:矩阵链长度n, n个矩阵的阶r[1..n+1], 其中r[1..n]为n个矩阵的行数,r[n+1]为第n个矩阵的列数。

输出:n个矩阵链乘所需的数量乘法的最少次数。

考 生 信

息 栏 __

____学

院_

__

__

_系______ 专业 ______年级

_

_

_

_

_

_

学号_

___

_ 装

线

for i=1 to n C[i, i]= (1)

for d=1 to n-1

for i=1 to n-d

j= (2) C[i, j]= ∞ for k=i+1 to j x= (3) if x

x=x0; y=y0 ; tag[x, y]=1

m=n*n

i=1; k[i]=0

while (1) and not flag

while k[i]<8 and not flag

k[i]= (2)

x1= x+dx[k[i]]; y1= y+dy[k[i]]

if ((x1,y1)无越界and tag[x1, y1]=0) or ((x1,y1)=(x0,y0) and i=m) then x=x1; y=y1

tag[x, y]= (3)

if i=m then flag=true

else

i= (4)

(5)

end if

end if

end while

i=i-1

(6)

(7)

end while

if flag then outputroute(k) //输出路径

else output “no solution”

end HORSETRA VEL

《算法设计与分析》期考试卷(A)标准答案 一. 填空题:

1. 元运算 考

生 信 息 栏 _

_

____学

院_

__

__

_系______ 专业 ______年级

_

_

_

__

_ 学号_

_

__

_ 装

线

四.算法设计题(15分) 1. 一个旅行者要驾车从A 地到B 地,A 、B 两地间距离为s 。A 、B 两地之间有n 个加油站,已知第i 个加油站离起点A 的距离为公里,0=,车加满油后可行驶m 公里,出发之前汽车油箱为空。应如何加油使得从A 地到B 地沿途加油次数最少?给出用贪心法求解该最优化问题的贪心选择策略,写出求该最优化问题的最优值和最优解的贪心算法,并分析算法的时间复杂性。

2. O

3.

4. 将规模为n的问题分解为子问题以及组合相应的子问题的解所需的时间

5. 分解,递归,组合

6. 在问题的状态空间树上作带剪枝的DFS搜索(或:DFS+剪枝)

7. 前者分解出的子问题有重叠的,而后者分解出的子问题是相互独立(不重叠)的

8. 局部

9. 高

10. 归并排序算法

11. 不同

12. v=random (low, high); 交换A[low]和A[v]的值

随机选主元

13. 比较

n

二.计算题和简答题:

1. 阶的关系:

(1) f(n)= O(g(n))

(2) f(n)=(g(n))

(3) f(n)=(g(n))

(4) f(n)= O(g(n))

(5) f(n)=(g(n))

阶最低的函数是:100

阶最高的函数是:

2. 该递归算法的时间复杂性T(n)满足下列递归方程:

将n=, a=1, c=2, g(n)=, d=1代入该类递归方程解的一般形式得:

T(n)=1+=1+k-

=1+ k-=++1

所以,T(n)= ++1=。

3.

三.算法填空题:

1.(1) 1, n (2) low>high (3) A[mid]=mid

(4) mid+1, high (5) find(low, mid-1)

2. (1) 0 (2) i+d (3) C[i, k-1]+C[k, j]+r[i]*r[k]*r[j+1]

(4) C[i, j] (5) C[1, n]

3. (1) i>=1 (2)k[i]+1 (3) 1

(4) i+1 (5) k[i]=0 (6) tag[x, y]=0

(7) x=x-dx[k[i]]; y=y-dy[k[i]]

四.算法设计题:

1. 贪心选择策略:从起点的加油站起每次加满油后不加油行驶尽可能远,直至油箱中的油

耗尽前所能到达的最远的油站为止,在该油站再加满油。

算法MINSTOPS

输入:A、B两地间的距离s,A、B两地间的加油站数n,车加满油后可行驶的公里数m,存储各加油站离起点A的距离的数组d[1..n]。

输出:从A地到B地的最少加油次数k以及最优解x[1..k](x[i]表示第i次加油的加油站序号),若问题无解,则输出no solution。

d[n+1]=s; //设置虚拟加油站第n+1站。

for i=1 to n

if d[i+1]-d[i]>m then

output “no solution”; return //无解,返回

end if

end for

k=1; x[k]=1 //在第1站加满油。

s1=m //s1为用汽车的当前油量可行驶至的地点与A点的距离

i=2

while s1

if d[i+1]>s1 then //以汽车的当前油量无法到达第i+1站。

k=k+1; x[k]=i //在第i站加满油。

s1=d[i]+m //刷新s1的值

end if

i=i+1

end while

output k, x[1..k]

MINSTOPS

最坏情况下的时间复杂性:Θ(n)

相关文档
最新文档