3.5 Le problème du Mississippi
Nous allons maintenant nous pencher sur la question de savoir de combien de façons différentes on peut ordonner les lettres du mot MISSISSIPPI. Comme le mot contient lettres, à première vue, la solution semble être . Le problème ici est que plusieurs lettres sont identiques ; nous avons donc compté plusieurs configurations deux fois (ou plus). Il nous faut donc appliquer le principe d’équivalence. Pour ce faire, commençons par établir un tableau indiquant la fréquence de chacune des lettres.
| Lettre | Fréquence |
| M | |
| I | |
| S | |
| P | |
| Total |
Comme les I peuvent être permutés de façon, les S peuvent être permutés de façons, et les deux P peuvent être permutés de façons, on a donc que chacune des configurations donne lieu à configurations équivalentes. Le principe d’équivalence nous indique donc que le nombre de configurations est donné par:
Le problème du MISSISSIPPI peut facilement être généralisé à la question de savoir de combien de façons différentes peut-on ordonner objets si parmi les objets il y a objets de type , objets de type , objets de type , …, objets de type . La solution de ce problème porte le nom de coefficient multinomial. En utilisant la même méthode que précédemment, ce dernier nous est donné par la formule suivante:
Dans le problème précédent, nous nous sommes intéressés à trouver le nombre de mots que nous pouvons former en utilisant toutes les lettres du mot MISSISSIPPI. Nous allons maintenant regarder comment trouver le nombre de mots que nous pouvons former en utilisant seulement des lettres de ce même mot. Bien que le problème soit très similaire au précédent, cette fois nous n’avons pas d’autre choix que d’utiliser les fonctions génératrices exponentielles. Comme nous avons un , quatre , quatre et deux , on obtient donc la fonction génératrice suivante:
Comme nous l’avons déjà trouvé précédemment, nous avons mots de lettres que nous pouvons former en utilisant (toutes) les lettres du mot MISSISSIPPI. Cette nouvelle approche nous permet cependant d’aller beaucoup plus loin. Par exemple, basé sur notre calcul ci-dessus, nous avons mots de lettres que nous pouvons former en utilisant les lettres du mot MISSISSIPPI. Le code Python ci-dessous nous permet de résoudre automatiquement le problème.
1 from sympy import *2 from pandas import *3 init_printing()45 x = Symbol(’x’)6 p1 = sum([x**i/factorial(i) for i in range(0,2)])7 p2 = sum([x**i/factorial(i) for i in range(0,5)])8 p3 = sum([x**i/factorial(i) for i in range(0,5)])9 p4 = sum([x**i/factorial(i) for i in range(0,3)])10 polynome = Poly(p1*p2*p3*p4).all_coeffs()11 polynome.reverse()12 for i in range(0,len(polynome)):13 polynome[i] = polynome[i] * factorial(i)14 tableau = DataFrame([polynome])15 tableau.index = ["Valeurs"]16 tableau
| Nombre de lettre | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| Nombre de mots | 1 | 4 | 15 | 53 | 176 | 550 | 1610 | 4340 | 10430 | 21420 | 34650 | 34650 |