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

(完整版)算法设计与分析期末考试卷及答案a
(完整版)算法设计与分析期末考试卷及答案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

3.

w=SPLIT(A, low, high)

栏 _

//算法 SPLIT 以 A[low] 为主元将 A[low..high] 划分成两部

_

_

//分,返回主元的新位置。

4. quicksort (A, low, w-1)

5.

quicksort (A, w+1, high)

级 年 _

6. end if

线

end quicksort

_

_

13.下面算法的基本运算是

算,

该算法的时间复杂性阶

_ _

为 (

) 。

算法 SPLIT

_

输入:正整数 n ,数组 A[1..n] 。

_

_

输出:?。

_ _

i=1

考 _系

_

_

x=A[1]

_ _

for j=2 to n

_

_

if A[j]<=x then

_

院 i=i+1

学 _

if i j then A[i] A[j]

_ _

end if

_ _

_

end for

A[i] A[1]

w =i

return w, A end SPLIT

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

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

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

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

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

(4) f(n)= 2n n2g(n)=3n

(5) f(n)= log3 n g(n)= log2 n

2.下面是一个递归算法,其中,过程pro1 和pro2 的运算时间分别是1 和log 2n 。给出该算法的时间复杂性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 算法求下图每一对顶点之间的最短路径长度,计算矩阵D0,D1,D2和D3,其中D k[i, j]表示从顶点i到顶点j的不经过编号大于

k 的顶点的最短路径长

度。

三.算法填空题

(共

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 的一个下标并返回,若不存在,

输出: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

_(4) =x

_

名end if

息姓

end for

end for

年线end for

_信_

_return (5)

_

_end MATCHAIN

业3.(14 分)下面是用回溯法求解马的周游问题的算法。

生专

_订

马的周游问题:给出一个nxn 棋盘,已知一个中国象棋马在

_

_棋盘上的某个起点位置(x0, y0),求一条访问每个棋盘格点恰好_

_

一次,最后回到起点的周游路线。(设马走日字。)

考_系算法HORSETRAVEL

_装

__

_

输入:正整数n,马的起点位置(x0, y0),1<=x0, y0<=n 。

__

输出:一条从起点始访问nxn 棋盘每个格点恰好一次,最后回到起

_院点的周游路线;若问题无解,则输出no solution。

tag[1..n, 1..n]=0

_

dx[1..8]={2, 1, -1, -2, -2, -1, 1, 2}

_dy[1..8]={1, 2, 2, 1, -1, -2, -2, -1}

_flag=false

四.算法设计题( 15 分)

1. 一个旅行者要驾车从 A 地到 B 地,A 、B 两地间距离为 s 。A 、B 两

地之间有 n 个加油站,已知第 i 个加油站离起点 A 的距离为 d i 公里, 0=d 1 d 2

d n s ,车加满油后可行驶 m 公里,出发之前汽车

油箱为空。应如何加油使得从 A 地到 B 地沿途加油次数最少?给出 用贪心法求解该最优化问题的贪心选择策略,写出求该最优化问题 的最优值和最优解的贪心算法,并分析算法的时间复杂性。

线

线

《算法设计与分析》期考试卷 (A) 标准答案

一. 填空题:

1. 元运算

_ 栏

_ _

_

姓 息

_ _ _ 信

__ 信 __

_ _

_

专 生

__

_

_

_

_ _

_ 系 _ 考 __ _ _

__

2. O

3.

p(I)t(I)

I D n

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

T(n) 1

T(n) T(n/2) log 2n , n 1

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

=1+ k log 2

n -

k(k 1) 1

= log 22 n + 1

log 2 n +1

2 2

222

以, 1

T(n)= log

2

2 22

n

1

+ 2log 2

n +1= (log 2 n) 。

3.

2

2 0

2 D 0

3 0

6 D

1

3 0 5 D 2 3 0 5

10 5

10 50

8

5 0

T(n)=1+

i 0

2 i 0

阶最高的函数是:

3n

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

n1

k 1 k 1

n

log 2 i =1+k log 2 n - i

072 D 3 3 0 5

850

. 算法填空题:

四. 算法设计题:

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 ” ; /r/e 无tu 解rn , 返回 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)

1. (1) 1, n

(4) mid+1, high (2) low>high

(5) find(low, mid -1)

(3) A[mid]=mid

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

(4) i+1

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

(2)k[i]+1 (5) k[i]=0

y=y-dy[k[i]]

(3) 1

(6) tag[x, y]=0

相关主题
相关文档
最新文档