Наскільки важко перемотати струну?


117

Переміщення двох рядків утворюється шляхом перекреслення символів у новий рядок, зберігаючи символи кожної рядки в порядку. Наприклад, MISSISSIPPIє перетасування MISIPPта SSISI. Дозвольте мені назвати квадрат рядка, якщо це перетасування двох однакових рядків. Наприклад, ABCABDCDє квадрат, тому що це перетасовка ABCDі ABCD, але рядок ABCDDCBAне є квадратом.

Чи є швидкий алгоритм для визначення того, чи є рядок квадратним, чи це NP-жорстко? Очевидний динамічний підхід до програмування, здається, не працює.

Навіть такі особливі випадки здаються важкими: (1) рядки, в яких кожен символ з’являється не більше чотирьох шести разів, і (2) рядки з лише двома різними символами. Як зауважує Пер Австрін нижче, особливий випадок, коли кожен символ трапляється не більше чотирьох разів, можна зменшити до 2SAT.


Оновлення: Ця проблема має ще одну рецептуру, яка може полегшити доказ твердості.

Розглянемо графік G, вершинами якого є цілі числа від 1 до n; ідентифікуйте кожен край з реальним інтервалом між його кінцевими точками. Ми говоримо, що два ребра G вкладені, якщо один інтервал належним чином містить інший. Наприклад, ребра (1,5) та (2,3) вкладені, але (1,3) та (5,6) - ні, а (1,5) та (2,8) - ні. Збіг у G не вкладений, якщо не вкладено жодної пари ребер. Чи є швидкий алгоритм, щоб визначити, чи G має вкладене ідеальне узгодження, чи це проблема NP-жорстка?

  • Розміщення рядка еквівалентно знаходженню вкладеного ідеального узгодження у розрізненому об'єднанні кліків (з ребрами між рівними символами). Зокрема, розгортання бінарного рядка еквівалентно знаходженню вкладеного ідеального узгодження у розрізненому об'єднанні двох кліків. Але я навіть не знаю, чи ця проблема є складною для загальних графіків чи легкою для будь-яких цікавих класів графіків.

  • Існує простий алгоритм поліноміальний час , щоб знайти ідеальний непро- перетину паросполучення.


Оновлення (24 червня 2013 р.): Проблема вирішена! Зараз існує два незалежних докази того, що ідентифікація квадратних рядків не є повною NP.

Існує також більш просте доказ , що знаходження невложенних зроблене паросполучення є NP-важкою, з - за Шуай Чен Лі і Мін Лі в 2009 році приведені в розділі « Про двох відкритих завданнях 2-інтервальних моделей », теоретична інформатика 410 (24-25 ): 2410–2423, 2009.


2
Хіба послідовність не лише A000984, "кількість можливих значень 2 * n бітового двійкового числа, для якого половина бітів увімкнена, а половина відключена"?
Травіс Браун

5
@Travis, якщо я не розумію: Для n = 4 10000111 - це бінарне дворядне число 2 * n, для якого половина бітів включено, а половина вимкнено, але це не квадрат, як визначено. Дотримуючись цієї логіки, оскільки квадрати є суворим підмножиною множини, яка генерує A000984, значення для квадратів над двійковим алфавітом повинні бути нижчими при рівних індексах через послідовність - ні?
Даніель Апон

1
Спостереження: використовуючи формалізм графа, нехай 2n - кількість вершин у G. Нехай G ′ - графік, отриманий з лінійного графіка G, додаючи ребра між вершинами, що відповідають вкладеним ребрам G. Задача запитує, чи має G ' незалежний набір розміру n. Існують різні класи графіків, де максимальний незалежний набір може бути обчислений полиномним часом. Якщо ми підемо цим шляхом, виникає питання: якими хорошими властивостями володіє G ′? (детальніше)
Tsuyoshi Ito

2
@Radu: Я не думаю, що частка квадратів до неквадратів (над двійковими алфавітами) збігається до 1/3. Я зробив кілька моделей Монте-Карло, які свідчать про повільну конвергенцію до 1/2. Отже, в межі по суті всі двійкові рядки з парними числами 0 і 1 є квадратами. Це мене дивно, і може бути використане в алгоритмі. Для великих алфавітів частка квадратів, схоже, швидко сходить до 0.
Мартін Бергер

8
Оскільки це питання згадується в сьогоднішній публікації щоденника, давайте подивимось, чи зможемо ми отримати певний інтерес до вирішення цієї проблеми. Минуло рік, як це питання було висунуто, і ми з тих пір здобули багато нових користувачів. Я поставив 100 запитувань за запитання.
Алекс десять Бринк

