在Levenshtein 距离算法中,这条线做了什么?:
d[i][j] = Minimum (d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1] + cost);
尽管它获得了所有这些值中的最小值,但为什么将成本添加到末尾,为什么我们在每个数组索引器(前两个参数)的末尾都有 + 1?
在Levenshtein 距离算法中,这条线做了什么?:
d[i][j] = Minimum (d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1] + cost);
尽管它获得了所有这些值中的最小值,但为什么将成本添加到末尾,为什么我们在每个数组索引器(前两个参数)的末尾都有 + 1?
这是一个公式:
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
来自文章:
(
d[i-1, j] + 1, // deletion
d[i, j-1] + 1, // insertion
d[i-1, j-1] + 1 // substitution
)
该算法的目的是找到将一个字符串(或列表)转换为另一个字符串的最便宜的路径。在您引用的行中考虑了任何给定操作的“成本”。在您的情况下,“删除”被认为是 1 的成本,“插入”也是 1,而“替换”的成本是可变的。
如果您进一步阅读,您会知道:我们可以对插入、删除和替换给予不同的惩罚成本。我们还可以根据插入、删除或替换的字符给出惩罚成本。
例如,如果您认为删除字母比替换字母产生更大的差异,您会在公式的删除部分中包含一些 >0 的成本值