Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1412 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  fonction combinaison en c++

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction combinaison en c++

n°2201186
kochfet
Posté le 29-08-2013 à 21:15:06  profilanswer
 

Est ce qu'il ya une fonction c++ prédéfinie permet de calculer la combinaison de n éléments parmi k ou on doit implémenter cette fonction?

mood
Publicité
Posté le 29-08-2013 à 21:15:06  profilanswer
 

n°2201195
kochfet
Posté le 29-08-2013 à 21:58:10  profilanswer
 

Une petite recherche sur internet répond à ma question. En fait, on a besoin de coder la fonction combinaison  
 

Code :
  1. float ModèleInterne::combinaison(int n,int q) //la Combinaison de q éléments parmi n
  2. {
  3. float comb;
  4. if(n==q)
  5. {
  6. return 1;
  7. }
  8. else
  9. if(q==1)
  10. {
  11.  return n;
  12. }
  13. else
  14. {
  15.  comb=(n/q)*combinaison(n-1,q-1);
  16.  return comb;
  17. }
  18. }

n°2201222
Farian
Posté le 30-08-2013 à 01:02:20  profilanswer
 

Bonjour !
 
C'est curieux de passer par des flottants pour calculer un C(n,k), non ? Pourquoi ne pas faire le calcul directement avec les factorielles (en le faisant intelligemment pour limiter les risques débordement et limiter les calculs).
 
Toutefois, si vous avez besoin de calculer des combinaisons avec des grands nombres, vous allez devoir vous tourner vers une bibliothèque du genre gmp ou alors, en effet, travailler sur des nombres réels, mais en ayant des valeurs approchées.
 
Bonne continuation !

n°2201267
theshockwa​ve
I work at a firm named Koslow
Posté le 30-08-2013 à 12:28:49  profilanswer
 

la division n/q va se faire en entier, est-ce bien volontaire ?


---------------
last.fm
n°2201276
kochfet
Posté le 30-08-2013 à 13:16:44  profilanswer
 

oui

n°2201280
Farian
Posté le 30-08-2013 à 13:36:33  profilanswer
 

Cela parait curieux ...  
 
Prenons un exemple : comb(12, 8)
 
on arrive à comb = (12/8)*comb(11,7) = comb(11,7)
 
En poussant la récursion, on arrive, sauf erreur de ma part, à 12*comb(5,1) = 60.
 
J'ai du mal à admettre que c'est juste, comme résultat :)
 
Et si vous faites (n*combinaison(n-1,q-1))/q, autant faire le calcul que j'ai évoqué dans mon premier post, cela revient au même, sans empiler les fonctions ...
 
Bonne continuation !
 
Edit : et je ne parle pas du fait que si q > n, on a obtient un nombre négatif.


Message édité par Farian le 30-08-2013 à 13:39:53
n°2218893
kochfet
Posté le 07-02-2014 à 14:17:37  profilanswer
 

J'ai codé autrement ma fonction combinaison.

Code :
  1. unsigned long long Cout::combinaison(unsigned long n, unsigned long k) {
  2. unsigned long i;
  3. unsigned long long b;
  4. if (0 == k || n == k)
  5. {
  6. return 1;
  7. }
  8. if (k > n)
  9. {
  10.     return 0;
  11. }
  12. if (1 == k)
  13. {
  14. return n;
  15. }
  16. b = 1;
  17. for (i = 1; i <= k; ++i)
  18. {
  19. b *= (n - (k - i));
  20. if (b < 0)
  21. {
  22.  return -1;
  23. }
  24. b /= i;
  25. }
  26. return b;
  27. }


 
Le problème est que cette fonction ne me donne pas des valeurs exactes pour des grands nombres. Je sens que je dois penser à utiliser une bibliothèque. J'attends vos réponses et vos propositions et merciiiiiiiiiiiiiiiiiii.

n°2218898
tpierron
Posté le 07-02-2014 à 14:40:45  profilanswer
 

Ça vaut quoi "sizeof (long)" sur ta machine ? Si c'est 4, essaie d'utiliser des uint64_t comme entier. Il y aura toujours des limites, et si ça ne suffit pas faudra nécessairement passer par des bibliothèques spécialisées.

n°2218899
kochfet
Posté le 07-02-2014 à 14:48:20  profilanswer
 

Est ce que les bibliothèques Boost C++ peuvent résoudre mon problème? Je vais utiliser

Code :
  1. #include <boost/math/special_functions/binomial.hpp>


Message édité par kochfet le 08-02-2014 à 12:21:50

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  fonction combinaison en c++

 

Sujets relatifs
SQL 3 tables récupérer des informations en fonction d'une variableJ'aimerais créer une fonction bien spéciale aidez-moi un peu svp ;)
Fonction récursive RFonction VBA/Excel : récupérer les données d'un classeur
[PHP/JS]Passage de valeurs php vers une fonction JSProblème opencv - fonction findContours
Comment lancer une fonction php en ajax?Modifier fonction javascript
Fonction si sur excelProblème d'exécution fonction shell, lien entre vba et C++
Plus de sujets relatifs à : fonction combinaison en c++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR