Sono stato alla ricerca di un avanzato algoritmo di distanza levenshtein, e the best I have found so far è O (n * m) dove n e m sono le lunghezze delle due stringhe. Il motivo per cui l'algoritmo è a questa scala è a causa di spazio, non il tempo, con la creazione di una matrice delle due stringhe come questa:Algoritmo di distanza di Levenshtein meglio di O (n * m)?
C'è un algoritmo Levenshtein pubblicamente disponibili che è meglio di O (n * m)? Non sono contrario alla ricerca di documenti informatici avanzati &, ma non sono riuscito a trovare nulla. Ho trovato una società, Exorbyte, che presumibilmente ha costruito un algoritmo Levenshtein super avanzato e super veloce, ma naturalmente questo è un segreto commerciale. Sto costruendo un'applicazione per iPhone che mi piacerebbe utilizzare il calcolo della distanza di Levenshtein. There is an objective-c implementation available, ma con la quantità limitata di memoria su iPod e iPhone, mi piacerebbe trovare un algoritmo migliore, se possibile.
Lo uso per l'allineamento del DNA; Controlliamo prima la lunghezza delle sequenze poiché la logica per l'aggiornamento della barriera di Ukkonen è più pesante, quindi basta calcolare l'intero array. Inoltre, dai un'occhiata a "Time Warps, String Edits e Macromolecules: The Theory and Practice of Sequence Comparison" per ulteriori dettagli. – nlucaroni
Il documento originale per l'algoritmo di corrispondenza approssimativa delle stringhe di Ukkonen è http://www.cs.helsinki.fi/u/ukkonen/InfCont85.PDF. – nlucaroni
In realtà, non sono necessarie le ultime due righe della matrice. L'ultima riga, più il numero precedente nella riga corrente, è sufficiente. Si noti inoltre che l'implementazione di Levenshtein in questo modo è significativamente più veloce rispetto all'utilizzo della matrice completa, probabilmente a causa del caching della CPU. – larsga