Найти группы связанных элементов
От: pax123  
Дата: 30.07.22 15:25
Оценка:
Всем привет!

Нужно найти в некотором наборе сущностей однозначно группы сущностей, которые сильно связаны (это не то определение про связанность в графах, а моё собственное).
У нас есть сущности — A, B, C, D, E, F, G, H, I, J..., есть функция соответствия между ними — match(A,B)==match(B,A) — связанность, от 0 до 100. Получается этакая диагональная матрица:

    A   B   C   D   E   F   G   H   I   J
A  100
B   80 100
C   75  81 100
D   49  12  15 100
E   22   9  18  91 100
F    7  13  42  82  94 100
G    4   8  15  13  45  19 100
H   ...                         100
I   ...                            100
J   ...                                100


Итого:
A-B-C: A-B:80, A-C:75, B-C:81 - группа
D-E-F: D-E:91, D-F:82, E-F:94 - группа
A-D:49, C-F:42 - средней силы связи между отдельными элементами групп, но не позволяют слить две группы в одну, слишком слабы для этого
E-G:45 - G - средней силы связь с E - одним элементом группы D-E-F, но в итоге G остаётся без группы


Сущностей — N — от сотен до тысяч. Пока приходит в голову что-то поиск облаков точек в N-мерном пространстве, или как-то так. Не уверен, что это быстро.
Чисто эмпирически я предполагаю, что группы будут довольно сильно связаны между собой, а связь отдельных элементов одних групп с отдельными элементами других будет слабой, но конкретных цифр предположить не могу, хочется подкручивать какими-нибудь коэффициентами. Да, весьма вероятно то, что если сущность входит в одну группу, то не входит в другие, но не факт — возможно, что входит, тогда это будет межгрупповая связь.

Язык — питон, желателен готовый рецепт при помощи какого-нибудь numpy
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.