Відповіді:


66

Майклу Солтису і мені вдалося довести, що проблема визначення того, чи може рядок можна записати як квадратне перетасування, не є повною. Це стосується навіть обмеженого алфавіту із лише різними символами, хоча наше підтвердження написано для алфавіту з символами. Це питання все ще відкрите для менших алфавітів, скажімо, лише з символами. Ми не розглядали проблему під обмеженням, що кожен символ з’являється лише разів (або, загалом, постійне число разів); тож це питання залишається відкритим.9 2 67926

Доказ використовує зменшення від Розділу. Тут надто довго розміщувати повідомлення, але препринт "Непереміщення рядка -hard" доступний на наших веб-сторінках за адресою:НП3NP

http://www.math.ucsd.edu/~sbuss/ResearchWeb/Shuffle/

і

http://www.cas.mcmaster.ca/~soltys/#Papers .

Стаття опублікована в Журналі комп'ютерних системних наук:

http://www.sciencedirect.com/science/article/pii/S002200001300189X


11
Дивовижно !! (І на мій величезний полегшення, серйозно нетривіальний.)
Jeffε

15
Дякую. StackExchange був нашим джерелом для цього питання. Це чудовий ресурс!
Сем Бус

9
@SamBuss невеликий запит: поки ви цитуєте питання Джеффа, ви згадуєте лише рішення Пер Остіна в тексті. Якщо ви подивитесь на відповіді, є спосіб створити формальне цитування для відповідей (натисніть на кнопку поділитися та натисніть посилання "цитувати"). Таким чином, ви можете створити відповідне цитування і для відповіді Пер. Я лише згадую це, щоб люди, які роблять офіційний внесок на сайт, також могли отримати офіційне визнання. Дякую ! і вітаємо цю проблему
Суреш Венкат

2
@SureshVenkat. Дякую за пораду: це корисно. Я додав це до інтернет-версії статті.
Сем Бус

Проблема розпізнавання квадратне перетасувати тепер показано, що важко навіть на довічним алфавіті: sciencedirect.com/science/article/pii/S0304397519300258
a3nm

58

Для особливого випадку, який ви згадуєте, коли кожен символ з'являється не більше чотирьох разів, є просте зменшення до 2-SAT (якщо я щось не пропускаю ...), як це:

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


Приємно. Ця ж ідея узагальнює рядки, де кожен символ зустрічається не більше шести разів, але результат - примірник 5-SAT. :-(
Jeffε

2
Ця відповідь є фаворитом для виграшу щедрості.
Jeffε

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

@Turbo Набагато запізнілий, але це не доводить проблему як NPC, оскільки 2-SAT не є NPC; це в П.
Стівен Стадницький

Чи працює це зменшення до 2-SAT, якщо розмір алфавіту не обмежений?
Мохаммед Аль-Туркистані

11

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

GeGee

GGGG

>1

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

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


Я скептично ставлюсь до другого жадібного етапу, але очищення графіка видається корисним. У початковому рядковому контексті, де графік - це неперервне об'єднання кліків, ви можете сказати що-небудь про структуру очищеного графіка? Це все-таки нерозбірлива спілка кликів? (Іншими словами, чи можете ви розділити події кожного символу у вхідному рядку, щоб символи в різних частинах не могли відповідати?)
Jeffε,

2
Для другого питання розглянемо рядок "aaaa". Прочищенням видаляє краї 1-4 і 2-3, даючи 4-х цикл. Дві варіанти другого жадібного кроку, які також були б достатніми, і що я не міг знайти жодних контрприкладів: 1) Вичищений графік має вкладене ідеальне узгодження, якщо він має ідеальну відповідність (це здається незрівнянним із жадібним кроком) . 2) У вичищеному графіку з ідеальним збігом, що не вкладається, кожен край використовується в якомусь ідеальному поєднанні, яке не вкладається (це сильніше як жадібний крок, так і перший елемент, тому його слід легше спростувати).
Пер Аврін

11

Рішення, яке ми запропонували Сем Бусс у листопаді 2012 року (показує, що розміщення квадрата в NP-hard за рахунок зменшення від 3-х розділів) є опублікованою статтею в Journal of Computer System Sciences:

http://www.sciencedirect.com/science/article/pii/S002200001300189X


