java 计算lcs,GitHub - boycy815/java-diff: 根据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

677f99ee3663434a011631cd57dc4f85.png

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

6c8d32ed93531540b706bfdc1f7a1b58.png

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

bcd9b0f880d2705db0c10473dcc6aa32.png

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

b7eb63a11f48556714fc4f9ab3213d57.png

第五步,回溯单元格,至矩阵的左上角

若ai=bj,则回溯到左上角单元格

5.jpg

若ai≠bj,回溯到左上角、上边、左边中值最小的单元格,若有相同最小值的单元格,优先级按照左上角、上边、左边的顺序

6.jpg

若当前单元格是在矩阵的第一行,则回溯至左边的单元格

若当前单元格是在矩阵的第一列,则回溯至上边的单元格

7.jpg

依照上面的回溯法则,回溯到矩阵的左上角

第六步,根据回溯路径,写出匹配字串

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

若回溯到上边单元格,将ai添加到匹配字串A,将_添加到匹配字串B

若回溯到左边单元格,将_添加到匹配字串A,将bj添加到匹配字串B

搜索晚整个匹配路径,匹配字串也就完成了

A:GGA_TC_G__A

B:GAATTCAGTTA

成果物

r0.jpg

r1.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值