parties d un ensemble

parties d un ensemble - Algo - Programmation

Marsh Posté le 11-06-2004 à 18:28:07    

Salut,
Je dispose d'un ensemble à n éléments ( les éléments étant placés dans une liste) et je voudrai avoir un algo qui me retourne les 2^n parties de cet ensemble dans une liste.
 
Si vous pouviez m'éclairer un peu.. merci d'avance

Reply

Marsh Posté le 11-06-2004 à 18:28:07   

Reply

Marsh Posté le 11-06-2004 à 18:38:58    

Soit x un élément de E. L'ensemble des parties de E, c'est la réunion disjointe de F et G
F : l'ensemble des parties qui ne contiennent pas x
G : l'ensemble des parties qui contiennent x  
 
Bon, c'est juste un début. J'espere que tu n'as rien contre la récursivité
 
Pour calculer F, tu fais ca récursivement sur E, apres lui avoir oté un x arbitraire. Il n'y aura donc pas de x dans les sous ensembles de F.
Pour calculer G, tu prends F et tu ajoutes un x a chaque sous ensemble.


Message édité par Ace17 le 11-06-2004 à 18:43:23
Reply

Marsh Posté le 11-06-2004 à 19:34:32    

oui, j'avais cette idée la en tête, mais je dois alors mal le transcrire dans le language que j'utilise, c'est à dire caml.
Je pense que j'appliquais la récurrence à chaque sous partie F et G comme tu le dis , mais ça ne marche pas et je vois pas le probleme.
Car je dois ensuite récupérer tous les ensembles trouver et c'est la que ça coince

Reply

Marsh Posté le 11-06-2004 à 22:47:35    

Du Caml, excellent!
Poste ton code, si y'en a pas trop...

Reply

Marsh Posté le 11-06-2004 à 22:48:10    

xara a écrit :

oui, j'avais cette idée la en tête, mais je dois alors mal le transcrire dans le language que j'utilise, c'est à dire caml.


 
:love:
 
poste poste !

Reply

Marsh Posté le 11-06-2004 à 22:56:03    

Bon allez, j'ai pas pu m'empecher...
 

Code :
  1. let rec rajoute liste x =
  2. match(liste) with
  3. | [] -> [[x]];
  4. | h::t -> (x::h)::rajoute t x;
  5. ;;
  6. let rec parties liste =
  7. match(liste) with
  8. | [] -> [];
  9. | x::t -> let sans_x = parties t in
  10.  let avec_x = rajoute sans_x x in
  11.  sans_x@avec_x;;

Reply

Marsh Posté le 12-06-2004 à 12:52:40    

ok merci pour l'aide.
 
(moi j'avais fait un truc du style
 
let rec parties liste=
   match liste with
        []->[[]]
     |t::q->(t::(parties q))@(parties q);;
 
 mais en effet ça marchait pas trop )
 
Il me reste plus qu'à faire la fonction totale ( celle ci étant juste une fonctin auxiliaire)

Reply

Marsh Posté le 12-06-2004 à 12:58:21    

Ben t'étais pas loin sauf que quand tu fais  

Code :
  1. t::(parties q)

tu lui demandes d'ajouter un élément (qui n'est pas une liste) a une liste de listes. Normal que ca passe pas


Message édité par Ace17 le 12-06-2004 à 12:58:36
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed