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

算法设计与分析试卷B 与解答一.填空题:(每题4分,共20分)1. 算法的特性有 _0至多个输入, 至少一个输出, 指令无歧义性,指令条数有限且每条指令执行时间有限 .2.直接或间接地调用自身的算法称为 递归 算法。
用函数自身给出定义的函数称为 递归 函数。
3.在回溯法中,为了避免无效的搜索,通常采用两种剪枝策略,分别为和 。
(约束剪枝,限界剪枝)4. 算法的时间复杂性T (n ) 是指算法其中n 是问题的规模。
5.动态规划算法的两大基本要素分别为 和 。
(最优子结构性质和子问题的重叠性质。
)二.简答题:(每小题5分,共20分)1. 给定2个序列12{,,,}m X x x x =L 和12{,,,}n Y y y y =L ,说明X 和Y 的最长公共子序列问题具有最优子结构性质。
设序列X m ={x 1,x 2,…,x m }和Y n ={y 1,y 2,…,y n }的最长公共子序列为Z k ={z 1,z 2,…,z k} ,则 (1)若x m =y n ,那么z k =x m =y n ,且Z k-1是X m-1和Y n-1的最长公共子序列。
(2)若x m ≠y n 且z k ≠x m ,那么Z k 是X m-1和Y n的最长公共子序列。
(3)若x m ≠y n 且z k ≠y n ,那么Z k 是X m 和Y n-1的最长公共子序列。
由此可见,2个序列的最长公共子序列包含了这2个序列的前缀的最长公共子序列。
因此,最长公共子序列问题具有最优子结构性质。
2. 简述常见的两种分支限界法。
(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO )原则选取下一个节点为扩展节点。
(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
3. 假设以加法和乘法为关键操作,估算下述n 次多项式求值函数的时间复杂度(取T 为整型)template<class T>T PolyEval(T coeff[], int n, const T& x){ // 计算 n 次多项式的值, coeff[0:n] 为多项式的系数T y=1, value=coeff[0];for(i=1;i<=n;i++) {y*=x;value+=y*coeff[i];}return value;}解答:T PolyEval(T coeff[], int n, const T& x){ // 计算n 次多项式的值,coeff[0:n]为多项式的系数T y=1, value=coeff[0];for(i=1;i<=n;i++) //n 循环{ // 累加下一项y*=x; //一次乘法value+=y*coeff[i]; //一次加法和一次乘法}return value;} // 3n 次基本操作4.动态规划算法的基本思想是什么?它和分治法有什么区别和联系?答:动态规划算法的基本思想为:该方法的思路也是将待求解的大问题分成规模较小的子问题,但所得的各子问题之间有重复子问题,为了避免子问题的重复计算,可依自底向上的方式计算最优值,并根据子问题的最优值合并得到更大问题的最优值,进而可构造出所求问题的最优解。
算法设计与分析试题库

《算法分析与设计》试题库(一)一、选择题1.应用Johnson 法则的流水作业调度采用的算法是(D )A. 贪心算法B. 分支限界法C.分治法D. 动态规划算法2.Hanoi 塔问题如下图所示。
现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置。
移动圆盘时遵守Hanoi 塔问题的移动规则。
由此设计出解Hanoi 塔问题的递归算法正确的为:(B )Hanoi 塔A. void hanoi(int n, int A, int C, int B) { if (n > 0) {hanoi(n-1,A,C, B); move(n,a,b);hanoi(n-1, C, B, A); } 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); }C. void hanoi(int n, int C, int B, int A) {if (n > 0) {hanoi(n-1, A, C, B); move(n,a,b);hanoi(n-1, C, B, A); }3. 动态规划算法的基本要素为(C)A. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用4. 算法分析中,记号O表示(B),记号Ω表示(A),记号Θ表示(D)。
A.渐进下界B.渐进上界C.非紧上界D.紧渐进界E.非紧下界5. 以下关于渐进记号的性质是正确的有:(A)A.f(n)(g(n)),g(n)(h(n))f(n)(h(n))=Θ=Θ⇒=ΘB. f(n)O(g(n)),g(n)O(h(n))h(n)O(f(n))==⇒=C. O(f(n))+O(g(n)) = O(min{f(n),g(n)})D. f(n)O(g(n))g(n)O(f(n))=⇔=6.能采用贪心算法求最优解的问题,一般具有的重要性质为:(A)A. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用7. 回溯法在问题的解空间树中,按(D )策略,从根结点出发搜索解空间树。
设计与算法分析考试题库

设计与算法分析考试题库一、选择题(每题2分,共20分)1. 在算法分析中,时间复杂度用来衡量算法的什么?A. 可读性B. 执行速度C. 资源消耗D. 可维护性2. 以下哪个排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 选择排序D. 堆排序3. 动态规划与分治算法的主要区别是什么?A. 递归使用B. 子问题重叠C. 问题分解方式D. 算法效率4. 递归算法的基本原理是什么?A. 循环调用B. 重复执行C. 问题分解D. 迭代求解5. 在图算法中,深度优先搜索(DFS)和广度优先搜索(BFS)的主要区别在于?A. 搜索顺序B. 搜索深度C. 使用的数据结构D. 搜索效率6. 哈希表的冲突解决方法中,开放定址法和链地址法的主要区别是什么?A. 存储方式B. 冲突处理机制C. 访问速度D. 空间利用率7. 贪心算法在解决优化问题时,其选择的策略是?A. 随机选择B. 局部最优C. 全局最优D. 动态选择8. 以下哪个算法是解决最近公共祖先问题的?A. 二分查找B. 欧拉路径C. 弗洛伊德算法D. 树的深度优先搜索9. 算法的时间复杂度为O(1)表示该算法的执行时间与输入规模的大小?A. 成正比B. 成反比C. 无关D. 指数关系10. 在大O符号中,O(1)、O(log n)、O(n)、O(n log n)、O(n^2)、O(2^n),按算法效率从高到低排序正确的是?A. O(1), O(log n), O(n), O(n log n), O(n^2), O(2^n)B. O(2^n), O(n^2), O(n log n), O(n), O(log n), O(1)C. O(1), O(log n), O(n log n), O(n), O(n^2), O(2^n)D. O(1), O(n), O(log n), O(n log n), O(n^2), O(2^n)二、简答题(每题10分,共30分)11. 简述二分查找算法的基本思想及其时间复杂度。
算法设计与分析试卷及答案

算法设计与分析1、(1) 证明:O(f)+O(g)=O(f+g)(7分)(2) 求下列函数的渐近表达式:(6分)① 3n 2+10n;② 21+1/n;2、对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或f(n)=Ω(g(n))或f(n)=θ(g(n)),并简述理由。
(15分)(1);5log )(;log )(2+==n n g n n f (2);)(;log )(2n n g n n f == (3);log )(;)(2n n g n n f == 3、试用分治法对数组A[n]实现快速排序。
(13分)4、试用动态规划算法实现最长公共子序列问题。
(15分)5、试用贪心算法求解汽车加油问题:已知一辆汽车加满油后可行驶n 公里,而旅途中有若干个加油站。
试设计一个有效算法,指出应在哪些加油站停靠加油,使加油次数最少。
(12分)6、试用动态规划算法实现下列问题:设A 和B 是两个字符串。
我们要用最少的字符操作,将字符串A 转换为字符串B ,这里所说的字符操作包括:(1)删除一个字符。
(2)插入一个字符。
(3)将一个字符改为另一个字符。
将字符串A 变换为字符串B 所用的最少字符操作数称为字符串A 到B 的编辑距离,记为d(A,B)。
试设计一个有效算法,对任给的两个字符串A 和B ,计算出它们的编辑距离d(A,B)。
(16分)⎣⎦2/)(;3)(i i g i i f ==。
对于给定的两个整数n 和m ,要求用最少的变换f 和g 变换次数将n 变为m 。
(16分)1、⑴证明:令F(n)=O(f),则存在自然数n 1、c 1,使得对任意的自然数n ≥n 1,有:F(n)≤c 1f(n)……………………………..(2分)同理可令G(n)=O(g),则存在自然数n 2、c 2,使得对任意的自然数n ≥n 2,有:G(n)≤c 2g(n)……………………………..(3分)令c 3=max{c 1,c 2},n 3=max{n 1,n 2},则对所有的n ≥n 3,有: F(n)≤c 1f(n)≤c 3f(n)G(n)≤c 2g(n)≤c 3g(n)……………………………..(5分) 故有:O(f)+O(g)=F(n)+G(n)≤c 3f(n)+c 3g(n)=c 3(f(n)+g(n)) 因此有:O(f)+O(g)=O(f+g)……………………………..(7分) ⑵ 解:① 因为;01033)103(lim 222=+-+∞→n n n n n n 由渐近表达式的定义易知: 3n 2是3n 2+10n 的渐近表达式。
算法设计与分析试题及答案

1. 按分治策略求解棋盘覆盖问题时,对于如图所示的24×24的特殊棋盘,共需要多少个L 型骨牌;并在棋盘上填写L 型骨牌的覆盖情况。
2. 假设有7个物品,给出重量和价值。
若这些物品均不能被分割,且背包容量M =140,使用回溯方法求解此0-1背包问题。
请画出状态空间搜索树。
3. 假设有7个物品,它们的重量和价值如下表所示。
若这些物品均可以被分割,且背包容量M=140,使用贪心算法求解此背包问题。
请写出求解策略和求解过程。
W (35,30,50,60,40,10,25)p (10,40,30,50,35,40,30)4. 在给出的电路板中,阴影部分是已作了封锁标记的方格,请按照队列式分支限界法在图中确定a 到b 的最短布线方案,要求布线时只能沿直线或直角进行,在图中标出求得最优解时各方格情况。
5. 画出字符表的哈夫曼编码对应的二叉树。
6. 已知1()*()i i k k ij r r A a +=,k =1,2,3,4,5,6,r 1=5,r 2=10,r 3=3,r 4=8,r 5=5,r 6=20,r 7=6,求矩阵链积A 1×A 2×A 3×A 4×A 5×A 6的最佳求积顺序。
7. 给出城市网络图,售货员要从城市1出发,经过所有城市回到城市1,画出该问题的解空间树,描述出用优先队列式分支限界法求解时的搜索情况。
表示出优先队列、当前扩展结点等的变化情况。
8. 依据优先队列式分支限界法,求从s 点到t 点的单源最短路径,画出求得最优解的解空间树。
一、假设有7个物品,它们的重量和价值如下表所示。
若这些物品均不能被分割,且背包容量M=150,使用回溯方法求解此背包问题。
请写出状态空间搜索树(20分)。
答:按照单位效益从大到小依次排列这7个物品为:FBGDECA 。
将它们的序号分别记为1~7。
则可生产如下的状态空间搜索树。
其中各个节点处的限界函数值通过如下方式求得:【排序1分】5x =6x =7x =17分,每个节点1分】a .1501154040305035190.62540-++++⨯=7(1,1,1,1,,0,0)8b. 1501154040305030177.560-++++⨯=7(1,1,1,1,0,,0)12c .4040305010170++++=(1,1,1,1,0,0,1)d. 1501054040303530167.560-++++⨯=3(1,1,1,0,1,,0)4e. 150130404050353017560-++++⨯=1(1,1,0,1,1,,0)3f. 1501304040503510170.7135-++++⨯=4(1,1,0,1,1,0,)7g. 40405030160+++=(1,1,0,1,0,1,0)h. 1501404040353010146.8535-++++⨯=2(1,1,0,0,1,1,)7i.1501254030503530167.560-++++⨯=5(1,0,1,1,1,,0)12 j. 1501454030503530157.560-++++⨯=1(0,1,1,1,1,,0)12在Q 1处获得该问题的最优解为(1,1,1,1,0,0,1),背包效益为170。
《算法分析与设计》期末试题及参考答案

《算法分析与设计》期末试题及参考答案一、简要回答下列问题:1.算法重要特性是什么?2.算法分析的目的是什么?3.算法的时间复杂性与问题的什么因素相关?4.算法的渐进时间复杂性的含义?5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?6.简述二分检索(折半查找)算法的基本过程。
7.背包问题的目标函数和贪心算法最优化量度相同吗?8.采用回溯法求解的问题,其解如何表示?有什么规定?9.回溯法的搜索特点是什么?10.n皇后问题回溯算法的判别函数place的基本流程是什么?11.为什么用分治法设计的算法一般有递归调用?12.为什么要分析最坏情况下的算法时间复杂性?13.简述渐进时间复杂性上界的定义。
14.二分检索算法最多的比较次数?15.快速排序算法最坏情况下需要多少次比较运算?16.贪心算法的基本思想?17.回溯法的解(x1,x2,……x n)的隐约束一般指什么?18.阐述归并排序的分治思路。
19.快速排序的基本思想是什么。
20.什么是直接递归和间接递归?消除递归一般要用到什么数据结构?21.什么是哈密顿环问题?22.用回溯法求解哈密顿环,如何定义判定函数?23.请写出prim算法的基本思想。
二、复杂性分析1、MERGESORT(low,high)if low<high;then mid←(low,high)/2;MERGESORT(low,mid);MERGESORT(mid+1,high);MERGE(low,mid,high);endifend MERGESORT2、procedure S1(P,W,M,X,n)i←1; a←0while i≤ n doif W(i)>M then return endifa←a+ii←i+1 ;repeatend3.procedure PARTITION(m,p)Integer m,p,i;global A(m:p-1)v←A(m);i←mlooploop i←i+1 until A(i) ≥v repeatloop p←p-1 until A(p) ≤v repeatif i<pthen call INTERCHANGE(A(i),A(p))else exitendifrepeatA(m) ←A(p);A(p) ←vEnd PARTITION4.procedure F1(n)if n<2 then return(1)else return(F2(2,n,1,1))endifend F1procedure F2(i,n,x,y)if i≤nthen call F2(i+1,n,y,x+y)endifreturn(y)end F25.procedure MAX(A,n,j)xmax←A(1);j←1for i←2 to n doif A(i)>xmax then xmax←A(i); j←i;endif repeatend MAX6.procedure BINSRCH(A,n,x,j)integer low,high,mid,j,n;low←1;high←nwhile low≤high domid←|_(low+high)/2_|case:x<A(mid):high←mid-1:x>A(mid):low←mid+1:else:j ←mid; returnendcase repeat j ←0 end BINSRCH三、算法理解1、写出多段图最短路经动态规划算法求解下列实例的过程,并求出最优值。
算法设计与分析期末试卷A卷

算法设计与分析期末试卷A卷A卷一、选择题1.二分搜索算法是利用(A)实现的算法。
A、分治策略2.回溯法解旅行售货员问题时的解空间树是(A)。
A、子集树3.下列算法中通常以自底向上的方式求解最优解的是(B)。
B、动态规划法4.下面不是分支界限法搜索方式的是(D)。
D、深度优先5.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为(。
B。
)。
B、O(nlogn)6.分支限界法解最大团问题时,活结点表的组织形式是(B)。
B、最大堆7、下面问题(B)不能使用贪心法解决。
B N皇后问题8.下列算法中不能解决0/1背包问题的是(A)A贪心法9.背包问题的贪心算法所需的计算时间为(B)A、O (nlogn)B、O(nlogn)10.背包问题的贪心算法所需的计算时间为(B)。
B、O(nlogn)二、填空题1.算法的复杂性有时间复杂性和空间复杂性之分。
2.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有穷性四条性质。
其中算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。
3.解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是回溯法,需要排序的是动态规划和分支限界法。
4.动态规划算法的两个基本要素是最优子结构性质和重叠子问题性质。
5.回溯法是一种既带有深度优先搜索又带有回溯的搜索算法;分支限界法是一种既带有广度优先搜索又带有回溯的搜索算法。
6.用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。
在任何时刻,算法只保存从根结点到当前扩展结点的路径。
如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n))。
7.用回溯法解图的m着色问题时,使用下面的函数OK检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时O(n)。
Bool Color::OK(int k)for(int j=1;j<=n;j++)if((a[k][j] == 1) && (x[j] == x[k])) {return false;return true;8.用回溯法解布线问题时,求最优解的主要程序段如下。
算法分析与设计试卷及参考答案

算法分析与设计试卷及参考答案济南⼤学继续教育学院算法分析与设计试卷(A)学年:学期:年级:专业:学习形式:层次:(本试题满分100分,时间90分钟)⼀、单选题(每⼩题2分,共计20分。
)1. 下列情况不适合使⽤计数排序的是()。
A 要排序的数据表的数量很⼤B 要排序的数据表中有相同的关键字C 要排序的数据表基本有序D 要排序的数据表元素各不相同2. 集合{A,B}的幂集合为()。
A.{A},{B}B.{A},{B},ΦC. { {A},{B}} D {{A,B},{A},{B},Φ}3.下列字符串序列不符合字典排序的是()。
A. abc acb bca B. abc acb cbaC. bac bca abc D abc bac bca4.对于根树,出度为零的节点为()。
A0节点B根节点C叶节点D分⽀节点5.对完全⼆叉树⾃顶向下,从左向右给节点编号,节点编号为10的⽗节点编号为()。
A0B2C4D66.下列程序段的算法时间的复杂度为()。
for i ←0 to n dofor j ←0 to m do s //某种基本操作A O(n2)B O(m2)C (m+n)D O(m*n)7.三个盘⼦的汉诺塔,⾄少要执⾏移动操作的次数为 ( )。
A 1次B 3次C 6次D 7次8.与算法英⽂单词algorithm具有相同来源的单词是()。
A logarithmB algirosC arithmosD algebra9.从排序过程是否完全在内存中显⽰,排序问题可以分为()。
A稳定排序与不稳定排序B内排序与外排序C直接排序与间接排序D主排序与辅助排序10.下列()不是衡量算法的标准。
A时间效率B空间效率C问题难度D适应能⼒⼆、简答题(每题8分,共计24分。
)1.贪婪技术的基本思想是什么?它有哪些应⽤(给出2种)?2. 拓扑排序的基本思想是什么?它可⽤于哪些实际问题中(给出2种)?3.是么是算法,算法与程序有什么区别?三、算法设计题(每题14分,共计56分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南大学考试试卷答案(补考)
2008 -- 2009学年 2学期时间110分钟算法分析与设计课程 48学时 3学分考试形式:闭卷
专业年级:信安0601-0602 总分100分,占总评成绩70 %
注:此页不作答题纸,请将答案写在答题纸上
一、基本概念题(本大题40分)
1、(6分)
1)顺序结构将运算步骤的时间累计,简单运算只需要1个单位时间。
(1分)2)选择结构:计算复杂的情况复杂度。
(2分) 3)循环结构:复杂度计量=循环着次数*循环体的时间(2分) 4)函数调用:计算函数的执行时间(1分)
2、设T(n)=n,根据T(n)= O(f(n))的定义,下列等式是否成立?(4分)
1)T(n)= O(n2) (√)
2)O(n2) = T(n) (×)
3)T(n)= O(log n)+ O(n) (√)
4)T(n) = O(n) *O(log n) (√)
3、与顺序查找算法相比,折半查找算法的时间复杂性有多大程度的降低?
它是如何提高算法的效率的?(6分)
顺序查找的时间是O(n) ,折半查找O(log n) 降低了一个数量级(2分)采用分治策略,每一次比较可以排除一半的数据。
(4分)
4、简述归并排序算法和快速排序算法的分治方法。
(6分)
1)归并排序的分治是将数组从中间分开,分别对前后来那个部分进行排序,将排序后的两个数组合并成整个数组的排序。
这样分治为递归过程,
直到一个元素时返回。
2)快速排序的分治是选取分割元素,以分割元素为界,将数组分成两部分,一部分小于分割元素,一部分大于分割元素,分别对两部分排序。
5、一般背包问题的贪心算法可以获得最优解吗?物品的选择策略是什么?(6分)
按照p[i]/w[i]≥p[i+1]/w[i+1]排序,选择当前利润/重量比最大的物品,可以获得最优解,
6、Prim算法和Dijkstra算法选择下一个节点的标准分别是什么?对于有负边的
无向图,Prim算法和Dijkstra算法还能保证获得最优解吗?(6
分)
1)prim算法的选择标准是选择当前与T连结边的代价最小的节点加入。
2)Dijkstra算法的选择标准是在与T邻接的顶点w中,选择从S到w路径最短的顶点。
3)prim算法用于有负边的图可以获得最优解,Dijkstra算法不能获得最优解。
7、比较回溯法和分支限界法的搜索方式,哪种方法更适合找最优解问题?(6分)
1)回溯法是在约束下带跳跃的深度优先搜索。
2)分枝限界是广度优先方式的按最小代价选择扩展节点,以上界函数对活节点进行限界的搜索。
3)分枝限界法更适合找最优解。
二、分析算法的时间复杂性,需要写出分析过程(本大题20分)
1、用分割元素v将有n个元素的数组分割成元素大于v和小于v的两部分,需要
花多少时间(要讲出道理)。
(5分)至少需要对每个元素进行一次比较运算,运算时间是O(n)。
2、如果修改归并排序算法,将数组分成1/3和2/3大小不等的两部分,分别排序
后再归并,算法的最坏时间复杂度有什么变化?
设对n个元素排序的时间为T(n), 对两部分排序的时间分别为T(n/3)和,合并的时间为n-1 ,得到递归方程:
T(n) = T(n/3)+ T(2n/3) + n-1 n>3 (2分) O(1) n≤3
考虑n=3k
T(n) = T(3k-1 )+ T(2*3k-1) +n-1
= T(3k-2 )+2T(2*3k-2 )+T(22*3k-2)+(n-1)+(n-2)
= T(3k-3 )+3T(22*3k-3 )+ 3T(223k-3 )+T(233k-3)+(n-1)+(n-2) +(n-3)
最后T(2i3 k-i)=O(1)时,2i3 k-i≤3
T(n) ≤(n-1)+(n-2) +(n-3)+......+(n-(k-1))
=nk-(1+2+......+(k-1))
≤nlog
n (3分)
3/2
3、设函数f1、f2和f3的处理时间分别为O(n)、O(n2) 和O(1),分析下列流程的
时间复杂性:
1)基本结构
procedure A1(int n,b) (4分)T(n)=max{O(n),O(n2)}+n* O(1)
= O(n2)
2) 递归结构
设A2的时间为T(n)
T(n)= T(n-1)+O(1) n>1
= O(1) n≤3 (3分)
T(n)=T(n-2)+2O(n)
=......
= T(1)+nO(n)
= O(n2) (3分)
三、算法理解(本大题24分)
1、在一个空间安排n =5个活动,开始时间和结束时间分别为。
写出活动安排贪
心算法的运行结果。
1)按照结束时间排序(3分)
[8,10)1, [9, 11:30)3, [11:40,13)4,[12,14)2, [13:30,15)5 2)可行解 1,4,5 (3分)
2、写出0/1背包问题的动态规划方程,并简要说明。
f
i (X)=max{f
i-1
(X),{f
i-l
(X—w
i
)+p
i
当X≥wi } (3分)
f
i
(X)是前i个物品,背包容积 X子问题的最优值,
当第i个物品不选入,f
i (X)等于f
i-1
(X)前i-1个物品,背包容积 X子问题
的最优值,
当第i个物品不选入,得利润p
i ,但前i-1个物品能使用背包为X—w
i。
(3分)
3、修改图的m-着色的回溯算法,找到一个解,算法就结束。
(6分)Mcolor(n)
{k←1; x[k] ←0;
While k>0 do (2分)
{ x[k] ← x[k]+1;
while place(k)=false and x[k]≤m do
x[k] ← x[k]+1
if x[k]≤m then (2分)
if k=n then
{print x
Return (2分)
}
else
{k← k+1
x[k]←0}
else k← k-1
}
4、用分支限界法解0/1背包问题,若物品i选入,则x[i]=1,否则x[i]=0。
如
何选用上下界函数?(6分)1)物品按照利润重量比排序,背包的剩余体积cu,已得利润s。
(2分)
2)下界估值函数:-(s+∑X[j]P[j]),当∑X[j]w[j]=cu,0≤X[j]≤1,j=i,…n (2分)
3)上界函数:-(s+∑X[j]P[j]),当∑X[j]w[j]≤cu,X[j]∈{0, 1} j=i,…n (2分)
四、算法设计(本大题16分)
对于给定的无向图G=(V,E), 分别设计具有下列功能的深度优先算法。
1) 判断图是否为连通图(8分)procedure DFS_Visit(G,u)
{1 color[u]←Gray
2 for each edge(u,v) do
2-1 if color[v]=White then
DFS_Visit(G,v)
3 color[u]←Black; (2分)
}
procedure DFS(G)
1 for each vertex u∈V do
2 color[u]←White
3 f ←0
3 for vertex each u∈V do
if color[u]=White
then { DFS_Visit(G,u) (3分)
f←f +1
}
4 if f=1 then print “Yes”(3分)
else print “No”
2) 判断图是否存在环(8分)procedure DFS_Visit(G,u)
{1 color[u]←Gray
2 for each edge(u,v) do
2-1 { if color[v]=White then
DFS_Visit(G,v)
2-1 if color[v]= Gray then
f← 1
return
3 color[u]←Black (2分)
}
procedure DFS(G)
1 for each vertex u∈V do
2 color[u]←White
f ←0
3 for vertex each u∈V do
{ if color[u]=White
then { DFS_Visit(G, u) (3分)
if f=1 then
{ print “Yes”(3分) return
}
}
}
4 print “No”
}
4 if f=1 then print “Yes”(3分) else print “No”。