Ich habe nach einem fortgeschrittenen Levenshtein-Distanzalgorithmus gesucht, und the best I have found so far ist O (n * m), wobei n und m die Längen der beiden Strings sind. Der Grund, warum der Algorithmus in diesem Maßstab ist, weil der Raum, keine Zeit, mit der Schaffung einer Matrix der beiden Strings wie diese:Levenshtein Distanzalgorithmus besser als O (n * m)?
Gibt es einen öffentlich zugänglichen levenshtein Algorithmus Was ist besser als O (n * m)? Ich bin nicht abgeneigt, auf fortgeschrittene Informatikpapiere & Forschung zu schauen, aber war nicht in der Lage, etwas zu finden. Ich habe eine Firma gefunden, Exorbyte, die angeblich einen super-fortgeschrittenen und superschnellen Levenshtein-Algorithmus entwickelt hat, aber das ist natürlich ein Geschäftsgeheimnis. Ich baue eine iPhone App, die Levenshtein Entfernungsberechnung verwenden möchte. There is an objective-c implementation available, aber mit der begrenzten Menge an Speicher auf iPods und iPhones, würde ich gerne einen besseren Algorithmus finden, wenn möglich.
Ich benutze dies für die DNA-Ausrichtung; Wir prüfen zuerst die Länge der Sequenzen, da die Logik zum Aktualisieren der Ukkonen-Barriere schwerer ist als das Berechnen des gesamten Arrays. Werfen Sie auch einen Blick auf "Time Warps, String Edits und Macromolecules: Die Theorie und Praxis des Sequenzvergleichs" für weitere Details. – nlucaroni
Das Originalpapier für den Ukkonen Approximate String Matching Algorithm ist http://www.cs.helsinki.fi/u/ukkonen/InfCont85.PDF. – nlucaroni
Eigentlich brauchen Sie die letzten zwei Zeilen der Matrix nicht. Die letzte Zeile plus die vorherige Zahl in der aktuellen Zeile ist ausreichend. Beachten Sie auch, dass die Implementierung von Levenshtein auf diese Weise wesentlich schneller ist als die Verwendung der vollständigen Matrix, wahrscheinlich aufgrund von CPU-Caching. – larsga