Висловлення довільної перестановки у вигляді послідовності операцій (вставити, перемістити, видалити)


9

Припустимо, у мене дві струни. Назвіть їх і . Жоден рядок не має повторених символів.AB

Як я можу знайти найкоротшу послідовність операції вставлення, переміщення та видалення, яка перетворює в , де:AB

  • insert(char, offset)вставки charв заданому offsetрядку
  • move(from_offset, to_offset)переміщує персонажа, який знаходиться в даний момент у зміщенні, from_offsetна нове положення, щоб він змістивсяto_offset
  • delete(offset) видаляє символ у offset

Приклад програми: Ви робите запит до бази даних та показуєте результати на своєму веб-сайті. Пізніше ви повторно запитуєте до бази даних і виявляєте, що результати змінилися. Ви хочете змінити те, що знаходиться на сторінці, щоб відповідати тому, що зараз знаходиться в базі даних, використовуючи мінімальну кількість DOM-операцій. Є дві причини, чому ви хочете отримати найкоротшу послідовність операцій. По-перше, ефективність. Коли змінюється лише кілька записів, ви хочете переконатися, що ви виконуєте а не \ mathcal {O} (n) DOM-операції, оскільки вони дорогі. По-друге, правильність. Якщо елемент перемістився з однієї позиції в іншу, потрібно перемістити пов'язані вузли DOM за одну операцію, не руйнуючи їх і відтворюючи їх. Інакше ви втратите стан фокусу, вмісту елементів тощо.O(1)O(n)<input>

Відповіді:


10

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


5
Насправді, оскільки немає повторень, це дещо простіша проблема, яка називається проблемою відстані Улам. Хоча ви можете використовувати алгоритм редагування відстаней, існують і більш швидкі методи, орієнтовані на цю відстань: mit.edu/~andoni/papers/ulamSublinear.pdf
Suresh

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