Найкоротша загальна суперрядка: знайдіть найкоротший рядок, який містить усі задані фрагменти рядків


12

З огляду на деякі фрагменти рядків, я хотів би знайти найкоротший можливий єдиний рядок ("рядок виводу"), який містить усі фрагменти. Фрагменти можуть накладатися один на одного у вихідному рядку.

Приклад:

Для фрагментів рядків:

BCDA
AGF
ABC

Наступний вихідний рядок містить усі фрагменти і був зроблений шляхом наївного додавання:

BCDAAGFABC

Однак цей вихідний рядок кращий (коротший), оскільки він використовує перекриття:

ABCDAGF
^
ABC
 ^
 BCDA
    ^ 
    AGF

Я шукаю алгоритми цієї проблеми. Не зовсім важливо знайти строго найкоротший вихідний рядок, але чим коротше, тим краще. Я шукаю алгоритм кращий, ніж очевидний наївний, який би спробував додати всі перестановки вхідних фрагментів і видалити накладення (який, здавалося б, є NP-Complete).

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


3
Здається, проблема не є повною. Якщо це так, ви не зможете знайти поліноміальний алгоритм для визначення найкоротшого рядка, але можуть бути поліноміальні алгоритми, які дають приблизні (не найкоротші можливі) рішення.
superM

3
Це повідомлення про блог щодо NP-Complete є приємним: codinghorror.com/blog/2008/11/…
окулус

Блог справді приємний, я читав його весь час)))
superM

@superM це схоже досить , щоб комівояжер (кожен рядок міста і вартість між містами = деяким числом-перекриттям)
тріскачками виродка

@ratchet freak, це _ ви можете дати невелику вартість між містами, якщо у них більше спільних листів, і найбільша вартість, коли у них взагалі немає спільного листа
superM

Відповіді:


14

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

"Жадібні" алгоритми прийнято вважати найефективнішими (як, наприклад, вони мають найменш-поганий найгірший випадок).

Прочитайте статтю Алгоритми апроксимації для найкоротшої загальної задачі про суперструнну Джонатана Тернера для отримання додаткової інформації.



Хм, зауважте, що перше посилання в моєму коментарі трохи вище стосується надмірностей, а не суперстригів! Мабуть, наслідком не потрібно, щоб усі символи послідовності були суміжними.
окулус

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