编辑距离(Levenshtein距离)递归的复杂性自上而下实现

时间:2013-01-31 00:16:21

标签: algorithm complexity-theory levenshtein-distance edit-distance

我一整天都在努力解决一个我似乎无法解决的问题。任务是显示编辑距离的递归实现具有时间复杂度Ω(2 max(n,m))其中n& m是被测词的长度。

该实现可与此小python示例相媲美

def lev(a, b):
    if("" == a):
       return len(b)   # returns if a is an empty string
    if("" == b):
        return len(a)   # returns if b is an empty string
    return min(lev(a[:-1], b[:-1])+(a[-1] != b[-1]), lev(a[:-1], b)+1, lev(a, b[:-1])+1)

来自:http://www.clear.rice.edu/comp130/12spring/editdist/

我尝试为不同的短词绘制递归深度的树,但我无法找到树深度和复杂度之间的联系。

我的计算中的递归公式

m = length of word1
n = length of word2
T(m,n) = T(m-1,n-1) + 1 + T(m-1,n) + T(m,n-1)
With the base cases:
T(0,n) = n
T(m,0) = m

但是我不知道如何继续进行,因为每次通话都会导致3次新的通话,因为长度不会达到0。

如果能够继续表明下限复杂度为Ω(2 max(n,m)),我将不胜感激。

1 个答案:

答案 0 :(得分:3)

您的递归公式:

T(m,n) = T(m-1,n-1) + T(m-1,n) + T(m,n-1) + 1
T(0,n) = n
T(m,0) = m

是对的。

你可以看到,每个T(m,n)分成三个路径。由于每个节点都在O(1)中运行,我们只需要对节点进行计数。

最短路径的长度为min(m,n),因此树至少有3min(m,n)个节点。但是有一些路径更长。通过交替减少第一个和第二个字符串,您可以获得最长的路径。此路径的长度为m+n-1,因此整个树最多包含3m+n-1个节点。

m = min(m,n)。该树至少还包含

enter image description here

不同的路径,每个路径可以减少n

因此Ω(2max(m,n))Ω(3min(m,n))是下限,O(3m+n-1)是上限。