2010-01-05 60 views
3

Levenshtein Distance算法,这是什么做的线?:莱文斯坦问题

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

虽然它得到了最低所有这些值的,为什么成本加入到结束,为什么我们还要+ 1在每个数组索引器的末尾(前两个参数)?

+1

你将不得不张贴不止于此,因为没有标准的伪代码我们都熟悉命名算法的实现,维基百科是最接近的。维基百科条目http://en.wikipedia.org/wiki/Levenshtein_distance没有“+成本”,所以如果不知道具体实施是什么,我们无法帮助您。 – 2010-01-05 17:31:02

回答

0

如果你进一步研究,你会知道:我们可以给插入,删除和替换赋予不同的惩罚成本。我们还可以根据哪些字符被插入,删除或替换来给予罚金。

例如,包括在公式的删除部分有些> 0成本值,如果你想比的一封信缺失使得除字母替代

1

从文章较大的差异:

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

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

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,一个在其他情况下