`

字符串的最大字串和相似度

阅读更多

最大公共子串:


该算法又称之为 "编辑距离",用于计算两个字符串的相似程度。原理很简单,就是返回将第一个字符串转换(删除、插入、替换)成第二个字符串的编辑次数。次数越少,意味着字符串相似度越高。

算法原理:Wikipedia - Levenshtein distance 本文摘自:http://www.rainsts.net/article.asp?id=767

Step1:

人 民 共 和 时 代
0, 0, 0, 0, 0, 0, 0
中 1, 0, 0, 0, 0, 0, 0
华 2, 0, 0, 0, 0, 0, 0
人 3, 0, 0, 0, 0, 0, 0
民 4, 0, 0, 0, 0, 0, 0
共 5, 0, 0, 0, 0, 0, 0
和 6, 0, 0, 0, 0, 0, 0
国 7, 0, 0, 0, 0, 0, 0

Step2:

人 民 共 和 时 代
0, 1, 2, 3, 4, 5, 6
中 1, 0, 0, 0, 0, 0, 0
华 2, 0, 0, 0, 0, 0, 0
人 3, 0, 0, 0, 0, 0, 0
民 4, 0, 0, 0, 0, 0, 0
共 5, 0, 0, 0, 0, 0, 0
和 6, 0, 0, 0, 0, 0, 0
国 7, 0, 0, 0, 0, 0, 0

Step3:

人 民 共 和 时 代
0, 1, 2, 3, 4, 5, 6
中 1, 1, 2, 3, 4, 5, 6
华 2, 2, 2, 3, 4, 5, 6
人 3, 2, 3, 3, 4, 5, 6
民 4, 3, 2, 3, 4, 5, 6
共 5, 4, 3, 2, 3, 4, 5
和 6, 5, 4, 3, 2, 3, 4
国 7, 6, 5, 4, 3, 3, 4


LD用m*n的矩阵存储距离值。算法大概过程:


    1. str1或str2的长度为0返回另一个字符串的长度。
    2. 初始化(n+1)*(m+1)的矩阵d,并让第一行和列的值从0开始增长。
    3. 扫描两字符串(n*m级的),如果:str1[i] == str2[j],用temp记录它,为0。否则temp记为1。

        然后在矩阵d[i][j]赋于d[i-1][j]+1 、d[i][j-1]+1、d[i-1][j-1]+temp三者的最小值。
    4. 扫描完后,返回矩阵的最后一个值即d[n][m]

 

2. LCS

LCS (Longest Common Subsequence) 算法用于找出两个字符串最长公共子串

算法原理:

(1) 将两个字符串分别以行和列组成矩阵。
(2) 计算每个节点行列字符是否相同,如相同则为 1。
(3) 通过找出值为 1 的最长对角线即可得到最长公共子串。

人 民 共 和 时 代
中 0, 0, 0, 0, 0, 0
华 0, 0, 0, 0, 0, 0
人 1, 0, 0, 0, 0, 0
民 0, 1, 0, 0, 0, 0
共 0, 0, 1, 0, 0, 0
和 0, 0, 0, 1, 0, 0
国 0, 0, 0, 0, 0, 0

为进一步提升该算法,我们可以将字符相同节点(1)的值加上左上角(d[i-1, j-1])的值,这样即可获得最大公用子串的长度。如此一来只需以行号和最大值为条件即可截取最大子串。

人 民 共 和 时 代
中 0, 0, 0, 0, 0, 0
华 0, 0, 0, 0, 0, 0
人 1, 0, 0, 0, 0, 0
民 0, 2, 0, 0, 0, 0
共 0, 0, 3, 0, 0, 0
和 0, 0, 0, 4, 0, 0
国 0, 0, 0, 0, 0, 0

分享到:
评论

相关推荐

    16位字符串相似度测试

    16位字符串相似度测试,用VB编写,可以测试字符的相似度,是手写识别的必备条件。

    js判断出两个字符串最大子串的函数实现方法

    在实际应用中,寻找两个字符串的最大公共子串可以用于多种场景,例如基因序列比较、文本校对和相似度分析等。实现该功能的JavaScript函数可以嵌入Web应用中,用户输入两个字符串后,程序会自动计算出两者之间最大的...

    Java字符串相似度:各种字符串相似度和距离算法的实现:Levenshtein,Jaro-winkler,n-Gram,Q-Gram,Jaccard索引,最长公共子序列编辑距离,余弦相似度..

    一个实现不同字符串相似度和距离度量的库。 当前实现了十二种算法(包括Levenshtein编辑距离和同级,Jaro-Winkler,最长公共子序列,余弦相似性等)。 查看下面的摘要表以获取完整列表... 下载 使用Maven: ...

    文本匹配和模式分类论文

    算法的数学基础在于定义字符串和关键字的子串以及它们的相似度度量。给定待匹配的字符串SN和关键字集合EM,算法首先找到SN的所有子串F(SN),同时找出关键字Pi的所有子串F(Pi)。相似度是通过比较两个子串Ωn(既是SN...

    基于动态规划思想的编辑距离计算

    对于两个字符串a和b,计算两个字符串的相似度,即计算两个字符串的编辑距离,相当于计算它们字串的编辑距离,再加上从子串到全串所需的最少编辑次数即可,不断地进行递推。 递推公式如下: hp[i][j]指的是a的前i个...

    相似性检测与文本去重

    LCS作为一种字符串处理的算法,被广泛应用于文本相似度的计算和文本匹配领域。 对于文档中提到的“软件2014年第35卷第11期SOFTWARE国际IT传媒品牌”以及“通信联系人:吴国仕,教授”,这些信息指示了文档的出处、...

    楓之夜程式設計培訓班考試03

    `string`型別不能直接初始化為整數,應初始化為字符串。 - (4) 合法。指標可以被初始化為`0`或者`nullptr`,表示未指向任何地址。 **2. 變數操作** - **題目:** 下列何者變數可以於執行期更改其(數)值? - (1) `...

    新词发现方法

    **pat-array(后缀数组)**是一种高效的数据结构,用于存储字符串的所有后缀,并按字典序排序。它在文本检索、字符串匹配等方面有着广泛的应用。通过构建pat-array,可以快速查找文本中的重复串和模式。 **倒排索引...

    Python文本相似性计算之编辑距离详解

    一般来说,编辑距离越小,两个串的相似度越大。 例如将kitten一字转成sitting:(’kitten’ 和 ‘sitting’ 的编辑距离为3)  sitten (k→s)  sittin (e→i)  sitting (→g) Python中的Levenshtein包...

Global site tag (gtag.js) - Google Analytics