《算法设计与分析》考试题目及答案 联系客服

发布时间 : 星期一 文章《算法设计与分析》考试题目及答案更新完毕开始阅读593ac7707a3e0912a21614791711cc7931b77876

试证明T(n)的显式表达式的正确性。

2. 举反例证明0/1背包问题若使用的算法是按照pi/wi的非递减次序考虑选择的物品,即只要正在被考虑的物品装得进就装入背包,则此方法不一定能得到最优解(此题说明0/1背包问题与背包问题的不同)。

证明:举例如:p={7,4,4},w={3,2,2},c=4时,由于7/3最大,若按题目要求的方法,只能取第一个,收益是7。而此实例的最大的收益应该是8,取第2,3 个。 3. 求证:O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 。

证明:对于任意f1(n)? O(f(n)) ,存在正常数c1和自然数n1,使得对所有n?n1,有f1(n)? c1f(n) 。

类似地,对于任意g1(n) ? O(g(n)) ,存在正常数c2和自然数n2,使得对所有n?n2,有g1(n) ?c2g(n) 。

令c3=max{c1, c2}, n3 =max{n1, n2},h(n)= max{f(n),g(n)} 。 则对所有的 n ? n3,有

f1(n) +g1(n) ? c1f(n) + c2g(n) ? c3f(n) + c3g(n)

= c3(f(n) + g(n))

? c32 max{f(n),g(n)} = 2c3h(n) = O(max{f(n),g(n)}) .

4. 求证最优装载问题具有贪心选择性质。

(最优装载问题:有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 设集装箱已依其重量从小到大排序,(x1,x2,…,xn)是最优装载问题的一个最优解。又设k?min{i|xi?1} 。如果给定的最优装载问题有解,则有1?k?n。)

1?i?n 证明: 四、 解答题

1. 机器调度问题。

问题描述:现在有n件任务和无限多台的机器,任务可以在机器上得到处理。每件任务的开始时间为si,完成时间为fi,si

例如:区间[1,4]与区间[2,4]重叠,而与[4,7]不重叠。一个可行的任务分配是指在分配中没有两件重叠的任务分配给同一台机器。因此,在可行的分配中每台机器在任何时刻最多只处理一个任务。最优分配是指使用的机器最少的可行分配方案。

问题实例:若任务占用的时间范围是{[1,4],[2,5],[4,5],[2,6],[4,7]},则按时完成所有任务最少需要几台机器?(提示:使用贪心算法)

画出工作在对应的机器上的分配情况。

?f(n)?bf(n?1)?g(n)2. 已知非齐次递归方程:? ,其中,b、c是常数,g(n)是n的

f(0)?c?某一个函数。则f(n)的非递归表达式为:f(n)?cb??bn?ig(i)。

ni?1n?h(n)?2h(n?1)?1现有Hanoi塔问题的递归方程为:? ,求h(n)的非递归表达式。

h(1)?1?解:利用给出的关系式,此时有:b=2, c=1, g(n)=1, 从n递推到1,有: 3. 单源最短路径的求解。