2
Це дійсно повинно бути редагуванням попередньої відповіді Сема Буса, а не окремою відповіддю. Ви можете натиснути "редагувати", щоб запропонувати змінити чужу відповідь, і вашу редакцію переглянуть інші користувачі сайту.
DW

11

Ромео Різзі та Стефан Віалет доказують, що розпізнавання квадратних рядків не є повним NP у своїй роботі " Про розпізнавання слів, що є квадратами для продукту перетасовування ", зменшенням від найдовшої проблеми бінарного підпорядкування. Вони заявляють, що складність розмішування бінарних рядків все ще залишається відкритою.

Ще простіший доказ того, що знаходження невкладеної ідеальної відповідності є NP-завершеною, надають Шуай Чен Лі та Мін Лі в своїй роботі " Про дві відкриті проблеми двоканальних шаблонів ". Однак вони використовують термінологію, успадковану від біоінформатики. Замість "ідеального невкладеного відповідності" вони називають його " проблемою DIS-2-IP- ". Еквівалентність між двома проблемами описана Бліном, Фертином та Віалеттою :{<,}

Проблема 2-IP-DIS- має негайне формулювання з точки зору обмежених відповідностей у загальних графах: Дано графік разом з лінійним упорядкуванням вершин , 2-IP -DIS- завдання еквівалентна знаходженню максимальної відповідності потужність в з властивістю , що для будь-яких двох різних ребер і з ні і ні{<,}GπG{<,}MG{u,v}{u,v}Mmin{π(u),π(v)}<min{π(u),π(v)}max{π(u),π(v)<max{π(u),π(v)}min{π(u),π(v)}<min{π(u),π(v)} і .max{π(u),π(v)}<max{π(u),π(v)}

Оновлення (25 лютого 2019 р.): Бульто і Віалетта показали, що проблема вирішення перемикання бінарної рядки в їх документах не є повною, визнання бінарних квадратних перетасовок є важким NP .


Я не бачу зв'язку, і не бачу, де автори стверджують, що перемішування рядка еквівалентно їх проблемі.
Суреш Венкат

2
Вони не кажуть, що це еквівалентно перемішанню; це більш загальна проблема.
Jeffε

@SureshVenkat Я відредагував свою відповідь, сподіваюсь, це зрозуміліше. По суті, те, що вони говорять у виносці, - це те, що будь-які два ребра у збігу ( ) не є вкладеними. M
Мохаммед Аль-Туркстані

У фактично опублікованій версії еквівалентність вказана на сторінці 320. books.google.com/…
Мохаммед Аль-Туркстаній

Відредаговано, щоб поховати лейд .
Jeffε

9

Чи допомагає це?

http://users.soe.ucsc.edu/~manfred/pubs/J1.pdf


7
Приємна довідка. Важко зрозуміти, як результати стосуватимуться моєї проблеми, але, можливо, методи допоможуть. Неважко сказати, чи заданий рядок X є перетасуванням двох копій іншого заданого рядка Y. Доданий папір доводить, що NP-важко вирішити, чи заданий рядок X є перетасуванням будь-якої кількості копій іншого заданого рядка Y. Я хочу знати, чи заданий рядок X є перетасуванням двох примірників
ДЕЯКОЇ НЕВІДОМЛЕНОЇ

5

НІКОЛИ НЕ РОБИТИ, ЦЕ ВІДПОВІДЬ НЕ БУДЕ. Він не вдається при введенні "AABAAB": жадібно збігаючи перші два A один з одним, унеможливлює співставлення решти символів. Я залишаю це, а не видаляю це, щоб допомогти іншим уникнути тієї ж помилки.

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

Проведіть петлю через кожне положення i у вхідному рядку, i = 0, 1, 2, ... n. Для кожної позиції i перевірте, чи вже ця позиція була узгоджена з якоюсь попередньою позицією в рядку. Якщо ні, порівнюйте його з рівним символом, який з’являється після останнього вже зібраного положення і в іншому випадку є якомога раніше в рядку. Якщо для деякого символу не знайдено відповідності, оголосити, що вхід не є квадратом; в іншому випадку це набір символів у першій парі кожного матчу.

Ось він у Python:

def sqrt (S):
    збіги = []
    i, j = 0, 0
    а i <len (S):
        якщо j <len (сірники) та збіги [j] [1] == i:
            i + = 1
            j + = 1
            продовжувати
        якщо відповідає:
            k = сірники [-1] [1] + 1
        ще:
            k = 1
        поки k <len (S) і S [k]! = S [i]:
            k + = 1
        якщо k> = len (S):
            підвищити виняток ("Не квадрат")
        match.append ((i, k))
        i + = 1
    повернути "" .join (S [a] для a, b в матчах)

print sqrt ("ABCABDCD")

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


4
Був там. Зробив це. :-)
Джефф

