renvoyer les termes de combinaison des C(n,k) [resolu] - C++ - Programmation
Marsh Posté le 22-07-2002 à 14:15:17
je vois aps trop ce que tu essaye de faire
Marsh Posté le 22-07-2002 à 14:24:23
letoII a écrit a écrit : je vois aps trop ce que tu essaye de faire |
je cherche a obtenir tout les couples des combinaisons
nouvel exemple
j ai n=3 et p=5
je veux toutes les combinaisons de trois elements
soit 1,2,3
1,2,4
1,2,5
1,3,4
1,3,5
1,4,5
2,3,4
2,3,5
2,4,5
3,4,5
C plus clair?
Marsh Posté le 22-07-2002 à 15:30:34
JeSuisPasUnNumero a écrit a écrit : http://forum.hardware.fr/icones/flag1.gif interessé |
Si tu trouves de ton cote merci de me l envoyer!
niko
Marsh Posté le 22-07-2002 à 15:39:13
t'as un gros disque j'espère pour stocker les valeurs car pour n=200 et k=200 tu as 200!/(100!*100!) possibilités.
(200! = factorielle(200) = 200 * 199 *198 * .... * 2 * 1)
Marsh Posté le 22-07-2002 à 15:40:28
Soit g rien compris, soit tu veux le triangle de pascal
Marsh Posté le 22-07-2002 à 15:45:01
Bleuarff a écrit a écrit : Soit g rien compris, soit tu veux le triangle de pascal |
Non,ce que je veux c les combinaisons de N parmi P
mais pas leur valeur ,ce que je veux ce sont tout les tuples
soit l ensemble E ={a,b,c} C(2,3)={a,b}{a,c}{b,c}
et moi ce que je veux c est recuperer {a,b} puis {a,c} puis {b,c}
voila
Marsh Posté le 22-07-2002 à 15:47:50
JPA a écrit a écrit : t'as un gros disque j'espère pour stocker les valeurs car pour n=200 et k=200 tu as 200!/(100!*100!) possibilités. (200! = factorielle(200) = 200 * 199 *198 * .... * 2 * 1) |
en fait on a revu a la baisse, seul les p sont tres gros et les n
ne depassent pas 20 pour le stockage ca sera dans un fichier au pire, si t as une idee hesite pas!
niko
Marsh Posté le 22-07-2002 à 15:49:11
nicolasm a écrit a écrit : Non,ce que je veux c les combinaisons de N parmi P mais pas leur valeur ,ce que je veux ce sont tout les tuples soit l ensemble E ={a,b,c} C(2,3)={a,b}{a,c}{b,c} et moi ce que je veux c est recuperer {a,b} puis {a,c} puis {b,c} voila |
En gros il faut que tu imbriques k boucles parmi les n elements mais en évitant les doublets et en eliminant les permutations. Je pense que la solution se situe dans un algo recursif.
Marsh Posté le 22-07-2002 à 16:26:22
M'enfin cptet une conneire, je suis pas certain d'avoir compris ce que yu veux donc voila...
soit E l'ensemble
Code :
|
fo vraiment qe je m'emmerde a mon stage pour arriver a faire du code pour d'autres...
Marsh Posté le 22-07-2002 à 16:50:57
Bleuarff a écrit a écrit : M'enfin cptet une conneire, je suis pas certain d'avoir compris ce que yu veux donc voila... soit E l'ensemble
|
C presque ca mais ca fait que les combinaisons de deux variables moi il me les faut toutes C(3,9) ne marchent pas par ex !
merci qd meme de ton aide et bon stage
PS c koi ton langage la c du pseudo code?
Marsh Posté le 23-07-2002 à 10:46:52
C du pascal ça, je sais pas faire grand-chose d'autre pour le moment
Sinon je vois pas pkoi ça te va pas...tu veux ausis touts les combinaisons qui te vont pas ? tu remplaces le
Code :
|
par
Code :
|
Marsh Posté le 23-07-2002 à 11:10:27
Bleuarff a écrit a écrit : C du pascal ça, je sais pas faire grand-chose d'autre pour le moment Sinon je vois pas pkoi ça te va pas...tu veux ausis touts les combinaisons qui te vont pas ? tu remplaces le
par
|
En fait ce que tu me propose n est valable que pour les
C(2,p) et pas pour les C(n,p) car ton algo n est pas recursif c ca le probleme!mais merci quan meme
Marsh Posté le 23-07-2002 à 12:09:02
putain je viens de comprendre le truc... en effet me recursif semble obligatoire...g rien a foutre je vais voir ce que je peux faire...
Marsh Posté le 23-07-2002 à 13:26:40
Bon c'est assez facile en fait:
let rec combirec k l s = match k with |
bon faudrait essayer de le modifier pour le rendre recursif terminal
resultat:
#1,2,3 |
LeGreg
Marsh Posté le 23-07-2002 à 13:28:16
c quoi ça, du C++ ? Je comprends rien...
Marsh Posté le 23-07-2002 à 13:29:14
ca marche aussi pour autre chose que des nombres
combirec 3 ["rouge";"jaune";"vert";"bleu";"indigo";"violet"] "";; |
resultat:
#rouge,jaune,vert |
A+
LeGreg
Marsh Posté le 23-07-2002 à 13:30:17
oops on est dans le forum "C, c++"..
desole j'avais pas vu
enfin c'est adaptable en C++ mais c'est moins compact..
LeGreg
Marsh Posté le 23-07-2002 à 13:54:58
Voila une traduction a peu pres litterale du code caml
donc c'est peut-etre moins performant:
Code :
|
et la sortie:
1,2,3 |
LeGreg
Marsh Posté le 23-07-2002 à 18:26:40
legreg a écrit a écrit : Voila une traduction a peu pres litterale du code caml donc c'est peut-etre moins performant:
|
MERCI BCP y a un peu de C++ MAIS JE L ADAPTERAI EN C ET PUIS C SYMPA DE TA PART
PS:C KOI LE LANGAGE ZARBI AVANT?
Marsh Posté le 23-07-2002 à 19:06:05
euh le langage precedent c'est du Caml
c'est un des langages de choix des algorithmiciens
a cause de sa simplicité et de son efficacité.
C'est un langage moitié fonctionnel/moitié impératif.
C++ essaie de copier certaines features des langages
fonctionnels (par les templates, pointeurs de fonctions, recursivité) mais n'y arrive pas aussi bien.
Caml n'est plus maintenu sauf dans la version qui est utilisée
par l'éducation nationale, il y a une version orientée objet qui est mise a jour ( http://www.ocaml.org/ ).
Par exemple, il m'a fallu reflechir un moment avant
de sortir la bonne version en C++ du programme, alors que c'est assez naturel en CAML (une fois qu'on connait la syntaxe).
A+
LeGReg
Marsh Posté le 25-07-2002 à 02:31:40
Le problème étant horrible...
...ma solution est horrible ! (mais elle marche)
Exemple pour un ensemble de caractères:
Code :
|
Cela dit, ce serait beucoup plus propre avec les classes et patrons du C++.
Marsh Posté le 25-07-2002 à 11:51:18
Citation : Le problème étant horrible... |
Elle te plaisait pas ma solution?
LeGreg
Marsh Posté le 26-07-2002 à 00:53:01
legreg a écrit a écrit : Elle te plaisait pas ma solution? |
Le string n'existant pas en C, fallait bien y remédier... et c'est pas simple !
J'ai également aménagé la possibilité de combiner n'importe quoi, et de faire autre chose que afficher.
A noter que je me suis concentré sur les performances, d'où une certaine "obfuscation".
Marsh Posté le 26-07-2002 à 04:10:32
legreg a écrit a écrit : Bon c'est assez facile en fait:
|
waou....
ça c'est du language limpide
Marsh Posté le 26-07-2002 à 10:50:06
bjone a écrit a écrit : waou.... ça c'est du language limpide |
Ah la version en C est tout de suite plus claire .
LeGreg
Marsh Posté le 26-07-2002 à 16:49:16
petit test:
pour calculer les 13983816 combinaisons du loto:
391 millisecondes
(la recursivité n'est pas un probleme)
par contre pour les afficher: 1heure..
(il faudrait presque les afficher sous Dos,
la console windows est vraiment trop lente)
LeGreg
Marsh Posté le 26-07-2002 à 18:54:25
c plus simple de les foutre dans un fichier et attrapper notepad
Marsh Posté le 27-07-2002 à 00:55:37
J'ai déjà eu le problème.
Je voulais chronométrer le calcul de nombres premiers, je me retrouvais à mesurer la vitesse d'affichage .
Il est loin le premier test en Basic interprété sur un Apple II qui prenait 1 mn pour atteindre 1000...
Marsh Posté le 28-07-2002 à 04:17:58
Même quand on a l'algorithme correctement décrit, il reste encore à faire des choix d'implémentation.
La solution dépend des points fort et faibles du langage choisi...
Je rêves parfois d'un langage de description d'algorithmes capable de générer le code correspondant dans des langages différents, en choisissant au mieux entre récusion/boucles pointeurs/indices pré-allocation/dynamisme tests avant/après ect...
Je dis que le problème des combinaisons est horrible parce que:
Marsh Posté le 29-07-2002 à 00:43:50
Citation : Je dis que le problème des combinaisons est horrible parce que:
|
tu n'exageres pas un peu ?
LeGreg
Marsh Posté le 29-07-2002 à 02:05:25
Je trouves pas.
Ça fait partie de ces problèmes très simples à énoncer mais compliqués à résoudre (la solution dépend beaucoup du langage).
J'oubliais:
Marsh Posté le 29-07-2002 à 07:45:22
ca m'a l'air tout de meme assez fortement lineaire
=> l'enoncé déboule directement sur la solution optimale.
Je pensais a un probleme dérivé:
trouver l'ensemble E minimal de combinaisons a 6 chiffres parmi 49 telles que l'on ait au moins une combinaison gagnante a 5 chiffres. (pour toute combinaison c de C(5,49), il existe une combinaison c' de E telle que c est inclue dans c'.
Quelqu'un a une idée un peu fine?
LeGreg
Marsh Posté le 01-08-2002 à 13:16:17
legreg a écrit a écrit : ca m'a l'air tout de meme assez fortement lineaire => l'enoncé déboule directement sur la solution optimale. Je pensais a un probleme dérivé: trouver l'ensemble E minimal de combinaisons a 6 chiffres parmi 49 telles que l'on ait au moins une combinaison gagnante a 5 chiffres. (pour toute combinaison c de C(5,49), il existe une combinaison c' de E telle que c est inclue dans c'. Quelqu'un a une idée un peu fine? LeGreg |
Y en a qu on deja essaye de calculer des probas en integrant les 5000 dernieres sorties du loto mais ca marche pas au mieux tu gagnes 20f pour 18 depenser et pour un travail de ouf!!!
En tout cas je vois que mon probleme vous a bien fait reflechir
Marsh Posté le 02-08-2002 à 01:11:12
Euh...
Les probabilités n'aident en rien pour un jeu de hasard pur comme le Loto.
Les statistiques sur les nombres joués peuvent servir.
Ce sujet a déjà été beaucoup débattu...
Marsh Posté le 02-08-2002 à 23:47:36
il ne s'agit pas de proba pour gagner au loto
il s'agit d'un bete probleme d'algo
LeGreg
Marsh Posté le 03-08-2002 à 00:34:11
nicolasm a écrit a écrit : Y en a qu on deja essaye de calculer des probas en integrant les 5000 dernieres sorties du loto mais ca marche pas au mieux tu gagnes 20f pour 18 depenser et pour un travail de ouf!!! |
Il parle bien de probabilités pour gagner au Loto, non ?
Sinon je vais chercher pour le problème des ensembles gagnants.
Marsh Posté le 22-07-2002 à 11:34:15
Salut,je cherche a renvoyer les combinaisons des C(n,k)
exemple je passe n et k en parametre et je veux
les n et les k pouvant etre de l ordre de 100 ou 200
si n=2 et k=4
1,2 1,3 1,4
2,3 2,4
3,4
kelkun aurait une idee de la facon de traiter le probleme
(est-ce que je dois calculer d abord le nombre de termes?)
Merci!
PS: un code ou un morceau serait le bien venu!
bonne journee a tous et a toutes!
Message édité par nicolasm le 23-09-2002 à 15:31:35