第一范文网 - 专业文章范例文档资料分享平台

《算法设计与分析》考试题目及答案解析

来源:用户分享 时间:2025/5/22 1:51:13 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

三、 证明题

1. 一个分治法将规模为n的问题分成k个规模为n/m的子问题去解。设分

解阀值n0=1,且adhoc解规模为1的问题耗费1个单位时间。再设将原问题分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。用T(n)表示该分治法解规模为|P|=n的问题所需的计算时间,

O(1)n?1?则有:T(n)??

?kT(n/m)?f(n)n?1通过迭代法求得T(n)的显式表达式为:T(n)?n试证明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)}) .

logmk?logmn?1?j?0kjf(n/mj)

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

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

1?i?n则有1?k?n。)

证明: 四、

解答题

1. 机器调度问题。

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

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

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

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

f(0)?c?g(n)是n的某一个函数。则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,有:

h(n)?cbn?1??bn?1?ig(i)i?1n?1?2n?1?2n?2?...?22?2?1 ?2n?1

3. 单源最短路径的求解。

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

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

迭代

S {1}

u -

dist[2] dist[3] dist[4] dist[5] 10

maxint

30

100

初始 1 2 3 4

4. 请写出用回溯法解装载问题的函数。

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

其中集装箱i的重量为wi,且

?w?cii?1n1?c2。装载问题要求确定是否有一个合理

的装载方案可将这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]; // 左儿子结点的重量 if (wt <= c) { // 可行结点 if (wt > bestw) bestw = wt; // 加入活结点队列 if (i < n) Q.Add(wt); } // 检查右儿子结点 if (Ew + r > bestw && i < n) Q.Add(Ew); // 可能含最优解 Q.Delete(Ew); // 取下一扩展结点

《算法设计与分析》考试题目及答案解析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4505o0wb306cyp27lz4y3h0qq02ukg01bzo_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top