算法设计与分析习题答案1-6章

发布时间 : 星期三 文章算法设计与分析习题答案1-6章更新完毕开始阅读

习题6

1. 动态规划法为什么都需要填表如何设计表格的结构

在填写表格过程中,不仅可以使问题更加清晰,更重要的是可以确定问题的存储结构; 设计表格,以自底向上的方式计算各个子问题的解并填表。

2. 对于图所示多段图,用动态规划法求从顶点0到顶点12的最短路径,写出求解过程。 1 6 3 8 1 7 3 3 3 5 6 5 10 4 4 5 5 8 2 0 12 3

5 3 8 3 11 3 7 9 8 2 6 6 6 4 图 第2题图

将该多段图分为四段;

首先求解初始子问题,可直接获得: d(0, 1)=c01=5(0→1) d(0, 2)=c02=3(0→1)

再求解下一个阶段的子问题,有: d(0,3)= d(0, 1)+ c13 =6(1→3)

d(0,4)=min{d(0,1)+ c14 ,d(0,2)+ c24}=8(1→4) 。。。。。。。。(以此类推)

最短路径为:0→1→3→8→11→12

3.用动态规划法求如下0/1背包问题的最优解:有5个物品,其重量分别为(3, 2, 1, 4,5),价值分别为(25, 20, 15, 40, 50),背包容量为6。写出求解过程。

(x1, x2,x3,x4,x5) →(1,1,1,0,0)(过程略)

4. 用动态规划法求两个字符串A=\xzyzzyx\和B=\zxyyzxz\的最长公共子序列。写出求解过程。 略

5. 给定模式\和文本\,写出动态规划法求解K-近似匹配的过程。 略

6. 对于最优二叉查找树的动态规划算法,设计一个线性时间算法,从二维表R中生成最优二叉查找树。

7. Ackermann函数A(m, n)的递归定义如下:

n?1??A(m,n)??A(m?1,1)?A(m?1,A(m,n?1))?m?0m?0,n?0 m?0,n?0设计动态规划算法计算A(m, n),要求算法的空间复杂性为O(m)。

考虑下面的货币兑付问题:在面值为(v1, v2, …, vn)的n种货币中,需要支付y值的货币,应如何支付才能使货币支付的张数最少,即满足

?xvi?1nii?y,且使?xi最小(xi是

i?1n非负整数)。设计动态规划算法求解货币兑付问题,并分析时间性能和空间性能。

#include #define N 100000 #define M 20

int a[N][M]; int value[M];

using namespace std;

int main() {

while(true) {

int i,j,k; int x,y,z;

cout<<\输入货币种类的个数:\ cin>>x;

cout<<\从小到大输入货币的价值,其中第一个必须为一:\ for(i=1;i<=x;i++)多边形游戏。多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形,每个顶点具有一个整数值,每条边具有一个运算符“+”或“×”。游戏规则是每次选择一条边e以及和e相关联的两个顶点i和j,用一个新的顶点k取代边e、顶点i和j,顶点k的整数值是顶点i和j的整数值通过边e上的运算符计算得到的结果。当所有边都删除时,游戏结束,游戏的得分就是所剩顶点的整数值。设计动态规划算法,对于给定的多边形计算最高得分。

联系合同范文客服:xxxxx#qq.com(#替换为@)