- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设与分析第6讲 动态规划
动态规划
Dynamic Programming
矫久想袁巢打怂锰重眷鸣锡本祁赫曙棒郑殿啮倾浚崇过翱捎韭放桥继躬延算法设计与分析第6讲 动态规划算法设计与分析第6讲 动态规划
最长公共子序列问题
给定两个序列x(x1,..xm), y(y1,…yn),寻找一个最长的公共子序列,lcs(x,y).
例
X: A B C B D A B
Y: B D C A B A
Lcs: BDAB, BCAB,BCBA
算法1:穷举--给出X的一个子串(2m个?),测试是不是Y的子串。1次测试的时间是θ(n),故总时间= θ(n2m),是个指数级别的。
暮译锰疆程搁奇约持轩袁螺酥伶膜氏荫撵由迷滋迈瞪疡盲窟货扰系戴柏丧算法设计与分析第6讲 动态规划算法设计与分析第6讲 动态规划
算法思路
1 先算出LCS(x,y)的长度
2 再扩充之,得到LCS.
用|S|记录串S的长度,
策略:考虑x,y的前缀,变成一些会怎么样?
定义 C[i,j]=|LCS(x(1,..i),y(1,,,j)|
则C[m,n]=LCS(x,y)
香遭釜垒埠丈首墓椭禾伞跟宫斑阶那哑瓷漠膳涉恰植痰甜匪奖狸铭联冲枷算法设计与分析第6讲 动态规划算法设计与分析第6讲 动态规划
递推式
定理:
证明:令Z(1,2,..k)=LCS(x(1,2,..i),y(1,2,..j))
则|Z|=C[i, j]=k.
1 x[i]=y[j]. 画出Z到x和y的一一对应,z[k]一定对应到x[i]或(和)y[j]?. 那么Z(1,2,..k-1)肯定对应在(x(1,2,..i-1),y(1,2,..j-1)上.另外,不会有更长的公共字串, 故Z(1,2,..k-1)=LCS (x(1,2,..i-1),y(1,2,..j-1)),即C[i-1,j-1]=k-1=C[i,j]-1.
2 else. 如果Z[k]不对应x[i]或者y[j]。如果不对应X[i],则Z(1,2,..k)=LCS(x(1,2,..i-1),y(1,2,..j)),如果不对应y[i],则Z(1,2,..k)=LCS(x(1,2,..i),y(1,2,..j-1)),故C[I,j]=max(C[i-1,j],C[I,j-1])
斡呛搂妥阵仰赖唉狸窒咖尺拙照淘货联喝人屋弛乃较净峙私项瘁脉寒挡优算法设计与分析第6讲 动态规划算法设计与分析第6讲 动态规划
动态规划特征1-最优子结构
刚才的证明发现,Z(1,2,..k)=LCS(x,y)则Z(1,2…k-1)是x,y前缀的 LCS.
最优子结构: 一个问题的最优解的一部分,是子问题的最优解。
递归算法:LCS(x,y,i,j)
If x[i]=y[j] then C[i,j]=LCS(x,y,i-1,j-1)+1;
Else C[i,j]=max(LCS(x,y,i-1,j),LCS(x,y,i,j-1))
Return C[i,j]
区镁肿满苯块栖夹洲染隐蒂子轴汾孽同胰唉寄斟煌懒殿情吠侵咆序狡辱锨算法设计与分析第6讲 动态规划算法设计与分析第6讲 动态规划
递归算法复杂性
递归树 (最差情况,x[i]!=y[j] 任何的i,j)
2叉树,树高(m+n),故节点个数O(2m+n)
但是,可以观察到,很多子树是相同的,不必要递归再计算一次
7,3
7,5
6,6
7,4
6,5
6,5
5,6
7,6
6,4
6,4
5,5
5,5
6,4
5,5
4,6
舷鄙熙闽蕉粳剔份廉城隶及腔犬跳伪烛锁笺册缓德啡赢蒜治誓租夫淹焕非算法设计与分析第6讲 动态规划算法设计与分析第6讲 动态规划
动态规划特征2
重叠子结构:递归中,有独立子问题被计算多次。 实际上C[i,j]中,不同的只有mn个问题
备忘录算法:
LCS(x,y,i,j)
if C[i,j] != nil
then if x[i]=y[j] then C[i,j]=LCS(x,y,i-1,j-1)+1;
Else C[i,j]=max(LCS(x,y,i-1,j),LCS(x,y,i,j-1));
return C[i,j]
T= θ(mn)
贸娥指藉城疮喳职劳拢趾淖御问邑历冲摇海肥径栏喉汛脏岔盈链素症敏蚁算法设计与分析第6讲 动态规划算法设计与分析第6讲 动态规划
动态规划算法
自底向上计算,不递归
A B C B D A B
0 0 0 0 0 0 0
B 0 0 1 1 1 1 1 1
D 0 0 1 1 1 2 2 2
C 0 0 1 2 2 2 2 2
A 0 1 1 2
文档评论(0)