【问题标题】:What are the differences between insertion, deletion and substitution插入、删除和替换有什么区别
【发布时间】:2013-07-26 14:13:38
【问题描述】:

我即将解决关于 Levenshtein 距离的编程问题。根据我的工作表上给出的定义,它指出 Lenveshtein 距离等于两个字符串之间的替换、插入和删除的数量。但是,替换不只是删除然后插入吗?我在这里错过了什么?

【问题讨论】:

    标签: algorithm levenshtein-distance insertion


    【解决方案1】:

    你可以用插入加删除来实现替换的效果,是的。但是,如果您仅将自己限制为插入和删除,那么您以这种方式创建的每个此类“替换”都会花费您 2 而不是 1。这对于某些应用程序来说可能是现实的,但有时假设替换成本相同/插入或删除的可能性是一样的,而不是成本的两倍/一半。

    [编辑]

    事实上,发明比标准 Levenshtein 距离更通用的编辑距离是可能的,有时也很有用。您可以为插入、删除和替换赋予任意成本。您甚至可以扩展操作集以包括转置(将 ab 更改为 ba 以获得一些固定成本)或块操作(“插入从位置 i 开始的长度 -j 子字符串的副本”以获得一些固定成本) .转置的效果当然可以在没有使用删除加插入的特殊“转置”移动的情况下实现,但这再次导致移动的成本高于单独的删除或插入。如果您的应用程序是您想找到一个人在键入一个不在字典中的单词时最有可能“表示”的英语单词,您可能更愿意使用换位成本较低的距离,因为这是一个常见的打字错误。

    【讨论】:

    • 此外,当通过数组实现字符串时,插入和删除可能会花费 O(n),而替换花费 O(1)
    • @jwpat7:从某种意义上说是这样,但我看不出它有什么关系……实际上计算编辑距离不需要任何此类操作(您只需填写 DP 矩阵) .此外,如果您有源字符串和编辑脚本,并且希望在新缓冲区中生成目标字符串,则可以在 O(1) 时间内执行每个编辑操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多