У меня есть достаточно большой набор строк (скажем, 100), который имеет несколько подгрупп, характеризующихся их сходством. Я пытаюсь найти/разработать алгоритм, который бы нашел эти группы разумно эффективно.
В качестве примера скажем, что список входных данных находится слева внизу, а выходные группы - справа.
Input Output
----------------- -----------------
Jane Doe Mr Philip Roberts
Mr Philip Roberts Phil Roberts
Foo McBar Philip Roberts
David Jones
Phil Roberts Foo McBar
Davey Jones =>
John Smith David Jones
Philip Roberts Dave Jones
Dave Jones Davey Jones
Jonny Smith
Jane Doe
John Smith
Jonny Smith
Кто-нибудь знает какие-либо способы решения этой проблемы эффективно?
Стандартный метод для поиска похожих строк, по-видимому, является расстоянием Левенштейна, но я не вижу, как я могу эффективно использовать это здесь, не имея необходимости сравнивать каждую строку со всеми остальными строками в списке, а затем как-то решать на пороге разницы для определения того, находятся ли две строки в одной группе или нет.
Альтернативой может быть алгоритм, который хеширует строки до целого числа, где аналогичные строки хешируют целым числам, которые близки друг к другу на числовой строке. Я понятия не имею, какой алгоритм был бы, если бы существовал даже
Есть ли у кого-нибудь мысли/указатели?
UPDATE: @Will A: Возможно, имена были не таким хорошим примером, как я думал сначала. В качестве отправной точки я думаю, что могу предположить, что в данных, с которыми я буду работать, небольшое изменение в строке не заставит ее переходить из одной группы в другую.