He estado buscando un algoritmo avanzado de distancia levenshtein, y the best I have found so far es O (n * m) donde n y m son las longitudes de las dos cadenas. La razón por la que el algoritmo es a esta escala es por falta de espacio, no el tiempo, con la creación de una matriz de las dos cadenas como este:Levenshtein Algoritmo de distancia mejor que O (n * m)?
¿Existe un algoritmo levenshtein a disposición del público que es mejor que O (n * m)? No soy reacio a buscar trabajos avanzados de informática & investigación, pero no he podido encontrar nada. Encontré una compañía, Exorbyte, que supuestamente ha construido un algoritmo Levenshtein súper avanzado y súper rápido, pero por supuesto es un secreto comercial. Estoy construyendo una aplicación para iPhone en la que me gustaría usar el cálculo de distancia de Levenshtein. There is an objective-c implementation available, pero con la cantidad limitada de memoria en iPods y iPhones, me gustaría encontrar un mejor algoritmo si es posible.
Lo uso para la alineación del ADN; Primero verificamos la longitud de las secuencias, ya que la lógica para actualizar la barrera Ukkonen es más pesada que el cálculo completo de la matriz. Además, eche un vistazo a "Time Warps, String Edits y Macromolecules: The Theory and Practice of Sequence Comparison" para obtener más detalles. – nlucaroni
El documento original para el Algoritmo de coincidencia de cadenas aproximadas de Ukkonen es http://www.cs.helsinki.fi/u/ukkonen/InfCont85.PDF. – nlucaroni
En realidad, no necesita las dos últimas filas de la matriz. La última fila, más el número anterior en la fila actual, es suficiente. También tenga en cuenta que implementar Levenshtein de esta manera es significativamente más rápido que usar la matriz completa, probablemente debido al almacenamiento en caché de la CPU. – larsga