关于Levenshtein距离的问题

时间:2009-05-13 09:42:20

标签: algorithm levenshtein-distance

1)为什么我们在这些行上加1?

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

该行

if s[i] = t[j] then cost := 0

        else cost := 1 

应该考虑删除/缩短字长,还是我遗漏了什么?

2)此外,评论状态删除和插入。我是否认为它正在检查两个单词中的已删除字符(整数j / i表示单词的长度),因为较低的值将表示已删除的字符。

使用的代码在这里(因为它是伪代码,我没有语言特定的问题,这个帖子不属于任何语言类别):

http://www.iterasi.net/openviewer.aspx?sqrlitid=z0cloj7xhk-ce0f72v4cjq

2 个答案:

答案 0 :(得分:2)

您是否阅读过http://www.merriampark.com/ld.htm

您正在计算将一个字符串转换为另一个字符串所需的转换成本 - 插入和删除的数量。

变换的“成本”表示两个字符串之间的距离。

交流怎么样?这是Damerau–Levenshtein算法,这是不同的。包括交流在内并没有太大改善。

本质上是在两个单词之间创建一个矩阵并逐列计算 - 从每个单词的每个字母到另一个单词的每个字母的“距离”。该矩阵的右下角是总距离,考虑了所有字母。

问题1)

“上方”单元格反映了更改的历史记录,该行的字符(通常)与此不同,因此该单元格是相对于它的删除。

单元格“left”反映了更改的历史记录,该列的字符(通常)与此不同,因此该单元格是相对于它的插入。

这通常会出错的唯一时间是带有三字母序列的单词。罕见的英文。

行列比较的成本为0或1.

“历史加一次更改”的最低值和更改的实际费用是适用的费用。

问题2)

变量ij不是任何长度。它们是比较矩阵中的位置。 “插入”和“删除”是将一个单词转换为另一个单词所需的动作。插入/删除操作的计数是单词之间的距离。

答案 1 :(得分:1)

1)这些行在插入的情况下计算删除时的距离,在替换的情况下计算使用“成本”的距离......

删除和插入在距离计算中有效地计为“1”,因此+1。

我们可以相信只有字符不同才有替换,因此如果两个字符相等,则“cost = 0”...

新距离就是这三个假设之间的最小距离所以你不总是加1 ......

2)如果我计算“FooBar”和“FoBaWhatever”之间的距离,即使第二个字符串长于第一个字符串,我也会有一些字符删除...

当然如果第二个字符串比第二个字符串短(FooBar - > FoBa),我会发现一些删除但不能提前知道它们在哪里...

相关问题