stateDiagram-v2 state "+" as p0 state "*" as m1 state "*" as m2 state "*" as m21 state "*" as m22 state "*" as m23 state "*" as m24 state "X³" as m31 state "X²*Y" as m32 state "X²*Y" as m33 state "X*Y²" as m34 state "X²*Y" as m35 state "X*Y²" as m36 state "X*Y²" as m37 state "Y³" as m38 p0 --> m1: X p0 --> m2: Y m1 --> m21: X m1 --> m22: Y m2 --> m23: X m2 --> m24: Y m21 --> m31: X m21 --> m32: Y m22 --> m33: X m22 --> m34: Y m23 --> m35: X m23 --> m36: Y m24 --> m37: X m24 --> m38: Y
4 Combiner et dénombrer
\[ \newcommand{\Nat}{\mathbb{N}} \newcommand{\boolD}{\mathbf{2}} \newcommand{\vrai}{\mathtt{V}} \newcommand{\faux}{\mathtt{F}} \newcommand{\card}[1]{\mathtt{card}\ #1} \newcommand{\arrangement}[2]{\mathtt{A}_{#1}^{#2}} \newcommand{\combi}[2]{\mathtt{C}_{#1}^{#2}} \newcommand{\coefBi}[2]{\left(^{#1}_{#2}\right)} \]
La combinatoire, c’est l’ensemble des méthodes et des techniques1 mathématiques utilisé pour combiner des objets, c’est-à-dire les arranger, les sélectionner et les dénombrer selon des critères précis. Ces objets sont en nombre fini dès lors que leur dénombrement est nécessaire. Ils appartiennent à des structures comme des listes, des ensembles, des arbres, des graphes, appelées en informatique des structures de données.
Exemple : calcul (lien avec l’informatique), probabilité, complexité
4.1 Dénombrement
Pour dénombrer des ensembles, on utilise la fonction \(\card{}\) qui à tout ensemble fini associe le nombre de ses éléments. C’est un morphisme :
- additif (somme (ou réunion) disjointe pour les ensembles, addition pour les entiers),
- multiplicatif (produit cartésien pour les ensembles, produit pour les entiers).
Soit \(\Omega\) un ensemble fini. Nous allons dénombrer certaines structures élémentaires construites à partir de \(\Omega\).
Definition 4.1 (Arrangement) Un arrangement sur \(\Omega\) est une liste sans répétition formée d’éléments de \(\Omega\).
Exemple : si \(\Omega = \{a, b, c\}\), alors \(aa\), \(ba\) et \(ac\)2 sont des listes, dont les deux dernières \(ba\) et \(ac\) sont des arrangements, la première \(aa\) étant une liste avec une répétition de \(a\).
Proposition 4.1 (Nombre d’arrangements) Le nombre d’arrangements de taille \(k\) dans l’ensemble \(\Omega\) de \(n\) éléments est
\[ \arrangement{n}{k} = \frac{n!}{(n - k)!}. \]
Le nombre d’arrangements est aussi le nombre d’injections d’un ensemble de \(k\) éléments vers un ensemble de \(n\) éléments. Notamment, on peut prendre pour ensemble de départ l’ensemble \(\{1, \ldots, k\}\), qui correspond aux positions dans la liste : à \(1\) on associe l’élément en première position, à \(2\) on associe l’élément en seconde position, et ainsi de suite.
C’est aussi le nombre de feuilles de l’arbre dont l’ensemble des chemins de la racine à une feuille est exactement l’ensemble des listes sans répétition. La racine de l’arbre a \(n\) descendants, un par élément de \(\Omega\), les nœuds à la hauteur \(1\) ont \(n-1\) descendants, un par élément de \(\Omega\) privé du premier élément choisi, et ainsi de suite jusqu’aux nœuds à la hauteur \(k-1\) qui ont \((n - (k-1))\) descendants, la construction s’arrêtant aux nœuds à la hauteur \(k\).
Definition 4.2 (Combinaison) Une combinaison sur \(\Omega\) est un sous-ensemble3 de l’ensemble \(\Omega\).
Exemple : si \(\Omega = \{a, b, c\}\), alors \(\{a\}\) et \(\{a, b\}\) sont deux combinaisons, qu’on note comme des ensembles. On a les égalités suivantes : \(\{a, a\} = \{a\}\) et \(\{a, b\} = \{b, a\}\), puisque la répétition d’éléments ne change pas l’ensemble et l’ordre n’importe pas dans un ensemble.
Différence entre combinaison et arrangement - Dans une combinaison comme dans tout ensemble, il n’y a pas de séquence particulière entre les éléments, contrairement à un arrangement qui est une liste, donc une séquence ; à côté de cette différence fondamentale, un point commun demeure : dans les combinaisons comme dans les arrangements, il n’y a aucune répétition4.
Formalisation des combinaisons.
À partir des arrangements - Combinaison: classe d’équivalence sur les arrangements, deux arrangements étant équivalents s’ils sont égaux à une permutation près.
- Une classe d’équivalence contient tous les arrangements contenant exactement les mêmes éléments. Partant d’un arrangement appartenant à cette classe, tout arrangement de la classe s’obtient par une unique permutation (une bijection qui va permuter les éléments, les changer de place). Le cardinal de la classe est donc égal à \(k!\) si \(k\) est la taille de l’arrangement : pour construire une permutation, on choisit pour le premier élément une position parmi \(k\), pour le second une position parmi les \(k-1\) restantes, etc., soit au total \(k!\), égal à \(\arrangement{k}{k}\), une permutation étant une injection d’un ensemble fini vers lui-même.
Exemple : la classe associée à la combinaison \(\{a, b\}\) est l’ensemble d’arrangements \(\{ab, ba\}\).
À partir de l’ensemble \(\Omega\) - Fonction caractéristique (indiquant la présence ou non de l’élément dans le sous-ensemble formant la combinaison) de l’ensemble \(\Omega\) vers \(\boolD\)5, d’où le nombre total de combinaisons dans un ensemble de \(n\) éléments : \(2^n\).
Exemple : la combinaison \(\{a, b\}\) peut être représentée par la fonction \((a \mapsto \vrai{}, b \mapsto \vrai{}, c \mapsto \faux{})\), où \(\vrai{}\) est la valeur vraie, et \(\faux{}\) est la valeur fausse.
Proposition 4.2 (Nombre de combinaisons) Le nombre de combinaisons de taille \(k\) dans l’ensemble \(\Omega\) de \(n\) éléments est
\[ \combi{n}{k} = \frac{n!}{(n - k)! * k!}. \]
Relations récurrentes entre les nombres de combinaisons - Du fait de la croissance très rapide des suites factorielles , il est préférable de calculer récursivement les combinaisons, en utilisant la forme implicite d’une relation de récurrence plutôt que la formule explicite avec les factorielles. Le nombre de combinaisons peut ainsi se calculer par récurrence grâce au triangle de Pascal, au nom très peu universel, auquel il est nécessaire d’associer dans son esprit le terme plus précis de “triangle des combinaisons” et l’idée que le nombre de combinaisons peut se calculer par récurrence sur les ensembles décomposés récursivement (un ensemble étant soit vide, soit construit à partir d’un élément et d’un ensemble).
- \(\combi{0}{0} = 1:\) on compte une combinaison vide dans un ensemble vide,
- \(\combi{n + 1}{0} = 1:\) on compte une combinaison vide dans un ensemble à \(n+1\) éléments,
- \(\combi{n + 1}{n + 1} = 1:\) on compte une combinaison totale dans un ensemble à \(n+1\) éléments,
- \(\combi{n + 1}{k + 1} = \combi{n}{k} + \combi{n}{k + 1}:\) : étant donné un une décomposition de l’ensemble de \(n+1\) éléments en un élément \(e\) et un sous-ensemble de \(n\) éléments \(S\), on compte les combinaisons de \(k+1\) en sommant
- les \(\combi{n}{k}\) combinaisons contenant \(e\) et \(k\) éléments de \(S\), et
- les \(\combi{n}{k + 1}\) combinaisons ne contenant pas \(e\) et contenant \(k+1\) éléments de \(S\).
Il existe d’autres relations de récurrence, comme celle découlant de la démonstration alternative :
\[ \combi{n + 1}{k + 1} = \frac{n+1}{k+1} * \combi{n}{k}. \]
On peut en déduire un autre algorithme efficace.
Ces nombres de combinaisons interviennent dans un développement célèbre et utile, connu comme la formule du binôme de Newton:
\[ (X + Y)^n = \Sigma_{i = 0}^n \coefBi{n}{i} X^i*Y^{n-i}. \]
Le coefficient \(\coefBi{n}{i}\) est une autre notation pour le nombres de combinaisons \(\combi{n}{i}\) et s’appelle un coefficient binomial7.
Comment retrouver cette formule ? Développons \((X + Y)^n\), soit \((X + Y) * \ldots * (X + Y)\), où \((X + Y)\) apparaît \(n\) fois. Pour chaque facteur \((X + Y)\), on doit choisir soit le terme gauche \(X\) soit le terme droit \(Y\), et finalement faire tous les choix possibles. Un choix de \(i\) \(X\) et donc de \(n - i\) \(Y\) engendre le produit binomial \(X^i * Y^{n-i}\) ; le nombre de tels choix est égal au nombre de sous-ensembles à \(i\) éléments dans un ensemble à \(n\) éléments, soit \(\combi{n}{i}\), noté ici \(\coefBi{n}{i}\)8. Il reste à sommer sur \(i\) pour obtenir la formule. La formule est évidente pour \(n = 1\) (puisqu’il n’y a aucun produit à faire), triviale pour \(n = 2\), puisqu’il s’agit d’une identité remarquable, facilement visualisable par le calcul de l’aire d’un carré de côté \((X + Y)\), et devrait être connu pour \(n = 3\) et pour \(n = 4\), les coefficients se calculant à l’aide du triangle de Pascal. Voir la Figure 5.2 qui illustre l’arborescence des choix dans le cas \(n = 3\).
Etymologiquement, le suffixe atoire, variante de oire, désigne un moyen pour réaliser l’action de la racine du mot, ici combiner.↩︎
Nous notons les listes comme des mots, en accolant les éléments, ce qui peut être ambigu si les éléments sont composés de plusieurs caractères. Des notations non ambiguës sont les suivantes : \(a.b\), avec un opérateur noté par un point, \([a, b]\) ou \((a, b)\) avec un parenthésage comme en Python, ou encore \((\texttt{cons}\ a\ b)\) avec une notation fonctionnelle préfixe, comme en les langages de la famille Lisp.↩︎
On dit aussi une partie.↩︎
Un ensemble pour lequel on admet plusieurs occurrences d’un même élément est appelé un multi-ensemble. Dans ce cas, on pourrait parler d’une combinaison avec répétition.↩︎
L’ensemble a deux éléments, correspondant à vrai et faux, la fonction caractéristique associant vrai à un élément si l’élément appartient à la combinaison, faux sinon.↩︎
Sans remettre l’élément tiré dans l’urne avant le tirage suivant.↩︎
Binomial car associé aux binômes \(X^i\) et \(Y^{n-i}\).↩︎
Cette dernière notation semble progressivement s’imposer. AFFAIRE↩︎