Я весь день работал над проблемой, с которой, похоже, не мог справиться. Задача состоит в том, чтобы показать, что рекурсивная реализация расстояния редактирования имеет временную сложность (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)).