《算法设计与分析》复习题参考答案一、概念题:请解释下列术语。
1.数据元素的集合。
2.队列是一个线性表,限制为只能在固定的一端进行插入,在固定的另一端进行删除。
3.对于算法a,如果存在一多项式p(),使得对a的每个大小为n的输入,a的计算时间为o(p(n)),则称a具有多项式复杂度4.二叉树的层数i与该层上的结点数n的关系为:n(i)=i2。
5.如果可满足性约化为一个问题L,则称该问题为NP-难度的。
6.算法就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。
7.多数据单指令流8.若图的任意两个节点间均存在路径可达,则称该图为连通图。
9. 是指一个数学模型以及定义在该模型上的一组操作。
10.算法的复杂度只能用指数函数对其限界。
11.函数或过程直接或间接调用它自己。
12.和高度相同的满二叉树的每个对应的顶点编号相同的树13.由所有可行状态所构成的树。
14.如果L时NP难度的且L∈NP,则称问题L是NP-完全的。
15.算法是一个步骤的序列,满足:有穷性、可行性、确定性、输入、输出;过程不需要满足由穷性。
16.有向图的每条边有起点与终点之分,且用箭头指向边的终点。
无向图的边无起点和终点之分,边无箭头。
17.树(tree)是一个或多个结点的有限集合,,它使得:①有一个特别指定的称作根(root)的结点;②剩下的结点被分成m≥0个不相交的集合tl,…,tm,这些集合的每一个都是一棵树,并称t1,…,tm为这根的子树(subtree)。
18.P是所有可在多项式时间内用确定算法求解的判定问题的集合。
19.运算结果是唯一确定的算法20. nP是所有可在多项式时间内用不确定算法求解的判定问题的集合二、填空题1.n2.O ( n )3.最优化问题4.宽度优先搜索5.结点的最大级数6.互异7.内结点和外结点8.方形9.内部路径长度、外部路径长度10.一次11.归并分类算法12.贪心选择性质13.最优子结构14.二元归并15.最小成本生成树16.最优性17.最优决策18.可容许最大成本c19.最小成本三、程序填空题。
1.call PREORDER(LCHILD(T))call PREORDER(RCHILD(T))2.call MAXMIN(i,mid,gmax,gmin)call MAXMIN(mid+1,j,hmax,hmin)3.call SUMOFSUB (S+w(K),K+1,r-W(k))call SUMOFSUB(s,k+1,r—W(k))4.X(k)+X(k)+1k <- k+1;X(k) <- 0k←k-15.(1)n+1 (2) high-1 (3) high←mid (4)low←mid6. (1) a(i,j) (2)a(i,k)+a(k,j)7. (1) Parent(i)>0 (2) j<--Parent(j)8. (1) 2 (2) j-19. (1) mergesort(low,mid) (2) mergesort(mid+1,high) (3) merge(low,mid,high)10. (1) i≠0 (2) j≠0 (3) link(k)←j;k←j;j←link(j) (4) llnk(k)←j11. (1) i←2 (2) j←j∪{i}12. (1) weight(lchild(t))+weight(rchild(t)) (2) return(least(l))13. (1)i←i+1 (2) mincost + cost(u,v)14. (1) cost(n)<--0 (2) k一115.(1)a(j)<a(i) (2)a(i)←a(k-i+1)16.(1)cw+w(k) (2)y(k)←0四.问答题1. 答:1).确定性算法的每一种运算必须要有确切的定义,即每一种运算应该执行何种动作必须是相当清楚的、无二义性的。
在算法中不允许有诸如“计算5/0”或“将6或7与x相加”之类的运算,因为前者的结果是什么不清楚,而后者对于两种可能的运算应做哪一种也不知道。
2).能行性一个算法是能行的指的是算法中有待实现的运算都是基本的运算,每种运算至少在原理上能由人用纸和笔在有限的时间内完成。
整数算术运算是能行运算的一个例子,而实数算术运算则不是能行的,因为某些实数值只能由无限长的十进制数展开式来表示,像这样的两个数相加就违背能行性这一特性。
3).输入一个算法有0个或多个输入,这些输入是在算法开始之前给出的量,这些输入取自特定的对象集合。
4).输出一个算法产生一个或多个输出,这些输出是同输入有某种特定关系的量。
5).有穷性一个算法总是在执行了有穷步的运算之后终止。
2. 答:在实际生活中,有这么一类问题,它们的活动过程可以分为若干个阶段,而且在任一阶段后的行为都仅依赖于i阶段的过程状态,而与i阶段之前的过程如何达到这种状态的方式无关,这样的过程就构成一个多阶段决策过程。
在50年代,贝尔曼(richard bellman)等人根据这类问题的多阶段决策的特性,提出了解决这类问题的“最优性原理”,从而创建了最优化问题的一种新的算法设计方法——动态规划。
在多阶段决策过程的每一阶段,都可能有多种可供选择的决策,但必须从中选取一种决策。
一旦各个阶段的决策选定之后,就构成了解决这一问题的一个决策序列。
决策序列不同,所导致的问题的结果也不同。
动态规划的目标就是要在所有容许选择的决策序列中选取一个会获得问题最优解的决策序列,即最优决策序列。
显然,用枚举的方法从所有可能的决策序列中选取最优决策序列是一种最笨拙的方法。
贝尔曼认为,利用最优性原理(Principle of optimality)以及所获得的递推关系式去求取最优决策序列可以使枚举量急剧下降。
这个原理指出,过程的最优决策序列具有如下性质:无论过程的初始状态和初始决策是什么,其余的决策都必须相对手初始决策所产生的状态构成一个最优决策序列。
如果所求解问题的最优性原理成立,则说明用动态规划方法有可能解决该问题。
而解决问题的关键在于获取各阶段间的递推关系式3.答:分治法的基本思想为:(1)分解问题为若干子问题;(2)对子问题求解;(3)组合各自问题的解。
快速排序过程为:procedure PARTITION(m,p)//在A(m),A(m+1),…,A(p-1)中的元素按如下方式重新排列:如果最初t=A(m),则在重排完成之后,对于m和p-1之间的某个q,有A(q)=t,并使得对于m≤k<q,有A(k)≤t,而对于q<k<p,有A(k)≥t退出过程时,p带着划分元素所在的下标位置,即q的值返回。
//integer m,p,i;global A(m:p-1)v = A(m); i=m //A(m)是划分元素//1ooploop i=i+1 until A(i)≥v repeat //i由左向右移//loop p=p-1 until A(p)≤v repeat //p由右向左移//if i<pthen call INTERCHANGE(A(i),A(p)) //A(i)和A(p)换位//else exitendifrepeatA(m)=A(p);A(p)=v //划分元素在位置p //end PARTITIONprocedure QUICKSORT(p,q)//将全程数组A(1:n)中的元素A(p),…,A (q )按递增的方式分类。
认为A(n +1)已被定义,且大于或等于A(p :q)的所有元素;即A(n+1)=+∞//integer p ,q ;global n ,A(1:n)if p<qthen j=q+1call PARTITION(p,j)call QUICKSORT(p,j-1) //j 是划分元素的位置//call QUICKSORT(j+1,q)endifend QUICKSORT4.答: 贪心法的基本思想为:(1)分析问题,求出最优化评价标准;(2)按评价标准排序;(3)从序列中顺序取元素;(4)若该元素符合要求,则放入结果表中;否则,删除它。
背包算法为: procedure GREEDY-KNAPSACK (P ,W ,M ,X ,n)//P(1:n)和W(1:n)分别含有按P(i)/W(i) ≥ P(i+1)/W(i+1)排序的n 件物品的效益值和重量。
M 是背包的容量大小,而x(1:n)是解向量//real P(1:n),W(1:n),X(1:n),M ,cu ;integer i ,n ;X = 0 //将解向量初始化为零//cu = M //cu 是背包剩余容量//for i=1 to n doif W(i)>cu then exit endifXi = 1cu = cu-W(i)repeatif i ≤n then X (i )= cu /W(i) endifend GREEDY-KNAPSACK5.答: 动态规划的基本思想为: (1)确定初始条件;(2)计算第一次结果;(3)用上一次的结果计算本次的结果;(4)若递推到了最终结果,则算法结束;否则,转(3)。
0/1背包问题的递推公式为:})(),(max{)(1111+++++-=j j j j p w X g X g X g6.答:动态规划的基本思想为:(1)确定初始条件;(2)计算第一次结果;(3)用上一次的结果计算本次的结果;(4)若递推到了最终结果,则算法结束;否则,转(3)。
多段图的递推公式为:)},1(),({min ),(),(1l i COST j i c j i COST E l j v l i ++=<∈+7.答: 回溯法的基本思想为:(1)分析问题,确定该问题的解空间及显示条件与隐式条件;(2)确定求解问题的状态空间树;(3)对该状态空间树按深度优先方法进行搜索;(4)对搜索的每一步,检查该状态是否为目标状态;(5)若为目标状态,则算法结束;(6)若不满足隐式条件,则回到上一层;(7)选择下一个孩子结点继续搜索;若无下一个孩子可搜索,则回到上一层继续;(8)若回到了最高层的上一层,则无解,算法结束。
子集和数问题的状态空间树为:(x1,x2,x3,x4):每次所选元素的序列数。
123813x1=1x 2=2x1=2x1=3x1=4x 2=3x 2=4x 2=3x 2=4x 2=445679101112161415x 3=3x 3=4x 3=4x 3=4x 4=48.答:该结构定义了一个有向图,其逻辑结构图为:9.答:有5种可能,结果为:3,2,1 2,3,1 1,2,3 1,3,2 2,1,310.答:解:用向后处理法可得:BCOST(i,j)=min{BCOST(i-1,1)+c(1,j)}1∈Vi-1<l,j>∈E各结点的计算如下:BCOST(3,6)=min{BCOST(2,2)+4,BCOST(2,3)+2}=9BCOST(3,7)=11BCOST(3,8)=10BCOST(4,9)=min{BCOST(3,6)+6,BCOST(3,7)+4}=15BCOST(4,10)=min{BCOST(3,6)+5,BCOST(3,7)+3,BCOST(3,8)+5}=14BCOST(4,11)=16BCOST(5,12)=min{13(30ST(4,9)+4,BCOST(4,10)+2,BCOST(4,11)+5)=16 11. 答:基本思想:—条边一条边地构造这棵树。