Um embaralhamento de duas strings é formado pela intercalação dos caracteres em uma nova string, mantendo os caracteres de cada string em ordem. Por exemplo, MISSISSIPPI
é um embaralhamento de MISIPP
e SSISI
. Deixe-me chamar um quadrado de cadeia de caracteres, se for uma mistura de duas cadeias idênticas. Por exemplo, ABCABDCD
é quadrado, porque é um embaralhamento de ABCD
e ABCD
, mas a sequência ABCDDCBA
não é quadrada.
Existe um algoritmo rápido para determinar se uma string é quadrada ou é NP-difícil? A abordagem óbvia de programação dinâmica parece não funcionar.
Até os seguintes casos especiais parecem difíceis: (1) cadeias nas quais cada caractere aparece no máximo quatro seis vezes e (2) cadeias com apenas dois caracteres distintos. Como aponta Por Austrin abaixo, o caso especial em que cada personagem ocorre no máximo quatro vezes pode ser reduzido para 2SAT.
Atualização: Esse problema possui outra formulação que pode facilitar a prova de dureza.
Considere um gráfico G cujos vértices são os inteiros de 1 a n; identifique cada aresta com o intervalo real entre seus pontos finais. Dizemos que duas arestas de G estão aninhadas se um intervalo contém adequadamente o outro. Por exemplo, as arestas (1,5) e (2,3) estão aninhadas, mas (1,3) e (5,6) não, e (1,5) e (2,8) não. Uma correspondência em G não é aninhada se nenhum par de arestas estiver aninhado. Existe um algoritmo rápido para determinar se G tem uma correspondência perfeita não aninhada ou esse problema é difícil de NP?
Desembaralhar uma sequência é equivalente a encontrar uma correspondência perfeita não aninhada em uma união separada de cliques (com arestas entre caracteres iguais). Em particular, desordenar uma sequência binária é equivalente a encontrar uma correspondência perfeita não aninhada em uma união disjunta de duas panelinhas. Mas nem sei se esse problema é difícil para gráficos gerais ou fácil para qualquer classe interessante de gráficos.
Existe um algoritmo de tempo polinomial fácil para encontrar combinações sem cruzamento perfeitas .
Atualização (24/06/2013): O problema está resolvido! Agora existem duas provas independentes de que a identificação de cadeias quadradas é NP-completa.
Em novembro de 2012, Sam Buss e Michael Soltys anunciaram uma redução de 3 partições , o que mostra que o problema é difícil, mesmo para cadeias de caracteres com um alfabeto de 9 caracteres. Veja "Desembaralhar um quadrado é NP-Hard ", Journal of Computer System Sciences 2014.
Em junho de 2013, Romeo Rizzi e Stéphane Vialette publicaram uma redução do maior problema de subsequência comum . Consulte " Reconhecendo palavras que são quadrados para o produto aleatório ", Proc. 8º Simpósio Internacional de Ciência da Computação na Rússia , Springer LNCS 7913, pp. 235-245.
Há também uma prova mais simples de que encontrar combinações perfeitas não aninhadas é difícil para o NP, devido a Shuai Cheng Li e Ming Li em 2009. Consulte " Sobre dois problemas em aberto de padrões de 2 intervalos ", Theoretical Computer Science 410 (24–25 ): 2410-2323, 2009.