算法设计与分析练习题答案

第一章

  1. 答:由于算法具有有穷性、确定性和输出性,因而Ⅱ、Ⅲ、Ⅳ正确,而解决某一 类问题的算法不一定是唯一的。答案为 C。
  2. 答:选项 A 的时间复杂度为 O(n)。选项 B 的时间复杂度为 O(n2)。选项 C 的时间 复杂度为 O(log2n)。选项 D 的时间复杂度为 O(nlog2n)。答案为 C。
  3. 答:算法是求解问题的一系列计算步骤。算法具有有限性、确定性、可行性、输 入性和输出性 5 个重要特征。
  4. 答:(1)当 n 足够大时,(10n2-2n)/( n2)=10,所以
    第二章
  5. 解:求 T(n)的过程如下:
    T(n)=T(n-1)+n=[T(n-2)+n-1)]+n=T(n-2)+n+(n-1)
    =T(n-3)+n+(n-1)+(n-2)
    =…
    =T(1)+n+(n-1)+…+2
    =n+(n-1)+ +…+2+1=n(n+1)/2=O(n2)。
    5 解:构造的递归树如图 1.10 所示,第 1 层的问题规模为 n,第 2 的层的子问题的问题规模为 n/2,依此类推,当展开到第 k+1 层,其规模为 n/2k=1,所以递归树的高度为log2n+1。
    第1层有1个结点,其时间为n,第2层有4个结点,其时间为4(n/2)=2n,依次类推,第k 层有4k-1个结点,每个子问题规模为n/2k-1,其时间为4k-1(n/2k-1)=2k-1n。叶子结点的个数为n 个,其时间为n。将递归树每一层的时间加起来,可得:
    T(n)=n+2n+⋯+2e^(k-1) n+⋯+n≈n*2=O(n^2)

6 解:采用主方法求解,这里a=4,b=2,f(n)=n^2
因此,n^log_b⁡a =n^log_2⁡4 =n2,他与f(n)一样大,满足主定理中的情况(2),所以T(n)=O(nlog_b⁡a log_2⁡n )=O(n^2 log_2⁡n)
第三章

  1. 答:C。
  2. 答:对于无序序列 a[low…high]进行快速排序,整个排序为“大问题”。选择其中的 一个基准 base=a[i](通常以序列中第一个元素为基准),将所有小于等于 base 的元素移动 到它的前面,所有大于等于 base 的元素移动到它的后面,即将基准归位到 a[i],这样产生 a[low…i-1]和 a[i+1…high]两个无序序列,它们的排序为“小问题”。当 a[low…high]序列只 有一个元素或者为空时对应递归出口。
    所以快速排序算法就是采用分治策略,将一个“大问题”分解为两个“小问题”来求 解。由于元素都是在 a 数组中,其合并过程是自然产生的,不需要特别设计。
    6.答:其中二路归并排序和折半查找算法采用分治策略。
    第四章
    1. 答:蛮力法是一种简单直接地解决问题的方法,适用范围广,是能解决几乎所有 问题的一般性方法,常用于一些非常基本、但又十分重要的算法(排序、查找、矩阵乘法 和字符串匹配等),蛮力法主要解决一些规模小或价值低的问题,可以作为同样问题的更 高效算法的一个标准。而分治法采用分而治之思路,把一个复杂的问题分成两个或更多的 相同或相似的子问题,再把子问题分成更小的子问题直到问题解决。分治法在求解问题 时,通常性能比蛮力法好。
      第五章
  3. 答:D。
  4. 答:回溯算法是采用深度优先遍历的,需要借助系统栈结构来保存从根结点到当 前扩展结点的路径。答案为 C。
  5. 答:回溯法解空间是虚拟的,不必确定整个解空间。答案为 A。
  6. 答:B。
    第六章
  7. 答:A。
  8. 答:求解过程如下:
    (1)根结点 1 进队,对应结点值:e.i=0,e.w=0,e.v=0,e.ub=76,x:[0,0,0,0]。
    (2)出队结点 1:左孩子结点 2 进队,对应结点值:e.no=2,e.i=1,e.w=4, e.v=40,e.ub=76,x:[1,0,0,0];右孩子结点 3 进队,对应结点值:e.no=3,e.i=1, e.w=0,e.v=0,e.ub=57,x:[0,0,0,0]。
    (3)出队结点 2:左孩子超重;右孩子结点 4 进队,对应结点值:e.no=4,e.i=2, e.w=4,e.v=40,e.ub=69,x:[1,0,0,0]。
    (4)出队结点 4:左孩子结点 5 进队,对应结点值:e.no=5,e.i=3,e.w=9, e.v=65,e.ub=69,x:[1,0,1,0];右孩子结点 6 进队,对应结点值:e.no=6,e.i=3, e.w=4,e.v=40,e.ub=52,x:[1,0,0,0]。
    (5)出队结点 5:产生一个解,maxv= 65,bestx:[1,0,1,0]。
    (6)出队结点 3:左孩子结点 8 进队,对应结点值:e.no=8,e.i=2,e.w=7, e.v=42,e.ub=57,x:[0,1,0,0];右孩子结点 9 被剪枝。
    (7)出队结点 8:左孩子超重;右孩子结点 10 被剪枝。
    (8)出队结点 6:左孩子结点 11 超重;右孩子结点 12 被剪枝。
    (9)队列空,算法结束,产生的最优解:maxv= 65,bestx:[1,0,1,0]。
    第七章
  9. 答:C。
  10. 答:n 皇后问题的解不满足贪心选择性质。答案为 B。
  11. 答:由于背包问题可以取物品的一部分,所以总价值一定大于等于做 0/1 背包问 题。答案为 D。
  12. 答:这里 n=215,哈夫曼树中 n1=0,而 n0=n2+1,n=n0+n1+n2=2n0-1, n0=(n+1)/2=108。答案为 B。
  13. 答:在构造哈夫曼树时每次都是将两棵根结点最小的树合并,从而体现贪心的思路。
    第八章
  14. 答:B。
  15. 答:D。
  16. 答:D。
  17. 答:C。
    第九章
  18. 答:D。
    2.答:采用类似 Kurskal 算法来求最大生成树,第 1 步取最大边(0,2),第 2 步取 边(0,1),第 3 步取边(0,4),第 4 步取最大边(1,3),得到的权和为 14。答案为 D。
    第11章
  19. 答:B。

你可能感兴趣的:(算法,数据结构)