Superstring comune più breve: trova la stringa più breve che contiene tutti i frammenti di stringa dati


12

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 '.


3
Il problema sembra essere NP-completo. In tal caso, non sarai in grado di trovare un algoritmo polinomiale per determinare la stringa più corta, ma potrebbero esserci algoritmi polinomiali che offrono soluzioni approssimative (non le più brevi possibili).
superM

3
Questo post sul blog su NP-Complete è carino: codinghorror.com/blog/2008/11/…
occulus

Il blog è davvero bello, l'ho letto sempre)))
superM

@superM questo è abbastanza simile al commesso viaggiatore (ogni stringa una città e costo tra le città = qualche sovrapposizione di numeri)
maniaco del cricchetto

@ratchet maniaco, è _ potresti dare un piccolo costo tra le città se hanno lettere più comuni, e il costo più grande quando non hanno alcuna lettera comune
superM

Risposte:


14

Quello che stai chiedendo è il problema più corto della Superstring comune, per il quale non esiste un algoritmo che funzioni per tutti i casi. Ma è un problema comune (nella compressione e nel sequenziamento del DNA) e diversi algoritmi di approssimazione sono ben noti.

Gli algoritmi "greedy" sono generalmente accettati come i più efficaci (come in, hanno il peggior caso peggiore).

Leggi l'articolo Algorithms di approssimazione per il più breve problema comune delle superstringhe di Jonathan Turner per ulteriori informazioni.



Hmm, nota che il primo link nel mio commento appena sopra riguarda le supersequenze e non le superstringhe! Una supersequenza non sembra richiedere che tutti i caratteri di una sequenza siano contigui.
occulus,

Il tuo link è morto.
Majid
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.