算法分析与实践作业9
1. 问题
问题一.最长公共子序列问题,给定序列X=<x1,x2,……,xm>, Y=<y1,y2,……,yj>,求X和Y的最长公共子序列
问题二.背包问题。可以放入背包的物品有n种,物品j的重量和价值分别为wj,vj,j=1,2,…,n。如果背包的最大重量限度是b,如何选择放入背包物品使得背包的价值最大。
2. 解析
问题一:

问题二:

3. 设计
问题一.算法1:给出最长字串长度
C[0,j]=C[I,0]=0,1<=i<=m,1<=j<=n
For i=1 to m
For j=1 to n
C[i,j]=C[i-1,j-1]+1 i,j>0,xi=yj,B[I,j]=←(删除两个)
C[i,j]=max{C[i,j-1],C[i-1,j]} i,j>0,xi≠yj C[i,j-1],B[i,j]=↓(删除y); C[i-1,j],B[i,j]=↑(删除x)
算法2:f(B,i,j)输出最长字串
if i=0 or j=0 then return;
if b[I,j]=← //删除两个
then 输出X[i]
else if B[i,j]=↑ f(B,i-1,j) //删除x
else f(B,i,j-1) //删除y
问题二:

4. 分析
问题一:


运行结果:

时间复杂度O(mn);
问题二:

运行结果:

时间复杂度:O(n*b)
5. 源码
github地址:https://github.com/122cmy/myGitTemp9
博客地址:https://www.cnblogs.com/122cmy/

浙公网安备 33010602011771号