Есть два класса с отношением многие-ко-многим: напр. юзеры (
U) и сообщества (
C), в которых они состоят. Один юзер может состоять в нескольких сообществах, и в сообществе может быть несколько юзеров.
Мы знаем, кто в каком состоит. Можно представить данные в любом удобном виде. Пока остановился на таком:
c1: [u1, u2, u3],
c2: [u1, u2, u4],
c3: [u2, u3, u5, u6],
...
«Ядрами» называю отношения с, как минимум, двумя участниками с каждой стороны. В этом примере – два «ядра»:
[u1, u2] => [c1, c2],
[u2, u3] => [c1, c3],
Как найти все ядра среди довольно крупных данных?
Кроме перебора всех возможных комбинаций пока ничего не пришло в голову. Очень неэффективно на больших наборах (десятки тысяч с каждой стороны).