Discussion:
autre question sur des dénombrements
(trop ancien pour répondre)
pierre
2012-03-03 18:05:34 UTC
Permalink
bonjour,

il y a environ un mois j'ai posté ici un problème qui est visiblement
trop difficile pour les connaissances mathématiques dont on dispose
aujourd'hui.

j'ai donc essayé de le simplifier afin de voir si on peut aboutir à un
début de solution dans des cas plus simples.

je dispose de 15 billes et de 5 tas (numérotés de A à E).

chaque tas DOIT contenir entre une et cinq billes.

question 1 :
=========
combien y a-t-il de configurations (ou permutations) possibles ?
je souhaite avoir une réponse mathématique, et non quelque chose qui a
été fait avec un ordinateur (sinon, je demande avec 15000 billes et 50
tas, et là, l'âge de l'univers ne suffit pas)

question 2:
=========
peut-on trouver une formule qui en fonction d'un nombre en entrée me
donne la permutation correspondante en sortie ?
exemple :
permutation 1 : 1,1,3,5,5 (A contient une bille, B contient une bille,
C 3, et D et E 5 billes)
permutation 2 : 1,1,4,4,5
permutation 3 : 1,1,4,5,4
permutation 4 : 1,1,5,4,4
permutation 5 : 1,2,2,5,5
...
permutation max : 5,5,3,1,1


question 3:
=========
peut-on trouver une formule qui en fonction d'une permutation connue
(par exemple la permutation "1,1,5,4,4") me donne sa position dans la
liste complète des permutations possibles ?


merci

pierre
Philippe 92
2012-03-03 21:19:39 UTC
Permalink
Post by pierre
bonjour,
il y a environ un mois j'ai posté ici un problème qui est visiblement
trop difficile pour les connaissances mathématiques dont on dispose
aujourd'hui.
Peut être alors que tu n'es pas sur le bon forum ? ;-)
Si tu juges que ton problème relève de la recherche de pointe, aller
sur des forums de combinatoire, théorie des nombres etc...
Post by pierre
j'ai donc essayé de le simplifier afin de voir si on peut aboutir à un
début de solution dans des cas plus simples.
je dispose de 15 billes et de 5 tas (numérotés de A à E).
chaque tas DOIT contenir entre une et cinq billes.
tu oublies de préciser que les billes doivent toutes être utilisées :
aucun bille en dehors de ces 5 tas.
Post by pierre
=========
combien y a-t-il de configurations (ou permutations) possibles ?
le vocabulaire "permutations" est déja pris pour une autre
signification.
Post by pierre
je souhaite avoir une réponse mathématique, et non quelque chose qui a
été fait avec un ordinateur (sinon, je demande avec 15000 billes et 50
tas, et là, l'âge de l'univers ne suffit pas)
Tss tss... tu préjuges là, on peut tout à fait calculer 15000! ou tout
au moins une bonne approximation, en "un rien de temps" (sans effectuer
15000 multiplications)

Je ne sais pas pour ton exemple précis, mais prenons une variante :
les tas sont indiscernables, en d'autre termes
1,1,3,5,5 est identique à n'importe quelle _permutation_ de ces
nombres de billes 1,3,5,1,5 ou 5,1,1,3,5 etc
C'est à dire que l'on s'intéresse à ce que l'on appelle des
_partitions_ de 15 en 5 sommants non nuls. C'est à dire P(15,5)

On trouve "assez facilement" (voir plus loin) qu'il y a exactement
30 façons (partitions) de mettre 15 billes dans 5 tas, sans tenir
compte de l'ordre des tas (et sans en dresser la liste)

Une formule ? que nenni !
Ceci a été calculé par une méthode de récurrence, un peu similaire
au remplissage d'un "triangle de Pascal" pour les combinaisons.
Ici on a P(n, m) = P(n-m, m) + P(n-1, m-1)

