当前位置:   article > 正文

动态规划——最长公共子序列LCS_最长公共子序列动态规划算法

最长公共子序列动态规划算法

一、动态规划算法

动态规划算法与分治法类似,其基本思想也是将带求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。若用分治法解这类问题,则分解得到的子问题数目太多,以至于最后解决原问题需要耗费指数时间。然而,不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。

如我们求解斐波那契数列时:

  1. int Fibonacci(int n)
  2. {
  3. if(n<=0)
  4. return 0;
  5. if(n==1)
  6. return 1;
  7. return Fibonacci(n-1)+Fibonacci(n-2);
  8. }

思路:

如图,需要重复计算某些已经解决的答案。如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。为了达到这个目的,可以用一个表来记录所有已解决的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填人表中。这就是动态规划法的基本思想。具体的动态规划算法是多种多样的,但它们具有相同的填表格式。

动态规划算法适合于解最优化问题,通常可以按照以下步骤:

(1)找出最优解的性质,并刻画其结构特征;

(2)递归的定义最优值;

(3)以自底向上的方式计算出最优值;

(4)根据计算最优值时得到的信息,构造最优解

步骤(1)~(3)是动态规划算法的基本步骤。在只需要求出最优值的情形,步骤(4)可以省去。若需要求问题的最优解,则必须执行步骤(4)。此时,在步骤(3)中计算最优值时,通常需记录更多的信息,以便在步骤(4)中,根据所记录的信息,快速构造出最优解。
下面运用动态规划算法来求解最长公共子序列问题,和矩阵连乘问题

二、最长公共子序列

问题描述:给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列,并且子序列指的是严格意义上的下标递增的序列。现给出两个序列X{ABCBDAB},Y{BDCABA},其最长公共子序列就是{BDAB}。下面给出求解最长公共子序列

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/201954
推荐阅读
相关标签
  

闽ICP备14008679号