下載/瀏覽

Download Report

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