麻省理工学院公开课:算法导论15动态规划

来源:互联网 发布:怎么在淘宝社区发帖 编辑:程序博客网 时间:2024/05/16 18:28
  • 例:给定两个序列X[1...m],y[1...n]找出它们的LCS(最长公共子序列)

LCS可能不唯一。

X:A B C B D A B

Y:  B D C A B A

LCS:B D A B,B C A B, B C B A

第一种方法:穷举,x的子序列有2^m个,最坏运行时间有O(n*2^m),会超时

第二种方法:动态规划

定义c[i,j]记录x,y的LCS长度。

c[i,j]=LCS(x[1..i],y[1..j]);

c[m,n]即为LCS

          c[i-1,j-1]+1 if x[i]=y[j]

c[i,j]={ max{c[i,j-1],c[i-1,j]  else} 

令z[1..k]=LCS(x[1..i],y[1...j])

当c[i,j]=k时,x,y的LCS=k。

z[k]=x[i]=y[j]

动归的伪代码:(基本就是上面写的那些~)


动归就是自底向上的计算表格...恩我就看了这些,剩下的奇怪的备忘法我就看不下去了orz

0 0
原创粉丝点击