字符串的编辑距离
字符串的编辑距离也被称为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),参考解点击这里。在应用字符串编辑距离算法时,需要做一点点改变,因为该题不存在删除一个字符的操作。
posted on 2009-03-17 23:07 wpcockroach 阅读(2666) 评论(0) 编辑 收藏 举报