问题的描述:给定带权有向图(如下图所示)G =(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到所有其它各顶点的最短路长度。这里路的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。

解法:现采用Dijkstra算法计算从源顶点1到其它顶点间最短路径。请将此过程填入

迭代S u dist[2下表中。

初始 {1} - 10 4. 请写出用回溯法解装载问题的函数。 1

dist[3maxint

dist[430

dist[5100

2 装载问题:有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱3 nwi?c1?c2?4

i的重量为wi,且i?1。装载问题要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。如果有,找出一种装载方案。

解:void backtrack (int i)

{// 搜索第i层结点

if (i > n) // 到达叶结点

更新最优解bestx,bestw;return; r -= w[i];

if (cw + w[i] <= c) {// 搜索左子树

x[i] = 1; cw += w[i];

backtrack(i + 1); cw -= w[i]; } if (cw + r > bestw) {

x[i] = 0; // 搜索右子树 backtrack(i + 1); } r += w[i];

}5. 用分支限界法解装载问题时,对算法进行了一些改进,下

面的程序段给出了改进部分;试说明斜线部分完成什么功能,以及这样做的原因,即采用这样的方式,算法在执行上有什么不同。

// 检查左儿子结点 Type wt = Ew + w[i]; // 左儿子结点的重量 解答:斜线标识的部分完成的功能为:提前更新bestw值; if (wt <= c) { // 可行结点 这样做可以尽早的进行对右子树的剪枝。具体为:算法Maxloading初始时将bestw if (wt > bestw) bestw = wt; // 加入活结点队列 设置为0,直到搜索到第一个叶结点时才更新bestw。因此在算法搜索到第一个叶子结点之 if (i < n) Q.Add(wt); 前,总有bestw=0} ,r>0 故Ew+r>bestw总是成立。也就是说,此时右子树测试不起作用。

// 检查右儿子结点 为了使上述右子树测试尽早生效,应提早更新bestw。又知算法最终找到的最优值是所 if (Ew + r > bestw && i < n) 求问题的子集树中所有可行结点相应重量的最大值。而结点所相应得重量仅在搜索进入左 Q.Add(Ew); // 可能含最优解 Q.Delete(Ew); // 取下一扩展结点子树是增加,因此,可以在算法每一次进入左子树时更新bestw的值。

7. 最长公共子序列问题:给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。

由最长公共子序列问题的最优子结构性质建立子问题最优值的递归关系。用c[i][j]记录序列Xi和Yj的最长公共子序列的长度。其中, Xi={x1,x2,…,xi};

Yj={y1,y2,…,yj}。当i=0或j=0时,空序列是Xi和Yj的最长公共子序列。故此时C[i][j]=0。其它情况下,由最优子结构性质可建立递归关系如下:

?0i?0,j?0?c[i][j]??c[i?1][j?1]?1i,j?0;xi?yj

?max{c[i][j?1],c[i?1][j]}i,j?0;x?yij?在程序中,b[i][j]记录C[i][j]的值是由哪一个子问题的解得到的。

(1) 请填写程序中的空格,以使函数LCSLength完成计算最优值的功能。

void LCSLength(int m,int n,char *x,char *y,int **c,int **b) { int i,j; for (i = 1; i <= m; i++) c[i][0] = 0; for (i = 1; i <= n; i++) c[0][i] = 0; for (i = 1; i <= m; i++) for (j = 1; j <= n; j++) { if (x[i]==y[j]) { (2) 函数LCS实现根据b的内容打印出Xi和Yj的最长公共子序列。请填写程序中的

空格,以使函数LCS完成构造最长公共子序列的功能(请将b[i][j]的取值与(1)中您填写的取值对应,否则视为错误)。

void LCS(int i,int j,char *x,int **b) 8.对下面的递归算法,写出调用f(4)的执行结果。 { if (i ==0 || j==0) return; void f(int k) if (b[i][j]== 1) { 一、填空题(20分) i-1,j-1,x,b); LCS({ if( k>0 ) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列 cout<

8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。

9.动态规划算法的两个基本要素是___________和___________。? 10.二分搜索算法是利用_______________实现的算法。 二、综合题(50分)

1.写出设计动态规划算法的主要步骤。

2.流水作业调度问题的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个作业的最优调度方案,并计算最优值。

4.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 5.设S={X1,X2,···,Xn}是严格递增的有序集,利用二叉树的结点来存储S中的元素,在表示S的二叉搜索树中搜索一个元素X,返回的结果有两种情形,(1)在二叉搜索树的内结点中找到X=Xi,其概率为bi。(2)在二叉搜索树的叶结点中确定X∈(Xi,Xi+1),其概率为ai。在表示S的二叉搜索树T中,设存储元素Xi的结点深度为Ci;叶结点(Xi,Xi+1)的结点深度为di,则二叉搜索树T的平均路长p为多少?假设二叉搜索树T[i][j]={Xi,Xi+1,···,Xj}最优值为m[i][j],W[i][j]= ai-1+bi+···+bj+aj,则m[i][j](1<=i<=j<=n)递归关系表达式为什么? 6.描述0-1背包问题。 三、简答题(30分)