算法分析与实践作业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/

 

posted @ 2021-06-19 18:19  小月爱写代码  阅读(44)  评论(0)    收藏  举报