n\m 1 2 3 4 5 6
1 1 1
2 1 1 1
3 1 2 1 1
4 1 2 2 1 1
5 1 3 3 2 1 1
. . . . . . .
. . . . . . .
. . . . . . .
15 1 7 19 27 30 26 21 ...


evidemment une telle méthode ne va pas aller bien loin et pour
calculer P(200,13), ce n'est pas la peine : il va falloir un
programme.

C'est un peu comme si tu demandais de calculer factorielle 1000 à
la main sans ordinateur.
Tu as bien une formule : "1000!" mais ça te fait une belle jambe !
Une telle "formule" n'aide en rien au calcul de sa valeur.

Pour les partitions c'est pareil.
On est alors sauvé par l'analyse et non plus la simple arithmétique.
Pour les factorielles on a la formule de Stirling qui donne une
*approximation* de n!
Ici on peut trouver "assez facilement" que les P(n,m) sont les
coefficients du développement en série (double, sur X et Y) du
produit infini Prod (k=1..oo) 1/(1 - X^k Y)
c'est à dire que ce produit infini s'écrit aussi
Somme (m, n) de P(n,m)X^n Y^n
C'est ce que l'on appelle la "série génératrice" de P(n, m)
et cela a été découvert par Euler (vers 1741)

Il y a même encore plus fort : on peut calculer un certain P(n,m)
comme limite d'une certaine série convergente.

