Я искал усовершенствованный алгоритм расстояния levenshtein, а the best I have found so far - это O (n * m), где n и m - длины двух строк. Причина, почему алгоритм в этом масштабе из-за пространства, а не время, при создании матрицы из двух строк, такие как этот:Алгоритм расстояния Левенштейна лучше, чем O (n * m)?
является общедоступным алгоритм там Левенштейна что лучше, чем O (n * m)? Я не прочь взглянуть на передовые статьи по информатике & исследования, но ничего не смогли найти. Я нашел одну компанию Exorbyte, которая предположительно построила супер-продвинутый и сверхбыстрый алгоритм Левенштейна, но, конечно, это коммерческая тайна. Я создаю приложение для iPhone, которое я бы хотел использовать для расчета расстояния Левенштейна. There is an objective-c implementation available, но с ограниченным объемом памяти на iPod и iPhone я хотел бы найти лучший алгоритм, если это возможно.
Я использую это для выравнивания ДНК; Сначала проверяем длину последовательностей, так как логика обновления барьера Укконена тяжелее, а затем просто вычисляет весь массив. Кроме того, взгляните на «Time Warps, String Edits и Macromolecules: The Theory and Practice of Sequence Comparison» для получения более подробной информации. – nlucaroni
Оригинальная статья для приближенного алгоритма соответствия строк Укконена: http://www.cs.helsinki.fi/u/ukkonen/InfCont85.PDF. – nlucaroni
На самом деле вам не нужны последние две строки матрицы. Последняя строка, плюс предыдущее число в текущей строке, достаточно. Также обратите внимание, что реализация Levenshtein таким образом значительно быстрее, чем использование полной матрицы, возможно, из-за кэширования процессора. – larsga