最长公共子序列(动态规划)
给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列LCS(可以不连续)
动态规划(dynamic programming)算法是解决多阶段决策过程最优化问题的一种常用方法,难度比较大,技巧性也很强。利用动态规划算法,可以优雅而高效地解决很多贪婪算法或分治算法不能解决的问题。
题目分析
分析最优解的结构:设序列X={x1,x2,…,xm}和Y={y1,y2,…,yn}的最长公共子序列为Z={z1,z2,…,zk}
xm-1= {x1,x2,…,xm-1}; yn-1 = {y1,y2,…,yn-1}; zk-1= {z1,z2,…,zk-1}
①若xm=yn ,则zk=xm=yn,且Zk-1是Xm-1和Yn-1的最长公共子序列。
②若xm≠yn且zk≠xm,则Z是Xm-1和Y的最长公共子序列。