Calculer le coefficient binomial en C++ et Python

26 Apr 2022 26 Apr 2022 8321 vues ESSADDOUKI Mostafa 7 min de lecture

Exercices : Coefficient binomial

En combinatoire, le coefficient binomial est utilisé pour désigner le nombre de façons possibles de choisir un sous-ensemble d'objets d'une taille k dans un ensemble plus grand de taille n avec \(k \le n\).

Définition

Le coefficient binomial est noté \(\binom{n}{k}\) et vaut : $$\binom{n}{k} = \frac{n!}{k!(n-k)!}$$

Le coefficient binomial indique le nombre de combinaisons possibles de k objets à partir de n.

Propriétés importantes
  • \(\binom{n}{0} = \binom{n}{n} = 1\)
  • \(\binom{n}{k} = \binom{n}{n-k}\) (symétrie)
  • \(\binom{n+1}{k+1} = \binom{n}{k} + \binom{n}{k+1}\) (formule de Pascal)
Exemple
Entrée
n = 5, k = 2
Sortie
10
Explication :

Le nombre de façons de choisir 2 objets parmi 5 est \(\binom{5}{2} = \frac{5!}{2!3!} = \frac{120}{2 \times 6} = 10\).

Autres exemples
Entrée
n = 100, k = 5
Sortie
75287520
Entrée
n = 70, k = 3
Sortie
54740
Contraintes
  • 1 ≤ n ≤ 1000
  • 0 ≤ k ≤ n
 Exercice

Calcul du coefficient binomial

 Niveau : Intermédiaire

Écrire un programme qui prend deux valeurs n et k et renvoie la valeur du coefficient binomial \(\binom{n}{k}\).

Comparaison des solutions

SolutionComplexité temporelleComplexité spatialeAvantages / Inconvénients
Récursive (Pascal)O(2ⁿ) exponentielleO(n) (pile)Simple mais très inefficace pour n > 20
Programmation dynamiqueO(n × k)O(n × k)Efficace pour n modéré, mais mémoire importante
Optimisée (linéaire)O(min(k, n-k))O(1)Meilleure solution, idéale pour tous les cas
Recommandation

Pour calculer des coefficients binomiaux, la solution 3 (optimisée) est la meilleure : elle est rapide (linéaire), utilise peu de mémoire et gère de grandes valeurs.

En Python 3.8+, on peut aussi utiliser la fonction intégrée math.comb(n, k) qui est très optimisée.

Points clés à retenir
  • Le coefficient binomial \(\binom{n}{k}\) compte le nombre de combinaisons de k éléments parmi n.
  • La formule de Pascal \(\binom{n+1}{k+1} = \binom{n}{k} + \binom{n}{k+1}\) permet une définition récursive.
  • La programmation dynamique évite les recalculs en stockant les résultats intermédiaires.
  • La solution optimisée utilise la formule multiplicative et profite de la symétrie \(\binom{n}{k} = \binom{n}{n-k}\).
  • Pour de grands nombres, la solution optimisée est la seule utilisable en pratique.
Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.