| |||||
| Dernière réponse | |
|---|---|
| Sujet : Challenge: Lister toutes les parties d'un ensemble a N elements | |
| barbarella | oui,
ça peut sembler plus compliqué et des fois ça l'est. Mais bon on peut utiliser la recursivité pour faire un logiciel de compta, mais pour programmer un moteur 3D, mieux vaut pas :D |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| barbarella | oui,
ça peut sembler plus compliqué et des fois ça l'est. Mais bon on peut utiliser la recursivité pour faire un logiciel de compta, mais pour programmer un moteur 3D, mieux vaut pas :D |
| LeGreg |
|
| le penseur fou |
|
| barbarella | on vous le répète,
on peut faire cette fonction sans récursivité, c'est la théorie qui veut ça. Tout système récursif peut être linéarisé. [edtdd]--Message édité par barbarella--[/edtdd] |
| nur | -->legreg Effectivement on s'etait mal compris je voulais les elements tries (et en décimal)c'est pour ça qu'il fallait employer une procedure récursive. Sinon pour ton programme il manque juste la partie qui convertie les positions des bits en elements. C'est pas dur a faire, exemple:tu as 65 en binaire ça donne: 1000001 on doit obtenir la combinaison (7,1). Si tu as excel tu peux tester le programme du Penseur C'est ça que je voulais. A+ |
| barbarella | legreg,
heu, t'aurais pas oulié un morceau du programme ;) |
| LeGreg | eheh le meme programme en C: #include <stdlib.h> #include <stdio.h> void main() { char buffer[20]; int i; // Note ici je fais pour n=10 et 2^n = 1024 for (i=0; i<1024; i++) { // attention _itoa est specifique a Microsoft // mais un equivalent doit exister sur d'autres plateformes _itoa( i, buffer, 2 ); printf( "%s\n", buffer ); }; } le plus complique doit probablement etre la conversion entre mon entier et son ecriture binaire. (mais puisque c'est une fonction de librairie c'est pas un probleme..) Attention, je te precise tout de meme que dans ton sujet tu n'as pas precise que tu desirais une sortie triee ce qui complique evidemment le probleme. (et le programme de penseur doit surement bien le faire meme si j'ai pas visual basic pour tester). A+ LEGREG ps pourquoi moi on m'ecoute jamais :-/ |
| le penseur fou |
|
| nur | --> Penseur Fou
Fantastique! ça marche Impec! Toi tu n'es pas si fou que ça. Balaize ton programme. En fait je m'etais orienté vers la meme direction que toi mais je me débattais avec la récursivité. Trop Fort. A+ et merci. |
| nur | -->legreg ce que tu donne(avec une pointe d'ironie) n'apporte rien du tout:
je sais trés bien faire "a la main" toutes les parties d'un ensembles les ensembles a 1 element,2 elements,...10 elements exemple les parties a 2 elements parmis 10 sont: 1.2 1.3 1.4 ....1.9 2.3 2.4 2.5 ... 2.9 ................... Mais pour faire le code ou l'algo c'est une autre paire de manche -->Penseur ça au moins c'est du concret! je teste ça tout de suite. |
| le penseur fou | voila ce que j'ai fait:
et effectivement si on prend la peine de décortiquer un peu ce programme c'etait pas si simple la difficulté etait de creer une procédure recursive generant le nombre de boucles "FOR" voulues sans cela la longueur du code aurait ete proportionnelle au nombre d'elements le programme liste toutes les parties d'un ensemble a 10 elements dans un fichier texte. Dim combi(10) 'variable globale Sub Partie() 'AVEC N=10 grandn = 10 Dim j As Integer Open "parties.txt" For Output As #1 ' Ouvre le fichier en écriture. For j = 1 To grandn Call boucle(1, grandn, j, j) Next Close #1 End Sub Sub boucle(deb, fini, n, Gn) Dim tt(10) If n = 0 Then GoTo sortie For tt(n) = deb To fini - n + 1 combi(Gn - n) = tt(n) If n = 1 Then For i = 0 To Gn - 1 Print #1, combi(i) Next Print #1, End If Call boucle(tt(n) + 1, fini, n - 1, Gn) Next sortie: End Sub |
| gizmo |
|
| LeGreg |
[edtdd]--Message édité par legreg--[/edtdd] |
| nur |
|
| LeGreg |
|
| le penseur fou |
|
| LeGreg | C'est vraiment debile comme probleme.
En fait lister les parties d'un ensemble a N elements ca consiste juste a enumerer les nombres de 0 a 2^n-1. Ca n'a rien d'ardu, il suffit de savoir compter :D (et d'avoir du temps si n est grand..) LEGREG |
| gizmo | remarque n°1: on peut TOUJOURS défaire du récursif, et la solution non récursive sera TOUJOURS meilleur, tant en terme de place mémoire, qu'en terme de rapidité.
remarque n°2: pour faire simple considère ta suite délément comme une série de 1 et 0 (pris, pas pris) tu verras, l'algo coule de source. (je vais pas te le donner vu que c'est TON défi :D) |
| nur |
|
| minusplus | :??:
heu c pour quoi faire sans indiscrétions ? |
| nur |
|
| flo850 | tu veux toutes les parties ?
sioui , ta complexite ne peux pas descendre en dessoius de 2^N. En effet meme si tu calcule un element en o(1) tu arrivera a 2^n au boiut. c'est donc de l'algo bourrin , qui meme optimisé a mort , ne te permettra pas de calculer des ensemble correct (N>100, N>1000..) |
| nur | Je sais que le nombre des parties d'un ensemble a N éléments est:
2^N Mais je voudrais faire un programme listant toutes les combinaisons .Je pense que l'on ne peut pas sans tirer sans les fonctions récursives et ça ne parait pas si simple.Si quelqu'un trouve, ça m'interresse. |




