4 votes

Regroupement de listes par éléments communs

Je suis à la recherche d'un algorithme C++ astucieux/rapide, qui me permettrait de faire le regroupement de plusieurs listes d'objets lorsqu'elles contiennent des objets communs. Disons que j'ai N listes, chacune contenant 1..M objets (O) associés à un élément E :

[O1, O2]     -> E1
[O3]         -> E2
[O1, O4, O5] -> E3
[O2, O5]     -> E4
[O3, O6]     -> E5

Je souhaite les réorganiser de la manière suivante :

[O1, O2, O4, O5] -> [E1, E3, E4]
[O3, O6]         -> [E2, E5]

Le résultat comporte tous les objets communs regroupés avec tous les éléments associés. Au final, aucun objet n'est partagé entre les listes.

6voto

abeln Points 1488

Pour chaque objet, calculez les éléments qui le contiennent.

es decir

01 -> [E1, E3]
02 -> [E4]
03 -> [E2, E5]
04 -> [E3]
05 -> [E3, E4]
06 -> [E5]

Ces listes induisent un graphe : il y a un sommet par élément, et deux sommets sont connectés si les éléments correspondants apparaissent dans la même liste.

enter image description here

Il me semble que ce que vous voulez calculer sont les composants connectés du graphique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X