C – une expression simple pour compter des combinaisons dans une plage de nombres?

Eh bien vraiment une déclaration vague (pour moi)

Quelle est l’expression de base pour calculer:

  • “Le nombre de combinaisons de n choses sockets k à la fois sous la forme d’un entier”

Edit: Un peu plus de précision: “Par exemple, les combinaisons de quatre éléments a, b, c, d pris trois à la fois sont abc, abd, acd et bcd. En d’autres termes, il existe au total quatre combinaisons différentes. de quatre choses “sockets trois à la fois”. ”

Je prends un cours de C non introductif alors que j’essaye de satisfaire à mes exigences en mathématiques pour pouvoir passer à un grade de CS. Jusqu’à présent, mes scores sont très élevés sur l’ensemble de mon travail, mais lorsque les mathématiques de haut niveau arrivent, je suis vraiment bloqué. Mais je m’égare ..

La plage de nombres serait 1-10 pour n et celle de k serait 1-4.

Ci-dessous, la seule référence que j’ai reçue et c’est au-dessus de ma tête.

http://www.themathpage.com/aPreCalc/permutations-combinations-2.htm

L’expression de base est n! / (K! (Nk)!). Un moyen efficace de le calculer consiste à utiliser un tableau 2D DP du sortingangle de Pascal.

L’expression clé sur la page est:

  • n C k = n! ((N – k)! K!)

C’est l’expression simple du «nombre de combinaisons de n choses sockets k à la fois». Le terme n C k est la façon dont les mathématiciens écrivent «le nombre de combinaisons de n choses sockets k à la fois». L’expression à droite est une méthode succincte, précise et simple pour calculer la valeur correcte. Cela suppose que vous sachiez que n! est factoriel n , et ce «factoriel n » signifie chaque nombre entre 1 et n multiplié ensemble.

Sachez que n! devient très gros très vite, donc les algorithmes naïfs fonctionneront jusqu’à n = 12 mais iront bien au-delà et vous devrez faire très attention.

  • 0! = 1
  • 1! = 1
  • 2! = 2
  • 3! = 6
  • 4! = 24
  • 5! = 120
  • 6! = 720
  • 7! = 5040
  • 8! = 40320
  • 9! = 362880
  • dix! = 3628800
  • 11! = 39916800
  • 12! = 479001600
  • 13! = 6227020800

Notez que 13! est trop gros pour tenir dans un entier non signé 32 bits, et 21! est trop gros pour tenir dans un entier non signé de 64 bits, et 35! est trop gros pour tenir dans un entier non signé de 128 bits (si vous pouvez trouver un ordinateur avec un tel type).

Si vous ne pouvez toujours pas faire face, alors vous allez faire face à des problèmes dans votre transfert; ce n’est pas très compliqué en mathématiques.