У меня достаточно большой набор строк (скажем, 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: Возможно, имена не были таким хорошим примером, как я сначала подумал. В качестве отправной точки я думаю, что могу предположить, что в данных, с которыми я буду работать, небольшое изменение в строке не заставит ее перейти из одной группы в другую.