文本比较算法Ⅴ——回顾贴,对前面几篇文章的回顾与质疑
文本比较算法Ⅰ——LD算法
文本比较算法Ⅱ——Needleman/Wunsch算法
文本比较算法Ⅲ——计算文本的相似度
文本比较算法Ⅳ——Nakatsu算法
在写了本系列的前面几篇文章之后。有些网友质疑文章的正确性。在仔细的推敲之下,这些网友指正的不无道理。下面举一个反例,来质疑前面文章的正确性。
文本:A:481234781;B:4411327431
先按照LD算法,计算LD矩阵
4 | 4 | 1 | 1 | 3 | 2 | 7 | 4 | 3 | 1 | ||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
4 | 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
8 | 2 | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 3 | 2 | 2 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
2 | 4 | 3 | 3 | 2 | 2 | 3 | 3 | 4 | 5 | 6 | 7 |
3 | 5 | 4 | 4 | 3 | 3 | 2 | 3 | 4 | 5 | 5 | 6 |
4 | 6 | 5 | 4 | 4 | 4 | 3 | 3 | 4 | 4 | 5 | 6 |
7 | 7 | 6 | 5 | 5 | 5 | 4 | 4 | 3 | 4 | 5 | 6 |
8 | 8 | 7 | 6 | 6 | 6 | 5 | 5 | 4 | 4 | 5 | 6 |
1 | 9 | 8 | 7 | 6 | 6 | 6 | 6 | 5 | 5 | 5 | 5 |
可知,LD(A,B)=5,最佳匹配为
A:4812347_81
B:4411327431
再按照LCS算法,计算LCS矩阵
4 | 4 | 1 | 1 | 3 | 2 | 7 | 4 | 3 | 1 | ||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
4 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
8 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
2 | 0 | 1 | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 |
3 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 3 | 3 | 4 | 4 |
4 | 0 | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 4 | 4 | 4 |
7 | 0 | 1 | 2 | 2 | 2 | 3 | 3 | 4 | 4 | 4 | 4 |
8 | 0 | 1 | 2 | 2 | 2 | 3 | 3 | 4 | 4 | 4 | 4 |
1 | 0 | 1 | 2 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 5 |
可知,LCS(A,B)=5,匹配为
A:4_81_234781
B:44113274_31
不是最佳匹配,而蓝色部分41241的确是最长公共子序列。只是和LD算法算出的最长公共子序列不一样而已。这个说明,最长公共子序列不是唯一的。问题出在哪?出在白色部分的第7行第8列这个单元格的回溯上,在这个单元格,有两个方向可以选,一个是向上,一个是向左,在前文中说到,回溯时优先考虑左上角、上方、下方的顺序。这个是不完全正确的。本例中,这个单元格向左回溯能得到最佳匹配。
然后看看,Nakatsu算法的L矩阵
4 | 8 | 1 | 2 | 3 | 4 | 7 | 8 | 1 | ||
---|---|---|---|---|---|---|---|---|---|---|
i=0 | i=1 | i=2 | i=3 | i=4 | i=5 | i=6 | i=7 | i=8 | i=9 | |
k=0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
k=1 | V | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
k=2 | V | V | V | 3 | 3 | 3 | 2 | 2 | 2 | 2 |
k=3 | V | V | V | V | 6 | 5 | 5 | 5 | 5 | 3 |
k=4 | V | V | V | V | V | 9 | 8 | 7 | 7 | 7 |
k=5 | V | V | V | V | V | V | V | V | V | 10 |
k=6 | V | V | V | V | V | V | V | V | V | V |
k=7 | V | V | V | V | V | V | V | V | V | V |
k=8 | V | V | V | V | V | V | V | V | V | V |
k=9 | V | V | V | V | V | V | V | V | V | V |
正如网友Sumtec指正,红色部分才是最长公共子序列的下标。
出于好奇,我分析了L矩阵中那些数值
L(k,i)=j→LCS(i,j)=k
于是在LCS中,把这些对应值表示出来
4 | 4 | 1 | 1 | 3 | 2 | 7 | 4 | 3 | 1 | ||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
4 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
8 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
2 | 0 | 1 | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 |
3 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 3 | 3 | 4 | 4 |
4 | 0 | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 4 | 4 | 4 |
7 | 0 | 1 | 2 | 2 | 2 | 3 | 3 | 4 | 4 | 4 | 4 |
8 | 0 | 1 | 2 | 2 | 2 | 3 | 3 | 4 | 4 | 4 | 4 |
1 | 0 | 1 | 2 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 5 |
可以看出,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》
在这里打个广告。这两篇论文,在网上能找到下载页面,但因为没有帐号,所以一直无法下载。昨天在“小米粒资源网”上发帖求助,不过半小时而已,就有人帮你下载,共享给你。效果非常好,在这里也向帮我下载的网友致敬。如果,你需要找一些学术论文(无论是中文的还是英文的),不妨在“小米粒资源网”试试,也许会有意想不到的惊喜。
转载于:https://www.cnblogs.com/xumaojun/p/8544059.html
文本比较算法Ⅴ——回顾贴,对前面几篇文章的回顾与质疑相关推荐
- PID算法搞不懂?看这篇文章就够了。
点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 转自知乎: jason 原文链接:https://zhuanlan.zhihu.co ...
- PID算法搞不懂?看这篇文章。
大家好,我是张巧龙,网上关于PID算法的文章很多,但是感觉有必要自己再进行一次总结,抽丝剥茧地重新认识了一下PID: 1 前言 2 开环控制 3 闭环控制 4 PID 4.1 系统架构 4.2 理论基 ...
- 贪心算法-数列极差问题(对前篇文章的修改)
package com.work.home_3_1; import java.util.Arrays; /** * 贪心算法-数列极差问题 * 1. 问题描述: * N个正数数列 ...
- 算法工程师的效率神器——vim篇
文章来源于夕小瑶的卖萌屋,作者小鹿鹿lulu 我相信,有很多小伙伴在看到这篇文章时就有了很多问号: 用vim?疯了吧?sublime不香吗?pycharm不香吗?jupyter notebook不香吗 ...
- 【完结】深度学习CV算法工程师从入门到初级面试有多远,大概是25篇文章的距离...
文/编辑 | 言有三 转载自言有三 一直有同学希望我在公众号写写面试相关的东西,一直没写.我们不会开相关的板块,因为没有标准,容易引起争议,而且可能会加重大家的浮躁和焦虑. 不过关于面试,有三还是有一 ...
- 基础,算法,编程的1000+篇文章总结
基础,算法,编程的1000+篇文章总结 本文收集和总结了有关基础,算法,编程的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.com/, ...
- 这或许是东半球分析十大排序算法最好的一篇文章
作者 | 不该相遇在秋天 转载自五分钟学算法(ID:CXYxiaowu) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强 ...
- 2.2基本算法之递归和自调用函数_你为什么学不会递归?读完这篇文章轻松理解递归算法...
对于很多编程初学者来说,递归算法是学习语言的最大障碍之一.很多人也是半懂不懂,结果学到很深的境地也会因为自己基础不好,导致发展太慢. 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却 ...
- 文本比较算法Ⅶ——线性空间求最长公共子序列的Nakatsu算法
在参阅<A Longest Common Subsequence Algorithm Suitable for Similar Text Strings>(Narao Nakatsu,Ya ...
最新文章
- java mvc view_对Springmvc view层的理解
- PP视频播放视频时如何关闭弹屏
- java中一级缓存_java – 集群环境中的hibernate一级缓存
- linux中的c技术,基于linux下C开发中的几点技术经验总结
- Data too long for column ‘blobtext‘ at row 1 问题解决
- 实操高校数据中心vsphere6.0升级6.5,重新规划网络。
- three.js 后期处理,物体高亮
- @Configuration使用
- C程序设计实践——实验指导
- Dubbo分布式系统架构实战视频教程[基础篇高级篇高可用架构]
- 解决WebStorme点击谷歌浏览器图标无反应问题
- python国际象棋小游戏代码_用Python编写一个国际象棋AI程序
- HDU 4699 Editor (对顶栈)
- (附源码)基于Python音乐分类系统 毕业设计 250858
- Python练习——用循环求100以内7的倍数
- 项目实训(十六)FPS游戏之PUN角色位移同步,动画状态同步
- CSU - 1655 文本计算器
- gms认证流程_谷歌GMS测试认证具体流程
- 利用Python计算UDP校验和
- 郑军 你真是郑家的耻辱!!!
热门文章
- 怎么预约鸿蒙系统,华为鸿蒙2.0系统-鸿蒙2.0系统预约-艾艾软件园
- usb大容量存储设备驱动_Win10默认已禁用USB驱动器缓存 1903版本起无需点击安全弹出...
- menu.php,menu.php
- js中关于this的小问题
- 武汉网络推广浅析当网站停止收录时该检查哪些问题?
- 全球缺芯+瑞萨火灾——网络营销之下一众车企减产的减产,停产的停产
- 服务器信号分析,服务器及其讯号解析装置 Server and its signal analysis apparatus
- mybatis 分页需要的jar包下载_064、MyBatis
- linux系统怎么用wifi,【教程】Wii安装运行可用WIFI的Linux系统全攻略
- python 遍历元组例子_【Python入门自学笔记专辑】——元组的创建、访问、遍历...