Levenshtein的问题

时间:2010-01-05 17:26:08

标签: algorithm levenshtein-distance

Levenshtein Distance算法中,这一行做了什么?:

    d[i][j] = Minimum (d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1] + cost);

虽然它得到了所有这些值中的最小值,但为什么成本会添加到最后,为什么我们在每个数组索引器的末尾都有+ 1(前两个参数)?

3 个答案:

答案 0 :(得分:2)

这是一个公式:

alt text

m(a,b) = if a==b then 0 else 1

带有“min”的行是递归公式本身,其他是递归导致的非递归情况。

您的专栏正在使用“缓存”数组中的结果。试着看看它:

 d(i, j) = Minimum (d(i-1, j)+1, d(i, j-1)+1, d(i-1, j-1) + cost);

costm(a,b),如果a==b则为零,而在另一种情况下为

答案 1 :(得分:1)

来自文章:

                (
                  d[i-1, j] + 1,  // deletion
                  d[i, j-1] + 1,  // insertion
                  d[i-1, j-1] + 1 // substitution
                )

算法的目的是找到将一个字符串(或列表)转换为另一个字符串的最便宜路径。任何给定操作的“成本”都在您引用的行中。在你的情况下,“删除”被认为是1的成本,“插入”也是1,而“替换”则是可变成本。

答案 2 :(得分:0)

如果你进一步了解,你会知道:我们可以为插入,删除和替换提供不同的惩罚成本。我们还可以根据插入,删除或替换的字符给出惩罚费用。

你会这样的,例如在公式的删除部分包含一些> 0成本值,如果您认为字母删除比字母替换更大的差异