Изменения

Перейти к: навигация, поиск
м
rollbackEdits.php mass rollback
* <tex>w(a, \varepsilon)</tex> — цена удаления символа <tex>a</tex>
Для решения задачи о редакционном расстоянии, необходимо найти последовательность замен, минимизирующую суммарную цену. Расстояние Левенштейна является частным случаем этой задачи при
* <tex>w(a, a) = 0</tex>
* <tex>w(a, b) = 1</tex> при <tex>a\ne b</tex>
D(i, j) = \left\{\begin{array}{llcl}
0&;\ i = 0,\ j = 0\\
i* deleteCost&;\ j = 0,\ i > 0\\j* insertCost&;\ i = 0,\ j > 0\\
D(i - 1, j - 1)&;\ S_1[i] = S_2[j]\\
\min{(}\\
'''if''' S1[i] != S2[j]
D[i][j] = min(D[i - 1][j] + DeleteCost,
D[i][j - 1] + InsertCost, D[i - 1][j - 1] + ReplaceCost)
'''else'''
D[i][j] = D[i - 1][j - 1]
=== Память ===
Алгоритм в виде, описанном выше, требует <tex>\Theta(M \cdot N)</tex> операций и такую же память, однако, если требуется только расстояние, легко уменьшить требуемую память до <tex>\Theta(N)</tex>. Заметим, что для вычисления <tex>D[i]</tex> нам нужно только <tex>D[i - 1]</tex>, поэтому будет будем вычислять <tex>D[i]</tex> в <tex>D[1]</tex>, а <tex>D[i - 1]</tex> в <tex>D[0]</tex>. Осталось только поменяем поменять местами <tex>D[1]</tex> и <tex>D[0]</tex>.
<code>
1632
правки

Навигация