文本比较算法Ⅴ——回顾贴,对前面几篇文章的回顾与质疑

  文本比较算法Ⅰ——LD算法

  文本比较算法Ⅱ——Needleman/Wunsch算法

  文本比较算法Ⅲ——计算文本的相似度

  文本比较算法Ⅳ——Nakatsu算法

  在写了本系列的前面几篇文章之后。有些网友质疑文章的正确性。在仔细的推敲之下,这些网友指正的不无道理。下面举一个反例,来质疑前面文章的正确性。

  文本:A:481234781;B:4411327431

  先按照LD算法,计算LD矩阵  

LD矩阵
  4411327431
 012345678910
410123456789
821123456789
132212345678
243322334567
354433234556
465444334456
776555443456
887666554456
198766665555

  可知,LD(A,B)=5,最佳匹配为

  A:4812347_81

  B:4411327431

  再按照LCS算法,计算LCS矩阵 

LCS矩阵
  4411327431
 00000000000
401111111111
801111111111
101122222222
201122233333
301122333344
401222333444
701222334444
801222334444
101233334445

  可知,LCS(A,B)=5,匹配为

  A:4_81_234781

  B:44113274_31

  不是最佳匹配,而蓝色部分41241的确是最长公共子序列。只是和LD算法算出的最长公共子序列不一样而已。这个说明,最长公共子序列不是唯一的。问题出在哪?出在白色部分的第7行第8列这个单元格的回溯上,在这个单元格,有两个方向可以选,一个是向上,一个是向左,在前文中说到,回溯时优先考虑左上角、上方、下方的顺序。这个是不完全正确的。本例中,这个单元格向左回溯能得到最佳匹配。

 

  然后看看,Nakatsu算法的L矩阵

 

L矩阵
  481234781
 i=0i=1i=2i=3i=4i=5i=6i=7i=8i=9
k=00000000000
k=1V111111111
k=2VVV3332222
k=3VVVV655553
k=4VVVVV98777
k=5VVVVVVVVV10
k=6VVVVVVVVVV
k=7VVVVVVVVVV
k=8VVVVVVVVVV
k=9VVVVVVVVVV

  正如网友Sumtec指正,红色部分才是最长公共子序列的下标。

  出于好奇,我分析了L矩阵中那些数值

  L(k,i)=j→LCS(i,j)=k

  于是在LCS中,把这些对应值表示出来

  

L矩阵在LCS矩阵中的意义
  4411327431
 00000000000
401111111111
801111111111
101122222222
201122233333
301122333344
401222333444
701222334444
801222334444
101233334445

  可以看出,L矩阵的元素表示每一行每个值出现的最左边的位置。这个能求出最长公共子序列。不过,能否求出最佳匹配,还得思量一番。

 

  最近在研究国外的两篇论文,估计研究完了,应该会有所收获。

  《A longest common subsequence algorithm suitable for similar text strings》

  《An almost-linear time and linear space algorithm for the longest common subsequence problem》

 

  在这里打个广告。这两篇论文,在网上能找到下载页面,但因为没有帐号,所以一直无法下载。昨天在“小米粒资源网”上发帖求助,不过半小时而已,就有人帮你下载,共享给你。效果非常好,在这里也向帮我下载的网友致敬。如果,你需要找一些学术论文(无论是中文的还是英文的),不妨在“小米粒资源网”试试,也许会有意想不到的惊喜。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值