Declaração informal do problema:
Dada uma sequência, por exemplo, , queremos colorir algumas letras em vermelho e outras em azul (e algumas nem sequer), de modo que a leitura apenas das letras vermelhas da esquerda para a direita produz o mesmo resultado que a leitura apenas as letras azuis.
No exemplo, poderíamos pintá-los assim:
Portanto, dizemos é uma subsequência de repetição de uma . É também a subsequência repetida mais longa (fácil de verificar).
Podemos calcular as subsequências repetidas mais longas com eficiência?
Pergunta formal:
É NP-difícil decidir por uma string e algum , se existe uma subsequência repetida de comprimento na string?
- Em caso afirmativo: Qual problema pode ser reduzido para esse problema?
- Caso contrário: o que é um algoritmo eficiente? (obviamente, esse algoritmo pode ser usado para calcular a subsequência repetida mais longa)
Pergunta bônus:
Será sempre uma subsequência repetida de comprimento se o tamanho do alfabeto for limitado por uma constante?
(Isso é conhecido por alfabetos binários.)
Edição 2: a resposta negativa à pergunta sobre bônus já é conhecida por alfabetos de tamanho mínimo de . Na verdade para alfabetos de tamanho Σ , existem cadeias mais longas com subsequências repetidas de um comprimento de apenas S ( n · Σ - 1 / 2 ) . Sequências aleatórias são suficientes para mostrar isso. O resultado já existia, mas eu o ignorei.
Editar: Nota:
Algumas pessoas querem dizer "substring" quando dizem "subsequence". Eu não. Este não é o problema de encontrar uma substrings duas vezes.