1. 首页
  2. 考试认证
  3. 其它
  4. 计算最优值-数据分析方法梅长林

计算最优值-数据分析方法梅长林

上传者: 2024-07-23 02:23:37上传 PDF文件 14.85MB 热度 9次

2.3、计算最优值直接利用上节节末的递归式,我们将很容易就能写出一个计算c[i,j]的递归算法,但其计算时间是随输入长度指数增长的。由于在所考虑的子问题空间中,总共只有θ(m*n)个不同的子问题,因此,用动态规划算法自底向上地计算最优值能提高算法的效率。计算最长公共子序列长度的动态规划算法LCS_LENGTH(X,Y)以序列X=和Y=作为输入。输出两个数组c[0..m ,0..n]和b[1..m ,1..n]。其中c[i,j]存储Xi与Yj的最长公共子序列的长度,b[i,j]记录指示c[i,j]的值是由哪一个子问题的解达到的,这在构造最长公共子序列时要用到。X和Y的最长公共子序列的长度记录于c[m,n]中。

  1. Procedure LCS_LENGTH(X,Y);

  2. begin

  3. m:=length[X];

  4. n:=length[Y];

  5. for i:=1 to m do c[i,0]:=0;

  6. for j:=1 to n do c[0,j]:=0;

  7. for i:=1 to m do

  8. for j:=1 to n do

  9. if x[i]=y[j] then

  10. begin

  11. c[i,j]:=c[i-1,j-1]+1;

  12. b[i,j]:="↖";

  13. end

  14. else if c[i-1,j]≥c[i,j-1] then

  15. begin

  16. c[i,j]:=c[i-1,j];

  17. b[i,j]:="↑";

  18. end

  19. else

  20. begin

  21. c[i,j]:=c[i,j-1];

  22. b[i,j]:="←"

  23. end;

  24. return(c,b);

  25. end;

由算法LCS_LENGTH计算得到的数组b可用于快速构造序列X=和Y=的最长公共子序列。首先从b[m,n]开始,沿着其中的箭头所指的方向在数组b中搜索。

想深入了解如何用动态规划算法解决最长公共子序列问题吗?你可以查看以下链接获取更多详情:

这些资源不仅能让你更全面地理解算法原理,还能帮助你更有效地应用于实际问题!

下载地址
用户评论