更快的编辑距离算法

时间:2014-10-04 06:16:43

标签: c++ algorithm optimization dynamic-programming edit-distance

问题:我知道琐碎的编辑距离DP公式和O(mn)中的2个大小为n和m的字符串的计算。但我最近才知道,如果我们只需要计算编辑距离f的最小值并且它是有界的| f |< = s,那么我们可以用O(min(m,n)+ s ^ 2计算它) )或O(s * min(m,n))[维基百科]时间。

如果这是基于DP或解释算法,请解释它背后的dp配方。

查看improved algorithm部分 link: http://en.wikipedia.org/wiki/Edit_distance

关于改进的UKKONEN'S算法http://www.berghel.net/publications/asm/asm.php

的另一个链接

提前致谢。

1 个答案:

答案 0 :(得分:12)

你可以用O(min(n,m)* s)时间计算编辑距离使用下一个简单的想法:

考虑DP表中的第i个字符串。

所以,如果我们知道那个答案< = s,那么我们就会在坐标为(i,i - s),(i,i - s + 1),...,(i,i + s)。因为在其他细胞中答案严格大于s。

例如,假设我们知道," abacaba"之间的编辑距离和" baadba"不到3个。

DP-table for this strings

因此,我们可以跳过红细胞,因为它们的价值超过了s。

算法O(min(n,m)* s)的渐近因为我们计算了主对角线左右两侧的s单元格。