Menor supercorda comum: encontre a sequência mais curta que contém todos os fragmentos de sequência

12

Dados alguns fragmentos de string, eu gostaria de encontrar a menor string possível possível ("string de saída") que contenha todos os fragmentos. Fragmentos podem se sobrepor na cadeia de saída.

Exemplo:

Para os fragmentos de cadeia:

BCDA
AGF
ABC

A seguinte sequência de saída contém todos os fragmentos e foi criada por um ingênuo anexo:

BCDAAGFABC

No entanto, essa sequência de saída é melhor (mais curta), pois emprega sobreposições:

ABCDAGF
^
ABC
 ^
 BCDA
    ^ 
    AGF

Estou procurando algoritmos para esse problema. Não é absolutamente importante encontrar a string de saída estritamente mais curta, mas quanto menor, melhor. Estou procurando um algoritmo melhor que o óbvio ingênuo que tentaria anexar todas as permutações dos fragmentos de entrada e remover sobreposições (que pareceriam ser NP-Complete).

Comecei a trabalhar em uma solução e está se mostrando bastante interessante; Eu gostaria de ver o que outras pessoas poderiam inventar. Vou adicionar meu trabalho em andamento a essa pergunta daqui a pouco.

occulus
fonte
3
O problema parece estar completo. Nesse caso, não será possível encontrar um algoritmo polinomial para determinar a menor string, mas pode haver algoritmos polinomiais que fornecem soluções aproximadas (e não as mais curtas possíveis).
superM 25/09/12
3
Esta publicação do blog sobre o NP-Complete é legal: codinghorror.com/blog/2008/11/…
occulus
O blog é muito bom, eu leio o tempo todo))))
superM
@superM isso é suficiente semelhante ao caixeiro viajante (cada corda uma cidade e custam entre cidades = algum número sobreposição)
aberração catraca
@ratchet freak, é _ você poderia dar um pequeno custo entre as cidades se elas tiverem letras mais comuns, e o maior custo quando elas não tiverem nenhuma letra comum
superM

Respostas:

14

O que você está perguntando é o problema de Menor supercorda comum, para o qual não há algoritmo que funcione para todos os casos. Mas é um problema comum (na compressão e no seqüenciamento de DNA) e vários algoritmos de aproximação são bem conhecidos.

Geralmente, os algoritmos "gananciosos" são aceitos como os mais eficazes (como no pior dos casos).

Leia o artigo Algoritmos de aproximação para o menor problema de supercorda comum de Jonathan Turner para obter mais informações.

pdr
fonte
Hmm, note que o primeiro link no meu comentário, logo acima, aborda as superssequências e não as supercordas! Uma superssequência não parece exigir que todos os caracteres em uma sequência sejam contíguos.
Occulus 25/09/12
Seu link está morto.
Majid