Algorithm 编辑距离(Levenshtein距离)递归自顶向下实现的复杂性
我整天都在为一个我似乎无法解决的问题而工作。任务是证明编辑距离的递归实现具有时间复杂度Ω(2max(n,m)),其中n&m是被测单词的长度 该实现与这个小型python示例相当Algorithm 编辑距离(Levenshtein距离)递归自顶向下实现的复杂性,algorithm,big-o,complexity-theory,levenshtein-distance,edit-distance,Algorithm,Big O,Complexity Theory,Levenshtein Distance,Edit Distance,我整天都在为一个我似乎无法解决的问题而工作。任务是证明编辑距离的递归实现具有时间复杂度Ω(2max(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 stri
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)
发件人:
我曾尝试为不同的短单词绘制递归深度的树,但我找不到树深度和复杂性之间的联系
我的计算中的递归公式
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
关于如何证明下限复杂度为Ω(2max(n,m))的任何提示,我将不胜感激。您的递归公式:
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)
。该树还包含至少
不同的路径,每种可能的还原顺序一条
所以,
Ω(2max(m,n))
和Ω(3min(m,n))
是下限,O(3m+n-1)
是上限。你确定大ω吗?让n保持不变为1。然后我们可以很容易地看到,复杂性是km(树几乎是一个列表),对于m>=m\0,非常清楚的是km<2^m=2^max(1,m)