Мікрооптимізація для обчислення дистанційного обчислення: чи справедлива вона?


10

У Вікіпедії подано реалізацію для динамічної схеми програмування знизу вгору для відстані редагування. Це не повністю відповідає визначенню; внутрішні клітини обчислюються таким чином:

if s[i] = t[j] then  
  d[i, j] := d[i-1, j-1]       // no operation required
else
  d[i, j] := minimum
             (
               d[i-1, j] + 1,  // a deletion
               d[i, j-1] + 1,  // an insertion
               d[i-1, j-1] + 1 // a substitution
             )
}

Як ви бачите, алгоритм завжди вибирає значення з верхнього лівого сусіда, якщо є збіг, економлячи деякий доступ до пам'яті, операції ALU та порівняння.

Однак видалення (або вставка) може призвести до меншої величини, таким чином алгоритм локально неправильний, тобто він порушує критерій оптимальності. Але, можливо, помилка не змінює кінцевий результат - він може бути скасований.

Чи справжня мікрооптимізація дійсна, і чому (ні)?

Відповіді:


6

Я не думаю, що алгоритм хибний. Якщо збігаються два рядки, ми порівнюємо спочатку його останні два символи (а потім повторюємо). Якщо вони однакові, ми можемо зіставити їх, щоб отримати оптимальне вирівнювання. Наприклад, розглянемо рядки testта testat. Якщо ви не співпадаєте з двома останніми ts, один з ts залишається незрівнянним, оскільки в іншому випадку ваше відповідність виглядатиме так:

введіть тут опис зображення

Це неможливо, оскільки стрілки не дозволяють «перетинатися». Зібрана tіндукує кілька вставок (зелені поля на малюнку), як зображено зліва:

введіть тут опис зображення

Але тоді ви можете просто знайти однаково гарне вирівнювання, зображене праворуч. В обох випадках ви збігаєтеся з a tі у вас є дві вставки.

Аргумент для заміни одного з останніх ts однаковий. Отже, якщо ви заміните одну з останніх ts, то замість цього можна порівняти останні два t та отримати краще вирівнювання (див. Малюнок).

введіть тут опис зображення


А, аргумент зверху вниз для проблеми "знизу вгору". Приємно!
Рафаель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.