Редактирование: Задача о редакционном расстоянии, алгоритм Вагнера-Фишера

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 25: Строка 25:
 
* <tex>w(a, \varepsilon)</tex> — цена удаления символа <tex>a</tex>
 
* <tex>w(a, \varepsilon)</tex> — цена удаления символа <tex>a</tex>
  
Для решения задачи о редакционном расстоянии необходимо найти последовательность замен, минимизирующую суммарную цену. Расстояние Левенштейна является частным случаем этой задачи при
+
Для решения задачи о редакционном расстоянии, необходимо найти последовательность замен, минимизирующую суммарную цену. Расстояние Левенштейна является частным случаем этой задачи при
 
* <tex>w(a, a) = 0</tex>
 
* <tex>w(a, a) = 0</tex>
 
* <tex>w(a, b) = 1</tex> при <tex>a\ne b</tex>
 
* <tex>w(a, b) = 1</tex> при <tex>a\ne b</tex>
Строка 46: Строка 46:
 
D(i, j) = \left\{\begin{array}{llcl}
 
D(i, j) = \left\{\begin{array}{llcl}
 
0&;\ i = 0,\ j = 0\\
 
0&;\ i = 0,\ j = 0\\
i * deleteCost&;\ j = 0,\ i > 0\\
+
i&;\ j = 0,\ i > 0\\
j * insertCost&;\ i = 0,\ j > 0\\
+
j&;\ i = 0,\ j > 0\\
 
D(i - 1, j - 1)&;\ S_1[i] = S_2[j]\\
 
D(i - 1, j - 1)&;\ S_1[i] = S_2[j]\\
 
\min{(}\\
 
\min{(}\\
Строка 100: Строка 100:
 
       '''if''' S1[i] != S2[j]  
 
       '''if''' S1[i] != S2[j]  
 
           D[i][j] = min(D[i - 1][j] + DeleteCost,         
 
           D[i][j] = min(D[i - 1][j] + DeleteCost,         
                        D[i][j - 1] + InsertCost,                       
+
          D[i][j - 1] + InsertCost,                       
                        D[i - 1][j - 1] + ReplaceCost)                 
+
          D[i - 1][j - 1] + ReplaceCost)                 
 
       '''else'''  
 
       '''else'''  
 
           D[i][j] = D[i - 1][j - 1]
 
           D[i][j] = D[i - 1][j - 1]
Строка 109: Строка 109:
 
=== Память ===
 
=== Память ===
  
Алгоритм в виде, описанном выше, требует <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>.
+
Алгоритм в виде, описанном выше, требует <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>
 
<code>

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблоны, используемые на этой странице: