Il est un algorithme très simple, en fait (au moins pour un nombre raisonnable d'utilisateurs et des groupes).
Considérez chaque utilisateur comme un ensemble dont les éléments sont les groupes dont ils sont membres. Pour trouver les groupes que deux utilisateurs ont en commun, il suffit de prendre l'intersection des ensembles d'appartenance de ces deux utilisateurs.
Donc, si la personne A est dans le groupe K, M et N, et personne B est en K, N et P, vous avez les jeux suivants:
A := {K, M, N}
B := {K, N, P}
intersect(A, B) = {K, N}
Dans Ruby, vous pouvez utilisez la classe de bibliothèque standard Set
pour effectuer ces calculs:
require 'set'
memberships_a = Set[:K, :M, :N]
memberships_b = Set[:K, :N, :P]
shared = memberships_a.intersection(memberships_b)
# you can also use the '&' operator as shorthand for 'intersection'
shared_2 = memberships_a & memberships_b
Veuillez clarifier. es-tu en train de chercher toutes les paires? paires avec 2 personnes ou plus? Comment les données sont-elles représentées en mémoire (c'est-à-dire la structure de données.) Les objets humains sont-ils connus des groupes? Les objets de groupe connaissent-ils les gens? – CodePartizan