Ce que tu veux c’est tous les sous ensembles qui composent E au final?
Je sais qu’il y a des algorithmes pour ça, mais je les ai pas en tête.
Néanmoins :
- La première série de sous ensemble est celle des ensembles à un éléments
- La seconde série de sous-ensemble est celle des ensembles à deux éléments
…
Partant de ce principe, avec En = {ensemble des sous ensembles à n éléments}, e un élément de En (soit un sous ensemble à n éléments), et E l’ensemble de départ :
Pour i = 2 à card(E):
Pour chaque élément e de Ei-1:
F = E \ e;
Pour chaque élément f de F:
Ajouter l'élément {e union {f}} à l'ensemble Ei
Fin
Fin
Virer les doublons dans Ei
Fin
A priori ça te renvoie tout :
E = {a, b, c}
i = 2:
E1 = {{a}, {b}, {c}}
e = {a}:
F = {b, c}
f = b: E2 += {{a}, {b}}
f = c: E2 += {{a}, {c}}
e = {b}:
F = {a, c}
f = a: E2 += {{b}, {a}} // en double
f = c: E2 += {{b}, {c}}
e = {c}:
F = {a, b}
f = a: E2 += {{c}, {a}} // en double
f = b: E2 += {{c}, {b}} // en double
i = 3
E2 = {{a, b}, {a, c}, {b, c}}
e = {a, b}
F = {c}
f = c: E3 += {{a}, {b}, {c}}
e = {a, c}
F = {b}
f = b: E3 += {{a}, {c}, {b}} // en double
e = {b, c}
F = {a}
f = a: E3 += {{b}, {c}, {a}} // en double
E3 = {{a, b, c}}
Et voilà !
Je testerai pas avec un ensemble plus grand.
Donc en gros :
- Intersection d’ensemble
- Unicité des éléments
- Si tu le fais en C, tu vas te faire chier
- Des optimisations sont possibles en fonction du nombre d’éléments dans les sous ensembles (pour éviter la phase de dédoublonnage)
- Complexité : oulah, vaut mieux même pas penser que cet algo soit rapide c’est minimum n^3 si ce n’est e^n.
Voilà.