字符串的编辑距离
2009-03-17 23:07
113 查看
字符串的编辑距离也被称为Levenshtein距离(Levenshtein Distance),一般用动态规划来实现。属于经典算法。
这里对编辑距离进行简单的分析(经典算法,所以记录一下:-))。
我们假定函数dist(str1, str2)表示字串str1转变到字串str2的编辑距离,那么对于下面3种极端情况,我们很容易给出解答(0表示空串)。
dist(0, 0) = 0
dist(0, s) = strlen(s)
dist(s, 0) = strlen(s)
对于一般的情况,dist(str1, str2)我们应该如何求解呢?
假定我们现在正在求解dist(str1+char1, str2+char2),也就是把"str1+char1"转变成"str2+char2"。在这个转变过称中,我们要分情况讨论:
str1可以直接转变成str2。这时我们只要把char1转成char2就可以了(如果char1 != char2)。
str1+char1可以直接转变成str2。这时我们处理的方式是插入char2。
str1可以直接转成str2+char2。这时的情况是我们需要删除char1。
综合上面三种情况,dist(str1+char1, str2+char2)应该是三者的最小值。
用DP来做,我们只需要开辟一个二维数组即可。matrix[i][j]表示长度为i的A串转变为长度为j的B串的编辑距离。
实际应用题:ZJU1027(Human Gene Functions),参考解点击这里。在应用字符串编辑距离算法时,需要做一点点改变,因为该题不存在删除一个字符的操作。
这里对编辑距离进行简单的分析(经典算法,所以记录一下:-))。
我们假定函数dist(str1, str2)表示字串str1转变到字串str2的编辑距离,那么对于下面3种极端情况,我们很容易给出解答(0表示空串)。
dist(0, 0) = 0
dist(0, s) = strlen(s)
dist(s, 0) = strlen(s)
对于一般的情况,dist(str1, str2)我们应该如何求解呢?
假定我们现在正在求解dist(str1+char1, str2+char2),也就是把"str1+char1"转变成"str2+char2"。在这个转变过称中,我们要分情况讨论:
str1可以直接转变成str2。这时我们只要把char1转成char2就可以了(如果char1 != char2)。
str1+char1可以直接转变成str2。这时我们处理的方式是插入char2。
str1可以直接转成str2+char2。这时的情况是我们需要删除char1。
综合上面三种情况,dist(str1+char1, str2+char2)应该是三者的最小值。
用DP来做,我们只需要开辟一个二维数组即可。matrix[i][j]表示长度为i的A串转变为长度为j的B串的编辑距离。
实际应用题:ZJU1027(Human Gene Functions),参考解点击这里。在应用字符串编辑距离算法时,需要做一点点改变,因为该题不存在删除一个字符的操作。
相关文章推荐
- 计算字符串距离(编辑距离)
- DP求两个字符串的编辑距离
- 面试题之九章算法 字符串编辑距离
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 计算两个字符串的编辑距离的快速算法
- 最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 找工作知识储备---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- LCS LIS LCIS 字符串编辑距离 专题
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 计算字符串的相似度(编辑距离)
- 最长公共子序列LCS和字符串编辑距离
- 动态规划——最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串最小编辑距离日记整理
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 求字符串编辑距离的递推和递归实现
- 基于动态规划(dynamic programming)的计算两个字符串的编辑距离
- 两个字符串之间的最短编辑距离
- 2014年亚马逊在线笔试题目及解法_9_24(字符串编辑距离升级版)
- 相似字符串(字符串编辑)最短距离(非递归版本)