Mais de toute façon, cela ne nous servira pas à grand chose, à
part programmer l'ordinateur de façon plus efficace que les simples
formules de récurrence, car des abominations avec des exponentielles,
(ou cosinus hyperboliques, c'est pareil) qu'il faudra bien calculer
à leur tour, interviennent dans les termes de cette série.

Tout ça pour dire que ce que tu cherches : une "formule" au sens
où tu pourrais l'entendre à un niveau élémentaire, risque fort de
ne pas être du tout à ton goût !

Bon, ton problème n'est pas exactement celui que j'évoque ci-dessus
mais concerne des "compositions", c'est à dire des partitions
ordonnées, où en plus l'ordre des tas intervient.
Une note infrapaginale dans mon bouquin de vulgarisation
"arithmétique pour amateurs" sur le sujet cite que ce cas
est traité, en relation avec les séries formelles, dans la revue
l'Ouvert n° 73 de décembre 1993. Aucune idée du contenu de cet article
Voir peut être ce qu'en disent Wikipedia et Wolfram
Mais je n'y ai rien trouvé sur ces "compositions".

Tout au moins sur les partitions, le formulaire de Mathworld est
asez complet :
http://mathworld.wolfram.com.PartitionFunctionP.html
(à partir des formules (59) et suivantes pour P(n,m))

Ou sur Wikipedia, nettement moins complet mais en français
http://fr.wikipedia.org/wiki/Partition_d'un_Entier
Post by pierre
=========
peut-on trouver une formule qui en fonction d'un nombre en entrée me
donne la [permutation] correspondante en sortie ?
en d'autres termes, expliciter tes _compositions_ en ordre
lexicographique, sans les énumérer effectivement.

Tiens, petit exercice encore plus simple :
les permutations de n objets, au nombre de n!
Si les objets sont numérotés 1..n, on peut ranger chacune des ces n!
permutations en ordre lexicographique

trouver la 354731 ème permutation de 15! = 1307674368000

bon amusement...
--
Philippe C., mail : chephip, with domain free.fr
pierre
2012-03-04 19:25:35 UTC
Permalink
Post by Philippe 92
Peut être alors que tu n'es pas sur le bon forum ? ;-)
Si tu juges que ton problème relève de la recherche de pointe, aller
sur des forums de combinatoire, théorie des nombres etc...
quoi ? me serais-je trompé de forum ? mais que fait la police ?
Post by Philippe 92
aucun bille en dehors de ces 5 tas.
exact !
Post by Philippe 92
le vocabulaire "permutations" est déja pris pour une autre
signification.
et moi qui comptait déposer un copyright dessus...
désormais, tout fout le camp !
Post by Philippe 92
Tss tss... tu préjuges là, on peut tout à fait calculer 15000! ou tout
au moins une bonne approximation, en "un rien de temps" (sans effectuer
15000 multiplications)
en réalité, il y a même des programmes qui calculent en quelques minutes
la factorielle de "un million" !
Post by Philippe 92
Une formule ? que nenni !
Ceci a été calculé par une méthode de récurrence, un peu similaire
au remplissage d'un "triangle de Pascal" pour les combinaisons.
Ici on a P(n, m) = P(n-m, m) + P(n-1, m-1)
n\m 1 2 3 4 5 6
1 1 1
2 1 1 1
3 1 2 1 1
4 1 2 2 1 1
5 1 3 3 2 1 1
. . . . . . .
. . . . . . .
. . . . . . .
15 1 7 19 27 30 26 21 ...
bien !

on s'approche de ce qui nous intéresse !

dans un tableau avec le triangle de Pascal, chaque élément du tableau
peut être calculé à l'aide de combinaisons, sans utiliser la récursivité
jusqu'au sommet du tableau.

mais même cette récursivité simple ne me dérange pas
Post by Philippe 92
evidemment une telle méthode ne va pas aller bien loin et pour
calculer P(200,13), ce n'est pas la peine : il va falloir un
programme.
cela ne me dérange pas, du moment qu'il est rapide
Post by Philippe 92
Post by pierre
=========
peut-on trouver une formule qui en fonction d'un nombre en entrée me
donne la [permutation] correspondante en sortie ?
en d'autres termes, expliciter tes _compositions_ en ordre
lexicographique, sans les énumérer effectivement.
exactement !
si tu sais comment faire, je suis preneur.
as-tu un email ?
j'ai essayé de te contacter à "chephip arobasse free point fr" mais ça
ne marche pas...
Post by Philippe 92
les permutations de n objets, au nombre de n!
Si les objets sont numérotés 1..n, on peut ranger chacune des ces n!
permutations en ordre lexicographique
trouver la 354731 ème permutation de 15! = 1307674368000
bon amusement...
j'ai déjà fait cet exo (parfois j'aime bien m'amuser), j'ai les deux
algos: celui qui donne la n-ième permutation en fonction d'une chaîne de
k éléments, et celui qui, pour une chaîne donnée, affiche le numéro de
permutation de cette chaîne.
Philippe 92
2012-03-04 21:42:54 UTC
Permalink
Les serveurs nntp de free sont naze (imposible de poster, pour tous
les forums) j'essaie de répondre via un serveur allemand ! et en plus
d'un autre PC
Philippe 92 a ecrit
Post by Philippe 92
Une formule ? que nenni !
Ceci a été calculé par une méthode de récurrence, un peu similaire
au remplissage d'un "triangle de Pascal" pour les combinaisons.
Ici on a P(n, m) = P(n-m, m) + P(n-1, m-1)
[...]
bien !
on s'approche de ce qui nous intéresse !
mais ceci est pour *mon* exemple : les partitions.

En fait pour le tien (les compositions = partitions en tenant compte de
l'ordre) c'est bien plus simple !!

considérons les 15 billes alignées avec un espace entre chaque bille
Il y a donc 14 espaces
Faire 5 tas revient à placer 4 "séparateurs" dans ces espaces

tas 3 +1+1+ 6 + 4
. O O O|O|O|O O O O O O|O O O O
. ^ ^ ^ ^

il y a donc C(14,4) = 14*13*12*11/(4*3*2*1) = 1001 cas

de façon générale avec n billes en p tas C(n-1, p-1)
Post by Philippe 92
Post by pierre
=========
peut-on trouver une formule qui en fonction d'un nombre en entrée me
donne la [permutation] correspondante en sortie ?
en d'autres termes, expliciter tes _compositions_ en ordre
lexicographique, sans les énumérer effectivement.
exactement !
si tu sais comment faire, je suis preneur.
as-tu un email ?
j'ai essayé de te contacter à "chephip arobasse free point fr" mais ça ne
marche pas...
pourtant ce mail marche très bien.

Entretemps j'ai un peu avancé, mais c'est pas encore au point.

Un truc du genre avec les tas de a,b,c,d,e billes
e est inutile pour définir la composition puisque e = n - (a+b+c+d)

L'indice du tas (dans un ordre judicieux et à un décalage près) est
une somme de C(p,q) où les p sont des combinaisons linéaires de a,b,c,d
et les q le "rang" du tas
dans le genre (mais c'est pas tout à fait ça, j'y retourne
immédiatement comme disait Boris)
x = C(n-a, 4) + C(n-a-b, 3) + C(n-a-b-c, 2) + C(n-a-b-c-d, 1)

reste à peaufiner ça

en sens inverse, il faut trouver le plus grand C(n-a, 4) <= l'index
donné, ce qui donne le nombre a de billes du 1er tas, et on recommence
avec le reste
une espèce de "système de numération pyramidal"

à suivre
Philippe 92
2012-03-05 11:48:02 UTC
Permalink
Post by Philippe 92
[...]
compléments et résumé :

On répartit n billes en p tas (ex 15 billes en 5 tas), et les
configurations (que l'on appellera ici des "répartitions", ou
compositions) sont rangées en ordre lexicographique :
1 : {1, 1, 1, 1, 11}
2 : {1, 1, 1, 2, 10}
...
N-1 : {10, 2, 1, 1, 1}
N : {11, 1, 1, 1, 1}

1) nombre de répartitions N = C(n-1, p-1)

2) correspondance directe entre la répartition {a, b, c.. } et son
rang dans la liste, de 1 à N, c'est à dire à partir du début en
ordre croissant :
C(n-1, p-1) - (C(n-a-1,p-1) + C(n-a-b-1, p-2) + C(n-a-b-c-1, p-3) +...)
Nota : C(n, m) = 0 si n<m

