根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

jopen 9年前發布 | 15K 次閱讀 算法

原理

舉例說明:A=GGATCGA,B=GAATTCAGTTA

第一步:初始化LD矩陣

公式一

若ai=bj,則LD(i,j)=LD(i-1,j-1)

若ai≠bj,則LD(i,j)=Min(LD(i-1,j-1),LD(i-1,j),LD(i,j-1))+1

 根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

第二步:利用上述的公式一,計算第一行

 根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

第三步,利用上述的公示一,計算其余各行

 根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

第四步,定位在矩陣的右下角

 根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

第五步,回溯單元格,至矩陣的左上角

若ai=bj,則回溯到左上角單元格

 根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

若ai≠bj,回溯到左上角、上邊、左邊中值最小的單元格,若有相同最小值的單元格,優先級按照左上角、上邊、左邊的順序

 根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

若當前單元格是在矩陣的第一行,則回溯至左邊的單元格

若當前單元格是在矩陣的第一列,則回溯至上邊的單元格

 根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

依照上面的回溯法則,回溯到矩陣的左上角

第六步,根據回溯路徑,寫出匹配字串

若回溯到左上角單元格,將ai添加到匹配字串A,將bj添加到匹配字串B

若回溯到上邊單元格,將ai添加到匹配字串A,將_添加到匹配字串B

若回溯到左邊單元格,將_添加到匹配字串A,將bj添加到匹配字串B

搜索晚整個匹配路徑,匹配字串也就完成了

A:GGA_TC_G__A

B:GAATTCAGTTA

成果物

 根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

 根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)

https://github.com/skypanda100/merge

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!