Найдовший повторний (розсіяний) наступ у струні


26

Неформальна постановка проблеми:

Враховуючи рядок, наприклад , ми хочемо пофарбувати деякі букви в червоний колір, а деякі - в синій (а деякі зовсім не такі), щоб читати лише червоні ліворуч зліва направо - такий же результат, як і читання лише синіх літер.ACCABBAB

У прикладі ми можемо їх пофарбувати так:ACCABBAB

Отже, ми кажемо, що є повторною сукупністю . Це також найдовша повторювана послідовність (що легко перевірити).A C C A B B A BCABACCABBAB

Чи можемо ми обчислити найбільш довго повторювані підряди ефективно?

Формальне запитання:

Чи важко визначити NP для рядка і , чи існує в рядку повторне підряд довжини ?kkk

  • Якщо так: яку проблему можна звести до цієї проблеми?
  • Якщо ні: що таке ефективний алгоритм? (очевидно, що цей алгоритм може бути використаний для обчислення найбільш тривалої послідовності)

Питання про бонус:

Чи завжди їх буде повторне підряд довжиною якщо розмір алфавіту обмежений постійною?n/2o(n)

(Відомо, що це стосується двійкових алфавітів.)

Редагувати 2: Від'ємна відповідь на питання про бонус вже відома алфавітам розміром не менше . Насправді для алфавітів розміром Σ існують рядки з найдовшими повторюваними послідовностями довжиною просто O (n · Σ ^ {- 1/2}) . Випадкових рядків достатньо, щоб це показати. Результат вже існував, але я його не помітив.5ΣO(n·Σ1/2)

Редагувати: Примітка:

Деякі люди мають на увазі «підрядку», коли кажуть «підряд». Я не. Це не проблема пошуку підрядків двічі.


Секти, дякую. Ви маєте рацію: мій перший коментар був помилковим; Зараз я його видалив. З іншого боку, мій залишився коментар буде говорити про несуміжних підпослідовності. Якщо зафіксовано, є спосіб вирішити вашу проблему (із суміжними послідовностями, дозволеними неперекриваються) за час . Кожна підпрограма dp відслідковує показники всіх червоних літер та всіх синіх літер, вибраних до цього часу. Це, мабуть, нецікаво, оскільки це не говорить нам про те, що відбувається, коли є частиною вхідних даних. O ( n 2 k + 2 ) kkO(n2k+2)k
DW

@DW Чому на цю модифікацію найдовшого загального підпорядкування не можна ефективно відповісти на формальне питання ? Можливо, мені чогось не вистачає, і хтось може мені прояснити.
Брайс Кілле

@BryceKille, я не знаю; можливо, може. Якщо ви придумали, як це зробити, я сподіваюся, що ви напишете відповідь!
DW

Відповіді:


-2

Це можна вирішити в Росії поліномний часпобудувавши графік де кожен вузол являє собою точку у деякому повторюваному підпорядкуванні таким чином, що . Край між вузлами і означає, що може бути продовжено щоб утворити повторну послідовність довжиною 2.( i , j ) S S [ i ] = S [ j ] u v u vG(i,j)SS[i]=S[j]uvuv

1. Знайти вузли. Це можна зробити за час, побудувавши відсортований список індексів для кожного символу , а потім перерахувавши унікальні пари. Не більше вузлів.c m = n 2O(n2)cm=n2

2. Знайдіть ребра. Це займає час , щоб перевірити , якщо вузол може бути продовжений вузлом , так що з урахуванням всіх пар , цей крок займає час.u v ( u , v ) O ( m 2 )O(1)uv(u,v)O(m2)

3. Зауважте, що найдовший шлях у може бути неправдивим повторним підпорядком. Розглянемо шляхи та . Якщо існує край то є дійсним повторним підпорядкуванням довжини 3. Тому потрібен час щоб знайти всі повторювані послідовності довжини 3. У загальному випадку потрібно перевірити, чи є два дійсні шляхи лінійним часом. довжини можна об'єднати у дійсний шлях довжиною .a b b c a c a b c O ( m 4 ) n n + 1GabbcacabcO(m4)nn+1

4. Повторіть крок 3, поки більше не знайдені шляхи.


Хм. Занадто швидко. На кроці 3 кількість подальших розглянутих підробок стає все більшою та більшою. Тож це не многочлен.
noplogist

1
Ласкаво просимо на CS.SE і дякуємо за спробу вирішити цю проблему! Боюся, я не розумію вашого алгоритму. Що таке крок 3? Все, що я бачу в "3." Деякі декларативні твердження / спостереження, але я не бачу процедурних конкретизацій того, що алгоритм повинен робити. Крім того, я не бачу, що це означає повторити крок 3, або обґрунтування вашої заяви про те, що часу достатньо. Наступний ваш коментар звучить так, ніби ви більше не вірите, що ваша відповідь правильна. Якщо так, то краще буде видалити відповідь, щоб уникнути плутанини. O(nnm2)
DW

Ви завжди можете скасувати видалення або опублікувати нову відповідь, якщо згодом з’ясуєте відповідь.
DW

DW, дякую. Вхід на етап 3 - це всі повторювані підряди довжини n, а вихід - всі повторювані підряди довжиною n + 1. Я вважаю, що алгоритм є правильним, але це не поліноміальний алгоритм часу. Зараз я позначив вимоги, які вважаю неправильними.
noplogist

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