LCS与字符串相似性之间的关系是什么?

时间:2016-09-04 21:34:16

标签: algorithm

我想知道两个字符串的相似之处,我在下一页中找到了一个工具: https://www.tools4noobs.com/online_tools/string_similarity/

它说该工具基于文章:

" O(ND)差分算法及其变体"

可用于: http://www.xmailserver.org/diff2.pdf

我已经阅读了这篇文章,但我对他们如何编写该工具有一些疑问,例如作者说它是基于C库GNU diff和analyze.c;也许它指的是:

https://www.gnu.org/software/diffutils/

并且: https://github.com/masukomi/dwdiff-annotated/blob/master/src/diff/analyze.c

我遇到的问题是如何理解与文章的关系,因为我读到的文章显示了在一对字符串之间找到LCS(最长公共子序列)的算法,所以他们使用了动态的修改用于解决此问题的编程算法。修改是使用最短路径算法来查找具有最小修改次数的LCS。

此时我迷路了,因为我不知道我第一次提到的工具的作者如何使用LCS来找出两个序列有多相似。还有限制值为0.4,这是什么意思?任何人都可以帮我这个吗?或者我误解了那篇文章?

由于

1 个答案:

答案 0 :(得分:2)

我认为字符串相似性工具的描述并不完全诚实,因为我很确定它是使用Perl模块String::Similarity实现的。相似性得分归一化为0到1之间的值,并且如模块页面所描述的,如果相似度低于它,则可以使用限制值提前中止比较。

如果您下载Perl模块并展开它,您可以在名为fstrcmp.c的文件中读取算法的C源代码,该文件说它是“源自GNU diff 2.7,analyze.c等”。

LCS和字符串相似性之间的连接只是在LCS中的那些字符正是您需要添加,删除或替换的字符,以便将第一个字符串转换为第二个,这些不同字符的数量通常用作差异分数,如Levenshtein Distance中所示。