Dati alcuni frammenti di stringa, vorrei trovare la stringa singola più corta possibile ("stringa di output") che contiene tutti i frammenti. I frammenti possono sovrapporsi nella stringa di output.
Esempio:
Per i frammenti di stringa:
BCDA
AGF
ABC
La seguente stringa di output contiene tutti i frammenti ed è stata creata aggiungendo in modo ingenuo:
BCDAAGFABC
Tuttavia, questa stringa di output è migliore (più corta), poiché impiega sovrapposizioni:
ABCDAGF
^
ABC
^
BCDA
^
AGF
Sto cercando algoritmi per questo problema. Non è assolutamente importante trovare la stringa di output strettamente più corta, ma più corta è, meglio è. Sto cercando un algoritmo migliore dell'ovvio ingenuo che provi ad aggiungere tutte le permutazioni dei frammenti di input e rimuovere le sovrapposizioni (che sembrerebbero NP-Complete).
Ho iniziato a lavorare su una soluzione e si sta dimostrando piuttosto interessante; Mi piacerebbe vedere cosa potrebbero inventare gli altri. Aggiungerò il mio lavoro in corso a questa domanda tra un po '.