我即将解决关于Levenshtein距离的编程问题。根据我的表格中给出的定义,它表明Lenveshtein距离等于两个字符串之间的替换,插入和删除的数量。然而,替换不会只是删除然后插入?我在这里缺少什么?
答案 0 :(得分:1)
您可以使用插入和删除来实现替换的效果,是的。但是如果你只限制自己插入和删除,你用这种方式创建的每个这样的“替换”将花费你2而不是1.这对某些应用来说可能是现实的,但有时候假设替换成本相同/更合理与插入或删除一样可能,而不是两倍的成本/一半。
<强> [编辑] 强>
事实上,发明比标准Levenshtein距离更常见的编辑距离是可能的,有时也是有用的。您可以为插入,删除和替换提供任意成本。您甚至可以扩展操作集以包括转置(将ab
更改为ba
以获得某些固定成本)或块操作(“插入从位置i开始的length-j子串的副本”一些固定成本)。转换的效果当然可以在没有使用删除加插入的特殊“转置”移动的情况下实现,但是这又导致移动花费比单独删除或插入更多。如果您的应用程序是您想要找到一个人在键入不在字典中的单词时最有可能“意味着”的英语单词,您可能更愿意使用转换成本较低的距离,因为这是一个常见的打字错误。