5

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


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

Почну з дещо іншої проблеми. Враховуючи графік , краї якого пофарбовані кольорами, а вершини позначені від до , чи існує неперервна відповідність, яка містить рівно один край кожного кольору? Ця проблема здається складною для NP (аргумент для цього є повним і простим - якщо я чогось не пропускаю). Скорочення показує графік, який є непересічним об'єднанням кліків.Gk1n

Зниження відбувається за допомогою Disjoint Factors - проблеми, повної NP, введеної в [1]. Екземпляр невід'ємних факторів задається рядком над алфавітом розміром , і питання полягає в тому, чи існують непересічні фактори, де фактор - це підряд, який починається і закінчується тією ж буквою; і два фактори перешкоджають, якщо вони не перетинаються в рядку (зауважте, що "вкладення", зокрема, також заборонено).kk

Дозвольте мені позначити через , елементи -розмірного алфавіту, пов'язані з екземпляром Disjoint Factors.a1,,akk

Враховуючи екземпляр неперервних факторів, тобто, скажімо, рядок довжиною , створіть графік, який має вершин з мітками вершин від до . Додайте ребро між вершинами і якщо відповідні позиції мають однакову літеру (скажімо, ), а також пофарбуйте край кольором .nn1nuvai(u,v)i

Доказ зменшення по суті випливає з визначень. Враховуючи непересічні фактори, ми, очевидно, маємо -розрізнення кольорового зіставлення, просто підбираємо ребра, задані діючими факторами, і легко помітити, що отримана відповідність є одночасно і різнобарвною, і непересічною. І навпаки, якщо є -відмінна барвиста відповідність, то у нас є k непереможних коефіцієнтів, по одному на кожну букву, тому що відповідність є кольоровою (а значить, вибирає один фактор на кожну букву) і є непересічною (тому відповідні чинники не перетинаються ).kkk

Щоб позбутися від кольорів і зробити відповідність ідеальною, хоч і в можливо більшому діапазоні , внесіть такі зміни до створеного таким чином графіку:

Нехай позначає підмножину вершин, які мають мітки, які є позиціями, пов'язаними з літерою . Якщо у є вершини , то додайте нові вершини та повний двосторонній графік між та нещодавно доданими вершинами. Повторіть, звичайно, для кожного листа. a U a A ( A - 2 ) U aUaaUaA(A2)Ua

Грубо кажучи, якщо графік повинен викликати ідеальну відповідність, щойно введені вершини повинні відповідати вершинам , і вони будуть насичувати всі вершини, крім пари, і край між вершинами, що залишилися, буде відповідати коефіцієнту, що не відповідає . Я не опрацював числа, які потрібно пов’язати з нещодавно доданими вершинами ... зауважте, що вони повинні бути такими, щоб отримане співставлення було роз'єднаним. Я просто відчуваю (читайте: сподіваюся), що це "можна зробити"!Ua

[1] Про проблеми без поліноміальних ядер , Ганс Л. Бодлендер, Родні Г. Дауні, Майкл Р. Фелдс та Денні Гермелін, Дж. Обчислювальна техніка. Сист. Наук.


3
Я збентежений. Чи не (1,2), (3,4), (5,6), ..., (n-1, n) ТІЛЬКО ідеальне неперервне співпадіння?
Jeffε

Після переходу до сценарію "ідеального узгодження" я змінюю конструкцію і додаю багато нових вершин (зауважте, що я додаю | U_a | -2 нові вершини для кожного a в алфавіті). Таким чином, n підірветься відповідно - приблизно до 2n-2k, для алфавіту розміром k. Я сподіваюся, що я зрозумів, що скорочення є неповним, оскільки я не вказав, які числа призначаються новим вершинам, але сподіваюся, що це можна продовжити без особливих труднощів. Однак я, безумовно, повинен подумати про це, перш ніж я можу сказати щось більше.
Нельдхара

1
Я думаю, що суть коментаря JeffE полягає в тому, що легко знайти ідеальну відповідність, яка не вкладається і не перетинається (або повідомляють про її відсутність), оскільки існує лише одна можливість.
Цуйосі Іто

