📝 Відстань редагування
Таблиця ДП Левенштейна
Клітинка 0 / 0
Відстань:
Рядки
Керування
Статистика
Клітинок заповнено
0
Відстань
Фаза
Заповнення
Стан
Готово
Операції
Довідка та теорія

Відстань редагування (відстань Левенштейна) між двома рядками — це мінімальна кількість одиничних вставлень, видалень та замін символів, що перетворюють один рядок на інший.

Рекурентність ДП

Нехай d[i][j] — відстань між першими i символами A та першими j символами B. Тоді:

  • d[0][j] = j та d[i][0] = i.
  • Якщо A[i] = B[j], то d[i][j] = d[i−1][j−1] (безкоштовне копіювання).
  • Інакше d[i][j] = 1 + min( видалення d[i−1][j], вставлення d[i][j−1], заміна d[i−1][j−1] ).

Зворотний хід шляху

Почніть із правого нижнього кута й рухайтесь назад до d[0][0]. Діагональний крок — це збіг або заміна, крок угору — видалення, крок ліворуч — вставлення. Розгорнуті кроки дають оптимальне вирівнювання.

Складність

Таблиця має (m+1)×(n+1) клітинок, тож її заповнення потребує O(m·n) часу та пам'яті. Потрібна лише відстань? Можна тримати два рядки для O(min(m,n)) пам'яті.

Де застосовується

Перевірка орфографії, нечіткий пошук, вирівнювання ДНК, виявлення плагіату та інструменти diff усі будуються на цій самій рекурентності.

Поширені запитання

Що таке відстань редагування?

Відстань редагування, або відстань Левенштейна, — це мінімальна кількість одиничних правок (вставлень, видалень або замін символів), потрібних, щоб перетворити один рядок на інший.

Як працює таблиця динамічного програмування?

Сітка розміром (m+1)×(n+1) зберігає відстань редагування між кожним префіксом двох рядків. Кожна клітинка дорівнює мінімуму зі своїх лівого, верхнього та діагонального сусідів плюс вартість правки, тож правий нижній кут містить повну відстань.

Чому діагональний хід особливий?

Діагональний хід вирівнює по одному символу з кожного рядка. Якщо символи збігаються, вартість дорівнює нулю (копіювання); якщо різняться — це заміна вартістю один.

Що таке зворотний хід у цьому алгоритмі?

Після заповнення таблиці ви починаєте з правого нижнього кута й рухаєтесь назад до лівого верхнього, на кожному кроці обираючи сусіда, що дав поточне значення. Так відновлюється фактична послідовність правок.

Яка складність за часом?

Заповнення таблиці потребує O(m·n) часу та O(m·n) пам'яті, де m і n — довжини рядків. Пам'ять можна скоротити до O(min(m,n)), якщо потрібна лише відстань.

Де застосовується відстань редагування?

Перевірка орфографії, нечіткий пошук, вирівнювання ДНК і білків, виявлення плагіату, виправлення OCR та інструменти diff спираються на обчислення відстані редагування.

Чи завжди відповідь єдина?

Значення відстані єдине, але може існувати кілька оптимальних шляхів правок однакової загальної вартості. Цей зворотний хід обирає один узгоджений шлях.

Чим відстань Левенштейна відрізняється від відстані Геммінга?

Відстань Геммінга рахує лише заміни й вимагає рядків однакової довжини. Відстань Левенштейна також дозволяє вставлення та видалення, тож опрацьовує рядки різної довжини.

Чи можуть операції мати різну вартість?

Так. Зважена відстань редагування призначає різні вартості вставленню, видаленню та заміні, що поширено в перевірці орфографії, де одні помилки ймовірніші за інші. Ця симуляція використовує одиничні вартості.

Чому для схожих слів шлях тримається біля діагоналі?

Коли два рядки схожі, більшість символів вирівнюються напряму, тож оптимальний шлях проходить близько до головної діагоналі лише з кількома позадіагональними кроками вставлення чи видалення.