63
правки
Изменения
→Корректный алгоритм
Тогда если символ <tex>S[i]</tex> встречался в <tex>T[1]..T[j]</tex> на позиции <tex>j'</tex>, а символ <tex>T[j]</tex> встречался в <tex>S[1]..S[i]</tex> на позиции <tex>i'</tex>; то <tex>T[1]..T[j]</tex> может быть получена из <tex>S[1]..S[i]</tex> удалением символов <tex>S[i' + 1]..S[i - 1]</tex>, транспозицией ставших соседними <tex>S[i']</tex> и <tex>S[i]</tex> и вставкой символов <tex>T[j' + 1]..T[j - 1]</tex>. Суммарно на это будет затрачено <tex>D(i', j') + (i - i' - 1) \cdot deleteCost + transposeCost + (j - j' - 1) \cdot insertCost</tex> операций, что описано в <tex>(*)</tex>. Поэтому мы выбирали оптимальную последовательность операций, рассмотрев случай с транспозицией и без неё.
Корректный алгоритм Дамерау-Левенштейна будет являться метрикой: <tex>\mathtt{DLD}(S,\ V) + \mathtt{DLD}(V,\ T) \geqslant \mathtt{DLD}(S,\ T)</tex>. Предположим обратное: <tex>\mathtt{DLD}(S,\ V) + \mathtt{DLD}(V,\ T) < \mathtt{DLD}(S,\ T)</tex>, тогда приходим к противоречию, так как <tex>\mathtt{DLD}(S,\ T)</tex> является минимальным ответомпо определению.
Сложность алгоритма: <tex>O\left (M \cdot N \cdot \max{(M, N)} \right )</tex>. Затраты памяти: <tex>O\left (M \cdot N \right)</tex>. Однако скорость работы алгоритма может быть улучшена до <tex>O\left (M \cdot N \right)</tex>.