经典算法研究系列:三、动态规划算法解微软一道面试题[第56题](二)

2014-11-23 21:53:52 · 作者: · 浏览: 29

此过程LCS-LENGTH以俩个序列X = 〈x1, x2, ..., xm〉 和 Y = 〈y1, y2, ..., yn〉为输入。

它把c[i,j]值填入一个按行计算表项的表c[0 m, 0 n] 中, 它还维护b[1 m, 1 n] 以简化最优解的构造。

从直觉上看,b[i, j] 指向一个表项,这个表项对应于与在计算 c[i, j]时所选择的最优子问题的解是相同的。

该程序返回表中 b and c , c[m, n] 包含X和Y的一个LCS的长度。

步骤四,构造一个LCS,

PRINT-LCS(b, X, i, j)
1 if i = 0 or j = 0
2 then return
3 if b[i, j] = " "
4 then PRINT-LCS(b, X, i - 1, j - 1)
5 print xi
6 elseif b[i, j] = "↑"
7 then PRINT-LCS(b, X, i - 1, j)
8 else PRINT-LCS(b, X, i, j -