Я попробую ...
Есть задача нечёткого поиска - с ней разобрались, всё OK !
Теперь решаем задачу сопоставления всех записей в списке, что собственно и делает предложенный алгоритм.
Т.е. для каждой записи в списке расчитывается процент схожести с остальными и отбираем выше заданного процента.
Но в Вашем варианте идёт просто последовательный перебор записей с расчётом процентам соответствия от
максимального кол-ва триграмм ... что в общем случае неверно.
Рассмотрим классический пример.
--------------------------------------------
- Сравниваем 'word' и 'two words'.
- Триграммы: {" w"," wo","wor","ord","rd "} и {" t"," tw","two","wo "," w"," wo","wor","ord","rds","ds "}
- совпадают 4 триграммы {" w"," wo","wor","ord"} и правильный процент схожести 4 / 5 = 0.8
- Но для этого нужно всегда искать кол-во совпадений КОРОТКОЙ триграммы в ДЛИННОЙ и делить на кол-во триграмм в КОРОТКОЙ.
Независимо от того, в каком порядке идут записи для сравнения. А в алгоритме сравнение в порядке следования записей и всё.
P/S: И можно оптимизировать сам алгоритм, уменьшив кол-во проходов - но это уже другая история.