在Levenshtein Distance算法中,这一行做了什么?:
d[i][j] = Minimum (d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1] + cost);
虽然它得到了所有这些值中的最小值,但为什么成本会添加到最后,为什么我们在每个数组索引器的末尾都有+ 1(前两个参数)?
答案 0 :(得分:2)
这是一个公式:
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);
cost
为m(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成本值,如果您认为字母删除比字母替换更大的差异