2. 下面的程序段违反了算法的
原则。
Void sam()
{int n=2;
while(!odd(n))
n+=2
printf(n);
}
A B C D
A
[解析] 一个算法要求必须总是在执行有穷步之后结束,并月-每一步都可在有穷时间内完成。上述程序段违反了算法的有穷性性质,理论上将导致过程不可终止。
以下不属于算法的基本特征的是 7 。穷举法的适用范围是 8 。 设求解某问题的递归算法如下:
F(int n){
if n=1 {
Move(1)
}else{
F(n-1);
Move(n);
F(n-1);
}
}
求解该算法的计算时间时,仅考虑算法Move所做的计算为主要计算,且Move为常数级算法。则算法F的计算时间T(n)的递推关系式为 9 ;设算法Move的计算时间为k,当 n=4时,算法F的计算时间为 10 。 递归算法的执行过程,一般来说,可先后分成 12 和 13 两个阶段。 若一个问题的求解既可以用递归算法,也可以用递推算法,则往往用 14 算法,因为 15 。 在下列算法设计方法中, 16 在求解问题的过程中并不从整体最优上加以考虑,而是作出在当前看来是最好的选择。利用该设计方法可以解决 17 问题。 在数据压缩编码的应用中,哈夫曼(Huffman)算法可以用来构造具有 18 的二叉树,这是一种采用了 19 的算法。 以关键字比较为基础的排序算法在最坏情况下的计算时间下界为O(nlogn)。下面的排序算法中,最坏情况下计算时间可以达到O(nlogn)的是 21 ,该算法采用的设计方法是 22 。 对于求取两个长度为n的字符串的最长公共子序列(LCS)问题,利用 24 策略可以有效地避免子串最长公共子序列的重复计算,得到时间复杂度为O(n2)的正确算法。串 <1,0,0,1,O,1,0,1>和<0,1,0,1,1,0,1,1>的最长公共子序列的长度为 25 。 利用贪心法求解0/1背包问题时, 26 能够确保获得最优解。用动态规划方求解O/1背包问题时,将“用前i个物品来装容量是x的背包”的0/1背包问题记为KNAP(1,i,X)设fi(X)是KNAP(1,i,X)最优解的效益值,第j个物品的重量和放入背包后取得效益值分别为W和p(j=1~n),则依次求解f0(X),f1(X),…,fn(X)的过程中使用的递推关系式为 27 。28. 利用动态规划法求解每对节点之间的最短路径问题时,设有向图G=<V,E>共有n个节点,节点编号1~n,设C是G的成本邻接矩阵,用D
k(i,j)表示从i到j并且不经过编号比k还大的节点的最短路径的长度(D
n(i,j)即为图G中节点i到j的最短路径长度),则求解该问题的递推关系式为
。
- A.Dk(i,j)=Dk-1(i,j)+C(i,j)
- B.Dk(i,j)=min{Dk-1(i,j),Dk-1(i,j)+C(i,j)}
- C.Dk(i,j)=Dk-1(i,k)+Dk-1(k,j)
- D.Dk(i,j)=min{Dk-1(i,j),Dk-1(i,k)+Dk-1(k,j)}
A B C D
D
[解析] 从“Dk(i,j)表示从i到j并且不经过编号比k还大的节点的最短路径的长度”中,我们得到一个提示,在求i,j之间最短路径的时候,会考虑它经过哪些节点能缩短原来的路径。在 Dk(i,j)=min{Dk-1(i,j),Dk-1(i,k)+Dk-1(k,j)}中,Dk(i,j)表示i到j不经过k的路径长度,而 Dk-1(I,k)+Dk-1(k,j)表示i到j经过k的路径长度,且min()函数用于找最小值,所以此式正确。