Transcript 下載/瀏覽
LCS演算法-簡介 2010/3/26 報告人: 羅中謙 Longest Common Subsequence (LCS ) 何謂LCS (最長共同子序列) ◦ LCS是兩個sequence,在各自所有的 subsequence之中,一模一樣而且最長的那 個subsequence。 ◦ s1:2 5 7 9 3 1 2 ◦ s2:3 5 3 2 8 分割法 假設一序列S1 ◦ 分割為最尾端的元素為e1 ◦ 剩餘的序列為sub1 s1 = sub1 + e1 S2 = sub2 + e2 ◦ 能得到四種結果 一、e1是LCS的一部份,而e2不是 二、e2才是LCS的一部份,而e1不是 三、e1和e2都不是LCS的一部份 四、e1和e2都是LCS的一部份 情形分析 第一種情況(e1是,e2否) ◦ 如果e1是LCS的一部份,而e2不是 s1和s2的LCS,其實就是s1和sub2的LCS,可以把 e2排擠掉 第二種情況(e2是,e1否) ◦ 如同第一種,可以把e1排擠掉 第三種情況(e1,e2均否) ◦ e1,e2均排擠 第四種情況(e1,e2均是) ◦ e1和e2相同 ◦ e1亦會是LCS的最後一個元素 找出LCS的方法(0/5) ◦ s1:2 5 7 9 3 1 2 ◦ s2:3 5 3 2 8 一.使用二維陣列 二.記錄每一格的結果,是由哪一格而來 1. 陣列開頭均設為空 2. S1[i]=S2[j]相同設為左上方向 3. 不相同就抓取上方與左方數值 三.從最後的結果開始往回追溯 找出LCS的方法 ◦ s1:2 5 7 9 3 1 2 ◦ s2:3 5 3 2 8 3 5 3 0 0 0 0 2 8 0 0 2 5 7 9 3 1 2 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 1 1 2 2 2 2 3 3