字符串相似度算法和最大公共子串提取算法
2014-06-03 22:19
1306 查看
字符串相似度算法和最大公共子串提取算法
1. Levenshtein Distance该算法又称之为 "编辑距离",用于计算两个字符串的相似程度。原理很简单,就是返回两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。次数越少,意味着字符串相似度越高。
例如将 kitten 转换成 sitting:
sitten (k→s)
sittin (e→i)
sitting (→g)
俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。
算法原理:
下面为你展示一个编辑距离计算的实例。源字符串是 "GUMBO" ,目标字符串是 "GAMBOL".
Steps 1 and 2
Steps 3 to 6 When i = 1
Steps 3 to 6 When i = 2
Steps 3 to 6 When i = 3
Steps 3 to 6 When i = 4
Steps 3 to 6 When i = 5
Step 7
编辑距离就是矩阵右下角的数字 2. 这与我们的实际计算相符. "GUMBO" 能够转换到 "GAMBOL" 通过将 "U" 替换为 "A" 和插入 "L" (1次替换 + 1次插入 = 2次改变).
C++ 算法实现Code:
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
C++ 算法实现Code:
相关文章推荐
- 两个或N个字符串最大公共子串算法
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 找工作知识储备(2)---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- js算法:动态规划-最大公共子串与最大子段和
- 最大公共子串(算法)
- 经典字符串算法 “最长上升子序列,最大连续子序列和,最长公共子串”
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 两个或N个字符串最大公共子串算法
- ] 找工作知识储备(2)---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- [算法] 最大公共子串
- 两个或N个字符串最大公共子串算法
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 算法之插入、归并排序,最大公共子串lcs
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 【算法之动态规划(三)】动态规划算法之:最长公共子序列 & 最长公共子串(LCS),字符串相似度算法
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 字符串“编辑距离”(最大公共子串提取)
- 算法题-两个字符串的最大公共子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串