2
Я не кажу про зміст вашої доказової ідеї, але я говорю про перше речення вашої відповіді: "Я можу подумати, чому може бути важко знайти ідеальну відповідність, яка не вкладається і не перетинається". Це завдання легко з тієї причини, яку написав JeffE.
Цуйосі Іто

2
Без обмеження забарвлення, накладеного проблемою фактора роз'єднання (щонайменше одного краю кожного кольору), знайти максимальне неперервне співпадіння також легко.
Jeffε

1

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


Пропозиція з використанням Range конкатенації граматик (RCGs см http://hal.inria.fr/inria-00073347/en/ ): Я «м був під враженням , що таке просте ГРС розпізнає ваш" перемішуються квадратів "мову над кінцевим алфавіт , ЗМІНЕНО після першого коментаря Раду: , де пробігає і позначає порожній рядок.S ( X Y )Σ

S(XY)A(X,Y)(1)A(aX1,aX2Y1Y2)A(X1,Y1)A(X2,Y2)(2)A(ε,ε)ε(3)
aΣε

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

Наприклад, ось можливе виведення рядка : abcabdcd

S(abcabdcd)A(abc,abdcd)(by 1,X=abc,Y=abdcd)A(bc,bdcd)A(ε,ε)(by 2,X1=bc,Y1=bdcd,X2=Y2=ε)A(c,c)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(ε,ε)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(d,d)A(ε,ε)(by 3)A(d,d)A(ε,ε)(by 3)A(ε,ε)A(ε,ε)A(ε,ε)(by 2)3εi.e. success

Для , 0011

S(0011)A(0,011)A(ε,ε)A(1,1)A(1,1)ε

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


Чи є деривація, яка приймає S (0011) до ? (Має бути такий.)ϵ
Раду ГРИГо

Я не думаю, що так.
Серж Гасперс

Також A (10,011010) -> A (0,101) A (0,0) -> , але я вважаю, що 10011010 - це не квадрат. ϵ
Раду ГРИГо

Дякую за повернення; Я трохи змінив граматику і навіть маю невелику інтуїцію, якою вона може працювати.
Sylvain

3
Ласкаво просимо. Ось ще, для оновленої граматики :) A (00,000110) -> A (0,011) A (0,0) -> , але 00000110 - це не квадрат. Також, схоже, не існує деривації для 100110101010, яка є квадратом. ϵ
Раду ГРИГо

1

Оновлення: Як в коментарях зазначає Цуйосі Іто, цей алгоритм має експоненціальний час роботи.

Оригінальна публікація:

Ось як я програмував це в реальному світі.

Нам дається рядок S = (S [1], ..., S [n]). Для кожного префікса S_r = (S [1], ..., S [r]) існує набір {(T_i, U_i)} пар рядків, таким чином, що S_r є перетасуванням (T_i, U_i), а T_i - префікс U_i (тобто U_i 'починається з' T_i). Сам S_r - це квадрат, якщо і тільки якщо цей набір містить пару (T_i, U_i) з T_i = U_i.

Тепер нам не потрібно генерувати всі ці пари; нам просто потрібно генерувати суфікс V_i кожного рядка U_i, отриманий шляхом видалення його копії T_i. Це дозволить усунути (можливо експоненціальне) число нерелевантних дублікатів. Тепер S_r - це квадрат тоді і тільки тоді, коли цей набір суфіксів містить порожній рядок. Отже алгоритм стає:

Initialise: SuffixSet = {<empty string>} ; r = 0
Loop: while (r < n) {
  r = r + 1
  NextSuffixSet = {}
  for each V in SuffixSet {
    if (V[1] == S[r]) Add V[2...] to NextSuffixSet // Remove first character of V
    Add V||S[r] to NextSuffixSet // Append character S[r] to V
    }
  SuffixSet = NextSuffixSet
  }
Now S is a square if and only if SuffixSet contains the empty string.

Наприклад, якщо S є AABAAB:

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB, AABA}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA, AABAA}
r=6: S[r] = B; SuffixSet = {AA, BAAB, <empty string>, BB, ABAB, AABAAB}

Ми можемо відмовитись від усіх суфіксів, які перевищують половину довшого вхідного рядка, тому це спрощує:

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA}
r=6: S[r] = B; SuffixSet = {AA, <empty string>, BB}

Я запрограмував це на C ++, і він працює на всіх наведених тут прикладах. Я можу розмістити код, якщо хтось зацікавлений. Питання в тому, чи може розмір SuffixSet рости швидше, ніж поліноміально?