Détails et démonstrations (long)
===============================

La 1ère question se règle de suite en plaçant p-1 séparations dans les
n-1 intervalles entre billes d'une rangée de n billes.
comme signalé dans mon post précédent
Post by Philippe 92
considérons les 15 billes alignées avec un espace entre chaque bille
Il y a donc 14 espaces
Faire 5 tas revient à placer 4 "séparateurs" dans ces espaces
tas 3 +1+1+ 6 + 4
. O O O|O|O|O O O O O O|O O O O
. ^ ^ ^ ^
il y a donc C(14,4) = 14*13*12*11/(4*3*2*1) = 1001 cas
de façon générale avec n billes en p tas C(n-1, p-1)
Post by pierre
=========
peut-on trouver une formule qui en fonction d'un nombre en entrée me
donne la [permutation] correspondante en sortie ?
Entretemps j'ai un peu avancé, mais c'est pas encore au point.
Un truc du genre avec les tas de a,b,c,d,e billes
L'indice du tas (dans un ordre judicieux et à un décalage près) est
une somme de C(p,q), dans le genre (
x = C(n-a, 4) + C(n-a-b, 3) + C(n-a-b-c, 2) + C(n-a-b-c-d, 1)
reste à peaufiner ça
effectivement, cette formule n'était pas juste, seulement une piste.
Donc voila le résulat de mes cogitations :
(long car détails et exemples)

On note que le dernier tas est déterminé par la connaissance des p-1
premiers.
Il suffit donc de considérer exclusivement ces p-1 premiers tas
Prenons un exemple avec 4 tas et 8 billes, soit C(7,3) = 35 cas
que l'on peut encore examiner à la main :

rang tas intervalles code binaire (3 bits à 1 parmi 7)

1 1+1+1+5 x|x|x|x x x x x 1110000
2 1+1+2+4 x|x|x x|x x x x 1101000
3 1+1+3+3 x|x|x x x|x x x 1100100
4 1+1+4+2 x|x|x x x x|x x 1100010
5 1+1+5+1 x|x|x x x x x|x 1100001
6 1+2+1+4 x|x x|x|x x x x 1011000
7 1+2+2+3 x|x x|x x|x x x 1010100
8 1+2+3+2 x|x x|x x x|x x 1010010
9 1+2+4+1 x|x x|x x x x|x 1010001
10 1+3+1+3 x|x x x|x|x x x 1001100
11 1+3+2+2 x|x x x|x x|x x 1001010
12 1+3+3+1 x|x x x|x x x|x 1001001
13 1+4+1+2 x|x x x x|x|x x 1000110
14 1+4+2+1 x|x x x x|x x|x 1000101
15 1+5+1+1 x|x x x x x|x|x 1000011 C(6,2) commencent par 1
----------------------------------------------------
16 2+1+1+4 x x|x|x|x x x x 0111000
17 2+1+2+3 x x|x|x x|x x x 0110100
18 2+1+3+2 x x|x|x x x|x x 0110010
19 2+1+4+1 x x|x|x x x x|x 0110001
20 2+2+1+3 x x|x x|x|x x x 0101100
21 2+2+2+2 x x|x x|x x|x x 0101010
22 2+2+3+1 x x|x x|x x x|x 0101001
23 2+3+1+2 x x|x x x|x|x x 0100110
24 2+3+2+1 x x|x x x|x x|x 0100101
25 2+4+1+1 x x|x x x x|x|x 0100011 C(5,2) commencent par 2
----------------------------------------------------
26 3+1+1+3 x x x|x|x|x x x 0011100
27 3+1+2+2 x x x|x|x x|x x 0011010
28 3+1+3+1 x x x|x|x x x|x 0011001
29 3+2+1+2 x x x|x x|x|x x 0010110
30 3+2+2+1 x x x|x x|x x|x 0010101
31 3+3+1+1 x x x|x x x|x|x 0010011 C(4,2) commencent par 3
----------------------------------------------------
32 4+1+1+2 x x x x|x|x|x x 0001110
33 4+1+2+1 x x x x|x|x x|x 0001101
34 4+2+1+1 x x x x|x x|x|x 0001011 C(3,2) commencent par 4
----------------------------------------------------
35 5+1+1+1 x x x x x|x|x|x 0000111 C(2,2) commencent par 5


Si on compte le nombre de configurations qui commencent par a
c'est le nombre de configurations de n-a billes sur p-1 tas, c'est à
dire C(n-a-1, p-2)

Le rang (à partir de la fin) de la dernière de la série des { a, ...}
est donc C(p-2, p-2) + C(p-1, p-2) + ... C(n-a-2, p-2)
c'est à dire la somme de tous les nombres de config pour
a+1, a+2 ... n-p-1
Cette somme de combinaisons s'avère (récurrence sur les C(n, m)) être
C(n-a-1, p-1)

par exemple C(2,2) + C(3,2) + C(4,2) = C(5,3)

sur un triangle de Pascal des C(k,m) on a :

. k\m 0 1 2 3 4 5 6
. 0 1
. 1 1 1
. 2 1 2 (1)
. 3 1 3 (3) 1
. 4 1 4 (6) 4 1
. 5 1 5 10 (10) 5 1
. 6 1 6 15 20 15 6 1

La somme d'une colonne est l'élément de la ligne suivante et colonne
suivante 1 + 3 + 6 = 10

Dans ce groupe commençant par a, l'indice toujours en partant de la
fin, du dernier b va être de même C(n-a-b-1, p-3)
(a billes de moins et un tas de moins)

d'où la formule générale pour l'indice, de 1 à N = C(n-1, p-1), c'est
à dire à partir du début :

C(n-1,p-1) - (C(n-a-1,p-1) + C(n-a-b-1,p-2) + C(n-a-b-c-1,p-3) +...)
Nota : C(n, m) = 0 si n<m

exemples avec le tableau ci dessus

la configuration {3,1,2,2} est au rang
. 35 - (C(7-3, 3) + C(7-3-1, 2) + C(7-3-1-2, 1)) = 35 -(4+3+1) = 27 OK
. a b c

En sens inverse, trouver la x ième configuration revient à trouver la
valeur de a donnant le plus grand C(n-a-1,p-1) <= C(n-1, p-1) - x
puis récursivement sur b avec ce qui reste etc

Exemple du tableau ci-dessus x = 20, C(n-1, p-1) - x = 35 - 20 = 15
il faut chercher le plus grand C(k,3) <= 15
On va ici écrire un triangle de Pascal, mais algorithmiquement, il est
inutile : soit on résoud l'équation algébrique de degré p-1 = 3, avec
Newton par ex, soit on "balaye" les C(k,3) de proche en proche en
multipliant par k/(k-3) pour passer au suivant, à partir de C(3,3) = 1
1, 1*4/1 = 4, 4*5/2 = 10, 10*6/3 = 20 ... bingo > 15
donc c'est 10 le plus grand


. k V colonne des C(k,3)
. 0 1
. 1 1 1
. 2 1 2 1
. 3 1 3 3 1
. 4 1 4 6 4 1
. 5 1 5 10 10 5 1
. 6 1 6 15 20 15 6 1

On trouve donc le plus grand C(k,3) = 10 qui correspond à k = 5 = n-a-1
c'est à dire a = 2
il reste dans les {2, ...} à trouver celui dont l'indice est 15-10 = 5
en partant de la fin, c'est à dire le plus grand C(k,2) <= 5 qui est
C(3,2)=3 et donne b = (n-a-1) - 3 = 2
Il reste dans les {2,2,...} à trouver celui d'indice 15-10-3 = 2
c'est à dire le plus grand C(k,1) <= 2 qui est 2 = C(2,1)
et donne c = (n-a-b-1) - 2 = 1

La 20 ème config est donc {2,2,1,..} que l'on complète avec le dernier
tas = ce qui reste n-a-b-c = 3 et {2,2,1,3}, en accord avec le tableau

Des valeurs plus grandes s'obtiennent sans difficulté "quasiment à la
main" (avec un triangle de Pascal) même avec 15 billes et 5 tas, c'est
à dire C(14,4) = 1001 répartitions.
Triangle de Pascal réduit à ce dont on a besoin :

. k V colonne des C(k,4)
. 0 1
. 1 1 1
. 2 1 2 1
. 3 1 3 3 1
. 4 1 4 6 4 1
. 5 1 5 10 10 5
. 6 1 6 15 20 15
. 7 1 7 21 35 35
. 8 1 8 28 56 70
. 9 1 9 36 84 126
.10 1 10 45 120 210
.11 1 11 55 165 330
.12 1 12 66 220 495
.13 1 13 78 286 715
.14 1 14 91 364 1001



La configuration {3,2,5,1,4} est ainsi la
1001 - C(11,4) - C(9,3) - C(4,2) - C(3,1) = 1001-330-84-6-3 = 578 ème

Inversement la 547 ème config est
Plus grand C(k,4) <= 1001 - 547 = 454 est C(11,4) = 330 donne
a = 14 - 11 = 3
Plus grand C(k,3) <= 454 - 330 = 124 est C(10,3) = 120 donne
b = 11 - 10 = 1
Plus grand C(k,2) <= 124 - 120 = 4 est C(3,2) = 3 donne
c = 10 - 3 = 7
Plus grand C(k,1) <= 4 - 3 = 1 est C(1,1) = 1 donne d = 3 - 1 = 2

et finalement e = 15 - a - b - c - d = 2
et la 547eme config est {3, 1, 7, 2, 2}

Un programme éditant ces 1001 configurations (c'est encore accessible
en une fraction de seconde) confirme.

Cordialement.
--
Philippe C. mail chephip à free.fr
site divertissement mathématiques http://mathafou.free.fr
pierre
2012-03-06 17:09:55 UTC
Permalink
merci pour cette belle démonstration !

Continuer la lecture sur narkive:
Loading...