根據LCS最長公共子串算法,采用java實現比較文本的不同之處(增加,刪除,更新)
原理
舉例說明: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
第二步:利用上述的公式一,計算第一行
第三步,利用上述的公示一,計算其余各行
第四步,定位在矩陣的右下角
第五步,回溯單元格,至矩陣的左上角
若ai=bj,則回溯到左上角單元格
若ai≠bj,回溯到左上角、上邊、左邊中值最小的單元格,若有相同最小值的單元格,優先級按照左上角、上邊、左邊的順序
若當前單元格是在矩陣的第一行,則回溯至左邊的單元格
若當前單元格是在矩陣的第一列,則回溯至上邊的單元格
依照上面的回溯法則,回溯到矩陣的左上角
第六步,根據回溯路徑,寫出匹配字串
若回溯到左上角單元格,將ai添加到匹配字串A,將bj添加到匹配字串B
若回溯到上邊單元格,將ai添加到匹配字串A,將_添加到匹配字串B
若回溯到左邊單元格,將_添加到匹配字串A,將bj添加到匹配字串B
搜索晚整個匹配路徑,匹配字串也就完成了
A:GGA_TC_G__A
B:GAATTCAGTTA
成果物
https://github.com/skypanda100/merge 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!