3
Я також спробував це, але експерименти показують, що розмір SuffixSet, схоже, зростає експоненціально в n, якщо початковий рядок (AB) ^ n.
Цуйосі Іто

1

EDIT: Це неправильна відповідь.


Сильвейн запропонував RCG, який, на жаль, не підходив до цих "перетасовок". Однак я думаю, що є такий (EDIT: не RCG, див. Коментарі Курта нижче!) , Який виглядає так:

S(Y)A(ϵ,Y)(1)A(X,ZY)A(XZ,Y)(2)A(aX,aY)A(X,Y) for every aΣ(3)A(ϵ,ϵ)ϵ(4)

Пояснення: нагадайте, що ми маємо співставляти символи, які можуть з’являтися в будь-якому місці рядка, але після того, як ми співставимо і , ми можемо відповідати лише і якщо означає ( означає лінійний пріоритет). Ідея полягає в тому, що ми розділили рядок , щоб порівняти префікси половинок. Якщо початки двох підрядків збігаються, ми можемо зменшити проблему до решти рядків . Якщо ні, ми можемо перенести частину правої частини в ліву частинуaabbabab(1,2)(3)(2)і подивіться, чи є відповідність на більш пізньому місці. Важливо, що це дозволено лише в одному напрямку!

Ось деривація для ( до RCG Sylvain):100110101010

S(100110101010)A(ϵ,100110101010)(1)A(1001,10101010)(2)A(01,101010)(3)A(011,01010)(2)A(1,010)(3)A(10,10)(2)A(ϵ,ϵ)(3)ϵ(4)

Я не розробив офіційного підтвердження того, що ця граматика дійсно фіксує саме "квадрати", але це не повинно бути занадто важким. Сильвейн вже згадував, що проблема рішення для RCG є многочленною.


Я не бачу, як це могло бути реалізовано в поліноміальний час: Якщо ви почнете з 000102030, ви можете досягти для x, рівного будь-якому з наступних рядків 123, 01230, 01203, 0012030, 01023, 0010230, 0010203, 000102030. (Так, я переглянув документ, з яким посилався Sylvain, але він мені здається всім французьким).2 3A(x,ϵ)23
Radu GRIGore

5
@DaniCL, По-друге, думка ... Чи повинні параметри в РЗС виробничих правил бути суміжними діапазонами вводу? Я не бачив того, що було чітко зазначено у визначенні в документі Boullier, але це, мабуть, саме так воно використовується. При аналізі часу виконання алгоритму синтаксичного розбору йдеться про те, що кількість можливих аргументів до пропозицій дорівнює O (n ^ 2h), де h - максимальна довільність пропозицій, а n - вхідна довжина. У вашій граматиці XZ взагалі не буде суміжним у вихідному введенні.
Курт

3
@Kurt, я думаю, ти знайшов недолік. В іншому документі ("Китайські числа, MIX, скремблювання та діапазони об'єднаних граматик") Boullier прямо зазначає: "Звичайно, тільки послідовні діапазони можна об'єднати в нові діапазони. У будь-якому PRCG, термінали, змінні та аргументи в пункті є повинен прив'язуватися до діапазонів механізмом заміщення ". Це, мабуть, означає, що моя граматика не є дійсною RCG, що сумніви Раду були розумними, і що такий підхід не працює.
DaniCL

2
@Курт правильно. Без обмеження суцільності я майже впевнений, що можу створити набір правил виробництва, які розпізнають NP-повну мову UNARY 3PARTITION. Будь-який набір невід'ємних цілих чисел може бути закодований унарним рядком мовою (1 * 0) ^ *. UNARY 3PARTITION - це набір усіх таких рядків, кодований набір яких можна розділити на 3-елементні підмножини, всі з однаковою сумою. (Див en.wikipedia.org/wiki/3-partition_problem .)
Jeffε

1
Граматика для УНАРІЯЛЬНОГО 3ЧАСТІ: S (X0Y0Z) -> A (e, X0, Y0, Z); A (W, 1X, Y, Z), A (W, X, 1Y, Z), A (W, X, Y, 1Z) -> A (W1, X, Y, Z); A (W, 0X, 0Y, 0Z) -> B (W, XYZ); В (Ш, е) -> е; B (W, X0Y0Z) -> C (W, W, X0, Y0, Z); C (W, 1V, 1X, Y, Z), C (W, 1V, X, 1Y, Z), C (W, 1V, X, Y, 1Z) -> C (W, V, X, Y, Z); C (W, e, X, Y, Z) -> B (W, XYZ)
Radu GRIGо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.