Перестановка двух строк формируется путем встраивания символов в новую строку, сохраняя символы каждой строки в порядке. Например, 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.