先规定什么算一次编辑

常见Levenshtein距离允许插入一个元素、删除一个元素或把一个元素替换为另一个,各付单位成本。它计算的是最少需要多少操作,而不是从左到右在同一位置发现多少不同;插入之后,后续位置对应关系也会改变。

例如从cat变成cut只需一次替换。相邻元素互换并不是这一基本版本中的单独一步;若把交换也作为操作,或给不同错误赋不同权重,就得到另一个成本模型。字符究竟按字节、码点还是其他单位划分,也须由应用说明。

参考:[1]

把最后选择分成三种情况

动态规划把两个前缀或后缀的最优代价记在表中。一格的候选来自删除一边元素、插入另一边元素,或把两边元素匹配及替换;加上当前操作成本之后取最小值。空序列的边界对应把剩余元素全部插入或删除。

Princeton的序列比对练习给空位成本2、不等元素成本1,仍采用三路最小递推。这说明动态规划结构可以复用,但具体数值属于题目约定,不能把该练习的加权分数直接称为单位成本Levenshtein距离。

参考:[2] [1]

距离、编辑脚本与解释分开

对两个非空长度m、n的输入,标准表用O(mn)时间和空间。若只要分数,可以保留相邻行,用线性辅助空间;若要输出具体编辑脚本,还需保留选择信息或使用专门的恢复方法。多个最优脚本也可能达到相同距离。

拼写候选或序列比对可以按距离排序,但相近不等于含义相同,更不能单凭短距离认定两个名称属于同一对象。阈值还随输入长度和操作单位改变;不同成本模型给出的数字,也不适合不加说明地混在一起比较。

参考:[1] [3] [2]