最长公共子序列问题
最长公共子序列问题
最长公共子序列(LCS)问题中LCS的定义为“对于任意两个序列X,Y,若Z为其LCS,则Z中的所有元素必然同时存在于X,Y中,且其在X,Y中的下标是递增的”。首先定义状态转移函数F(i,j)表示原问题中X[0…i],Y[0…j]子序列的LCS长度,容易得出状态转移方程如上,因为F(i,j)是单调递增的。如上图所示,在递推F(i,j)状态的同时,如果维护一个“备忘录”数组,则可利用其求出其中一个LCS,并且注意到对F(i-1,j)=F(i,j-1)的情况加以处理可求出全部LCS。下文的代码仅通过回溯状态转移数组求出其中一个LCS。
Python
def dp(X,Y):… 阅读全文