afficher les sous ensembles d un ensembles. (gray inside) - Algo - Programmation
Marsh Posté le 10-04-2004 à 19:44:51
bah à chaque élément de l'ensemble, tu associes un bit de présence : 1 si l'élément est dans le sous-ensemble, 0 sinon. Donc l'ensemble {1 2 3 4 } vaut 1111 et {} vaut 0000. Maintenant pour énumérer tous les sous-ensembles, il te faut un algo qui permette d'énumérer les 2^4 combinaisons entre 1111 et 0000. Y'a des algo pour ça, par exemple l'algo de broadcast dans un hypercube en partant de l'ensemble complet
Marsh Posté le 11-04-2004 à 04:50:44
Code :
|
je me suis inspire de morceau de code existant, mais pout suivre lordre
demande j utilise un vecteur qui contient les diffrentes possibilite pour n (0000 0001 ect.), avec un sort et c est bon
Marsh Posté le 12-04-2004 à 16:59:05
Ouaip, à vue de nez, ça doit marcher. Vu que tu pars de {}, dans la routine flip tu peux te contenter de faire table[n]=1. Pour le tri, c'est l'ordre lexicographique, un bête tri sur la taille des chaînes suffit.
Marsh Posté le 12-04-2004 à 17:04:31
sinon une autre idée : à chaque nombre entre 0 et 2^n (n est la taille de ton ensemble) correspond un sous-ensemble. Pour ça, tu utilises la représentation binaire de ce nombre. Donc tu stockes tous les nombres entre 0 et 2^n et tu les tries selon le nombre de 1 qu'ils contiennent dans leur représentation binaire....
Marsh Posté le 10-04-2004 à 06:36:21
,
exemple :
l ensemble {1 2 3 }
donnera
{1 2 3}
{1 2}
{1 3}
{1}
{2 3}
{2}
{3}
{}
j ai trouve des expliquation fesant reference au "Binary Reflected Gray Code"
http://www.theory.csc.uvic.ca/~cos [...] tInfo.html
mais je ne comprend pas comment passe de {1 2 3} a 111, 3 a pour binaire 011 et le gray code donnera donc 100.
ils prennet la chaine a l envers : 321
chaque code de triplet possible correspond on c a une solution du problem (2^n solution), chaque chiffre du code indiquant le chiffre de lemsemble a afficher :
exemple :
sur leur site { 1 2 } -> 0 1 1
en superposant l ensemble 3 2 1
de droite a gauche on obtient bien { 1 2 }
bref..
comment font il pour pour passer d en ensemble au code triplet et comment pouraije afficher les sous esembles dans l ordre montre plus haut ?
merci