Перестановка двух строк формируется путем встраивания символов в новую строку, сохраняя символы каждой строки в порядке. Например, 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-полной.
В ноябре 2012 года Сэм Бусс и Майкл Солтис объявили о сокращении с 3 разделов , что показывает, что проблема трудна даже для строк с алфавитом из 9 символов. См. «Разыгрывание квадрата - NP-Hard », Журнал Computer System Sciences 2014.
В июне 2013 года Ромео Рицци и Стефан Виалетт опубликовали сокращение от самой длинной общей проблемы подпоследовательности . См. « О распознавании слов, являющихся квадратами для случайного произведения », Proc. 8-й Международный симпозиум по информатике в России , Springer LNCS 7913, с. 235–245.
Существует также более простое доказательство того, что поиск не вложенных совершенных соответствий является NP-трудным, благодаря Шуай Ченг Ли и Мин Ли в 2009 году. См. « О двух открытых задачах 2-интервальных паттернов », Теоретическая информатика 410 (24–25). ): 2410–2423, 2009.