Sto cercando un'implementazione efficiente (spaziale) di un algoritmo LCS da utilizzare in un programma C++. Gli input sono due sequenze di accesso casuale di interi.
Attualmente sto usando l'approccio di programmazione dinamica dalla pagina di wikipedia su LCS. Tuttavia, questo ha il comportamento di O (mn) nella memoria e nel tempo e muore su di me con errori di memoria insufficienti per input più grandi.
Ho letto sull'algoritmo di Hirschberg, che migliora considerevolmente l'utilizzo della memoria, Hunt-Szymanski, Masek e Paterson. Dal momento che non è banale implementarli, preferirei provarli sui miei dati con un'implementazione esistente. Qualcuno sa di una tale biblioteca? Immagino poiché gli strumenti di diff di testo sono piuttosto comuni, dovrebbero esserci alcune librerie open source in giro?Libreria di algoritmi di sequenziamento comune più lunga efficiente?
risposta
Durante la ricerca di cose del genere, prova scholar.google.com. È molto meglio trovare opere accademiche. È apparso http://www.biotec.icb.ufmg.br/cabi/artigos/seminarios2/subsequence_algorithm.pdf questo documento, un "rilevamento degli algoritmi delle sottosequenze più lunghe".
Rancore +1 perché l'OP vuole davvero implementazioni di libreria di detti algoritmi, non descrizioni. Ma probabilmente una carta utile comunque. –
Inoltre sarebbe utile conoscere la data di pubblicazione e altri dettagli. –
Non C++ ma Python, ma penso che sia utilizzabile.
Hirschberg's Algorithm incorpora un implementazione JavaScript: quasi C.
- 1. Successione palindromica comune più lunga
- 2. Selezionare TimeRange più lunga comune
- 3. Sottostringa comune più lunga da più di due stringhe - Python
- 4. Libreria di raccolte primitive Java più efficiente
- 5. SQLCLR Estensioni di comunità o libreria comune
- 6. Come trovare la sottostringa comune più lunga usando gli alberi?
- 7. Come trovare la sottostringa comune più lunga usando C++
- 8. Libreria .NET per algoritmi di testo?
- 9. Quale libreria di algoritmi genetici/programmazione usi?
- 10. Trovare la sottostringa comune più lunga in un set di dati di grandi dimensioni
- 11. Come determinare la porzione più lunga simile di più stringhe?
- 12. Quale libreria Amazon S3 .NET è più utile ed efficiente?
- 13. Esistono algoritmi più veloci di Dijkstra?
- 14. Algoritmo di ordinamento stringa efficiente
- 15. Il modo più efficiente per generare una stringa veramente lunga (decine di megabyte) in JS
- 16. Algoritmo di teoria dei grafi efficiente per gli algoritmi di teoria dei grafi
- 17. Più piccole query rispetto a una singola query lunga. Qual è più efficiente?
- 18. soluzione ricorsiva di sottostringa palindromica più lunga
- 19. problema di sottostringa comune più lungo
- 20. Ottenere il colore più comune di un'immagine
- 21. Trovare il colore più comune di un'immagine
- 22. Lunghezza di parola più lunga in un elenco
- 23. Applicazioni della sottosquadra crescente più lunga
- 24. Algoritmi di compressione dati
- 25. Trova coppia più comune di caratteri in una stringa
- 26. Come funziona il sequenziamento applicativo su un elenco di funzioni?
- 27. più lunga sottostringa che appare n volte
- 28. Algoritmi di grafi incrementali
- 29. ArrayList ordinamento sequenza più lunga
- 30. allineamento in parola più lunga
Sei interessato nel reale sottosequenza più lunga comune o semplicemente la sua lunghezza? – IVlad
Ho bisogno della sequenza effettiva. – BuschnicK
Siamo rimasti delusi dal fatto che alcune ricerche veloci sul web non hanno rivelato nulla di particolarmente utile (un sacco di implementazioni ad hoc per 'char' in C, ma niente con la velocizzazione dello spazio lineare di Hirschberg o il tipo di elemento basato su C++). Se trovi (o crei: D) qualcosa, per favore aggiorna! –