Быстро сравните строку с коллекцией в Java - PullRequest
5 голосов
/ 04 февраля 2012

Я пытаюсь вычислить расстояния редактирования строки относительно коллекции, чтобы найти наиболее близкое соответствие. Моя текущая проблема заключается в том, что коллекция очень большая (около 25000 предметов), поэтому мне пришлось сузить набор до строк одинаковой длины, но это все равно только сузило бы его до нескольких тысяч строк, и это все еще очень медленно. Существует ли структура данных, которая позволяет быстро искать похожие строки, или есть другой способ решить эту проблему?

Ответы [ 3 ]

8 голосов
/ 04 февраля 2012

Похоже, BK-дерево может быть тем, что вы хотите. Вот статья, обсуждающая их: http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees. A quick Google дает некоторые реализации Java.

6 голосов
/ 04 февраля 2012

Автоматы Левенштейна позволяют быстро выбирать набор слов из большого словаря так, чтобы они находились в пределах заданного расстояния Левенштейна от данного слова.

См .: Шульц К., Михов С. (2002) Быстрая коррекция строки с помощью Левенштейна-автомата .

2 голосов
/ 04 февраля 2012

Если ваши критерии для «похожих» определяют общий порядок, вы должны иметь возможность определить Comparator и использовать TreeSet для поиска ближайших совпадений (например, с использованием методов потолка и пола).

...