Se forma una mezcla de dos cadenas intercalando los caracteres en una nueva cadena, manteniendo los caracteres de cada cadena en orden. Por ejemplo, MISSISSIPPI
es una combinación de MISIPP
y SSISI
. Permítanme llamar a un cuadrado de cadena si es una combinación de dos cadenas idénticas. Por ejemplo, ABCABDCD
es cuadrado, porque es una combinación de ABCD
y ABCD
, pero la cadena ABCDDCBA
no es cuadrada.
¿Existe un algoritmo rápido para determinar si una cadena es cuadrada o es NP-hard? El obvio enfoque de programación dinámica no parece funcionar.
Incluso los siguientes casos especiales parecen ser difíciles: (1) cadenas en las que cada carácter aparece como máximo cuatro seis veces, y (2) cadenas con solo dos caracteres distintos. Como señala Per Austrin a continuación, el caso especial en el que cada personaje aparece como máximo cuatro veces se puede reducir a 2SAT.
Actualización: este problema tiene otra formulación que puede facilitar la prueba de dureza.
Considere una gráfica G cuyos vértices son los enteros 1 a n; identifique cada borde con el intervalo real entre sus puntos finales. Decimos que dos bordes de G están anidados si un intervalo contiene adecuadamente el otro. Por ejemplo, los bordes (1,5) y (2,3) están anidados, pero (1,3) y (5,6) no lo están, y (1,5) y (2,8) no lo están. Una coincidencia en G no está anidada si no hay ningún par de aristas anidado. ¿Existe un algoritmo rápido para determinar si G tiene una coincidencia perfecta no anidada, o ese problema es NP-difícil?
Desarmar una cadena es equivalente a encontrar una coincidencia perfecta no anidada en una unión disjunta de camarillas (con bordes entre caracteres iguales). En particular, deshacer una cadena binaria es equivalente a encontrar una coincidencia perfecta no anidada en una unión disjunta de dos camarillas. Pero ni siquiera sé si este problema es difícil para los gráficos generales, o fácil para cualquier clase interesante de gráficos.
Existe un algoritmo de tiempo polinómico fácil para encontrar coincidencias perfectas sin cruzamiento .
Actualización (24 de junio de 2013): ¡El problema está resuelto! Ahora hay dos pruebas independientes de que identificar cadenas cuadradas es NP-complete.
En noviembre de 2012, Sam Buss y Michael Soltys anunciaron una reducción de 3 particiones , lo que demuestra que el problema es difícil incluso para las cadenas sobre un alfabeto de 9 caracteres. Consulte "Desarmar un cuadrado es NP-Hard ", Journal of Computer System Sciences 2014.
En junio de 2013, Romeo Rizzi y Stéphane Vialette publicaron una reducción del problema de subsecuencia común más largo . Consulte " Acerca del reconocimiento de palabras que son cuadrados para el producto aleatorio ", Proc. 8º Simposio internacional de informática en Rusia , Springer LNCS 7913, pp. 235–245.
También hay una prueba más simple de que encontrar coincidencias perfectas no anidadas es NP-difícil, debido a Shuai Cheng Li y Ming Li en 2009. Ver " Sobre dos problemas abiertos de patrones de 2 intervalos ", Theoretical Computer Science 410 (24–25 ): 2410–2423, 2009.