Tirer une combinaison par son indice
Bonjour
nicolas.patrois a dit :Dans le module itertools de Python, c’est, dans le même ordre :PetitLutinMalicieux a dit :
- Ni ordre, ni répétition -> c'est une combinaison. $C_n^k=\frac{n!}{k!(n-k)!}$. Archétype: quantité de grilles de loto. $C_{49}^6\approx 13.9M$
- Ordre, sans répétition -> c'est un arrangement. $A_n^k=\frac{n!}{(n-k)!}$. Archétype : quantité de podiums différents parmi une foule de candidats. $A_n^3$
- Ordre et répétition -> c'est une p-liste. $k^n$. Archétype : quantité de fichiers de n bits : $2^n$
- Sans ordre mais répétition -> combinaison avec répétition. $\Gamma_n^k=C_{n+k-1}^k$. Archétype : quantité de dominos $\Gamma_7^2=C_8^2=28$
itertools.combinations
itertools.permutations
(en utilisant le deuxième paramètre)itertools.product
itertools.combinations_with_replacement
Merci d'avoir indiquer itertools. C'est mignon. Et productif. Mais il y a un gros défaut : si je demande la 2573432ème grille de loto, python va t'obliger à créer les presque 14 millions de grilles de loto. Pas cool. Et parfois, même pas faisable. Alors qu'il y a un algorithme simple pour trouver cette satanée grille. Il suffit de trouver l'ordre croissant des numéros. Si le numéro 1 n'est pas coché, on peut enlever toutes ces grilles de la quantité totale. Elles sont en quantité $C_{48}^5$. Si le numéro 2 n'est pas coché, on recommence. Soit $C_{47}^5$ enlevés supplémentaires. etc.
Au final :
#!/usr/bin/python3 # (...) N=int(sys.argv[1]) K=int(sys.argv[2]) ind=int(sys.argv[3]) res=[] v=1 r=ind while (len(res) nCp(N-v,K-1-len(res))) : r -= nCp(N-v,K-1-len(res)) v=v+1 res=res+[v,] v=v+1 print(res)
Et on obtient :
<code>$ ./tiragecombinaisonparindice.py 49 6 2573432 [2, 9, 24, 25, 33, 40] $ ./tiragecombinaisonparindice.py 49 6 1 [1, 2, 3, 4, 5, 6] $ ./tiragecombinaisonparindice.py 49 6 13983816 [44, 45, 46, 47, 48, 49] $ ./tiragecombinaisonparindice.py 5 3 8 [2, 3, 5] $ ./tiragecombinaisonparindice.py 5 3 9 [2, 4, 5] $ ./tiragecombinaisonparindice.py 5 3 10 [3, 4, 5]
La 2576432ème grille de loto est donc celle qui coche 2, 9, 24, 25, 33, 40.
Les trois derniers permettent d'obtenir une répartition spécifique, quand on a fixé la quantité d'objets tirés, avant de savoir si chacun est choisi, ou non.
Ici, on sait qu'on va tirer au hasard 3 parmi 5. Il y a donc 10 possibilités. On peut tirer un nombre entre 1 et 10. Et après le programme donne les éléments tirés.<br>
Réponses
-
Merci au modérateur qui a corrigé l'affichage.[À ton service. AD]
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 165.4K Toutes les catégories
- 62 Collège/Lycée
- 22.2K Algèbre
- 37.6K Analyse
- 6.3K Arithmétique
- 61 Catégories et structures
- 1.1K Combinatoire et Graphes
- 13 Sciences des données
- 5.1K Concours et Examens
- 23 CultureMath
- 51 Enseignement à distance
- 2.9K Fondements et Logique
- 10.8K Géométrie
- 84 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 79 Informatique théorique
- 3.9K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 26 Mathématiques et finance
- 342 Mathématiques et Physique
- 5K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10.1K Probabilités, théorie de la mesure
- 804 Shtam
- 4.2K Statistiques
- 3.8K Topologie
- 1.4K Vie du Forum et de ses membres