動態規劃演算法通常用於求解具有某種最優性質的問題。我對動態規劃的理解還比較淺顯,目前認為動態有這幾個特點:
1.把原問題分解為子問題,這個有點像分治法,但與分治法不同的是,動態規劃裡上一級問題的求解依賴於下一級問題的解答,而在分治法里,如歸併排序,即使下一子集沒有排好序,上一級**也可以得到執行(不過答案就不對了)。
2.動態規劃存在重複計算的子問題,一般為了避免重複計算而不會用遞迴。
3.動態規劃將未知轉化成已知。
子串行: 乙個序列a = a1,a2,……an,中任意刪除若干項,剩餘的序列叫做a的乙個子串行。也可以認為是從序列a按原順序保留任意若干項得到的序列。
最長公共子串行(longest common sequence)和最長公共子串(longest common substring)不是一回事兒。
公共子串行 : 顧名思義,如果序列c既是序列a的子串行,同時也是序列b的子串行,則稱它為序列a和序列b的公共子串行。
最長公共子串行:a和b的公共子串行中長度最長的(包含元素最多的)叫做a和b的公共子串行。
分析:
動態規劃 最長公共子串行
問題描述 我們稱序列z z1,z2,zk 是序列x x1,x2,xm 的子串行當且僅當存在嚴格上公升的序列 i1,i2,ik 使得對j 1,2,k,有xij zj。比如z a,b,f,c 是x a,b,c,f,b,c 的子串行。現在給出兩個序列x和y,你的任務是找到x和y的最大公共子串行,也就是說要...
動態規劃 最長公共子串行
兩個序列的最長公共子序 lcs longest common length 的 每個字元可以不連續,如x y 那麼它們的最長公共子串行為。這是乙個經典的動態規劃問題,著手點還是找到 最精髓的 狀態轉移方程 假設x,y兩個序列的前i,j個位置的最大子串行已經找到為r i j 自底往上 那麼x i 與y...
動態規劃 最長公共子串行
看完演算法導論關於這部分內容之後的總結 關於最長公共子串行問題 給定兩個子串行 x y 求x和y長度最長的公共子串行。解決方法 首先先要了解lcs的最優子結構,令x y 為兩個子串行,z 為x和y的任意lcs。1 如果 xm yn 則 zk xm yn 且 zk 1 是 xm 1 和 yn 1 的乙...