Soit A une matrice triangulaire inférieure tel que :
si k
j, A[j, k] represente le nombre de partitions de j tel que
= k
...
> 0.
Sur l'exemple
p(5)=7 car les 7 partitions distinctes de 5 sont :
1 + 1 + 1 + 1 + 1 = 5 donc A[5, 1] = 1
2 + 1 + 1 + 1 = 5
2 + 2 + 1 = 5 donc A[5, 2] = 2
3 + 1 + 1 = 5
3 + 2 = 5 donc A[5, 3] = 2
4 + 1 = 5 donc A[5, 4] = 1
5 = 5 donc A[5, 5] = 1
On a alors
p(j) =
A[j, k].
On remarque donc :
A[0, 0] = 1 et A[j, 0] = 0 (car
> 0 sauf pour j = 0 puisque p(0) = 1
A[j, j] = 1 puisque j = j
A[j, 1] = A[j - 1, 1] = 1 puisque
j = j - 1 + 1 = j - 2 + 1 + 1 = 1 + 1... + 1
A[j, 2] = A[j - 2, 1] + A[j - 2, 2] puisque
j = 2 + 1 + 1 + ... = 2 + 2 + ....
A[j, 3] = A[j - 3, 1] + A[j - 3, 2] + A[j - 3, 3] puisque
j = 3 + 1 + 1 + ...1 = 3 + 2 + .... = 3 + 3 + ....
etc...
A[j, j - 1] = A[j - 1, j - 1] = 1 puisque j = (j - 1) + 1
ou encore :
les coefficients d'indice 0 de toutes les lignes sont nuls et
pour k = 1..n le coefficient d'indice k de la n-ième ligne est
obtenu en faisant la somme des coefficients d'indice 0..k de la n - k-ième
ligne c'est à dire :
A[
n,
k] =
A[
n -
k,
j] et
A[n, n] = 1 et A[n, 0] = 0 si n > 0
Voici l'illustration pour n = 5 avec
k = 2, on a 5=0+1+4 :
k = 3, on a 8=0+1+3+4 :
k = 4, on a 9=0+1+3+3+2 :
....
On va faire un programme qui va calculer les coefficients de la matrice A.
On tape :
partitions(n):={
local A,j,k,m,S;
A:=idn(n+1);
pour j de 2 jusque n faire
pour k de 1 jusque j-1 faire
S:=0;
pour m de 1 jusque k faire
S:=S+A[j-k,m];
fpour;
A[j,k]:=S;
fpour;
fpour;
retourne A;
}:;
On tape :
A:=partitions(10)
On obtient :
On tape :
sum(A[k])$(k=0..10)
On obtient : 1,1,2,3,5,7,11,15,22,30,42
On peut faire un autre programme qui renverra la matrice B qui sera tel que :
si k
j, A[j, k] represente le nombre de partitions de j tel que
k > =
...
> 0.
Autrement dit les lignes de B sont les sommes partielles des lignes de A :
B[j, k] =
A[j, m]
donc
B[j, k] = B[j - k, k] + B[j, k - 1]
On a donc
p(j) = B[j, j].
On tape :
partition(n):={
local B,j,k,m,S;
B:=idn(n+1);
pour k de 1 jusque n faire
B[0,k]:=1;
fpour;
pour j de 1 jusque n faire
pour k de 1 jusque j faire
B[j,k]:=B[j-k,k]+B[j,k-1];
fpour;
pour k de j+1 jusque n faire
B[j,k]:=B[j,j];
fpour;
fpour;
retourne B;
}
:;
On tape :
B:=partition(10)
On obtient :
On remarquera que l'on retrouve la matrice A dans les diagonales montantes
de la matrice B.
On tape :
tran(B)[10]
ou on tape :
col(B,10)
On obtient : [1,1,2,3,5,7,11,15,22,30,42]
ou on tape :
B[j,10]$(j=0..10)
On obtient : 1,1,2,3,5,7,11,15,22,30,42
On tape :
B:=partition(1000):;
On obtient (Evaluation time: 972.05) enfin le résultat...
On tape :
B[200,1000]
On obtient
3972999029388
On tape :
B[1000,1000]
On obtient
24061467864032622473692149727991
Remarque
On peut aussi pour avoir une relation de récurrence considérer les
les partitions P(n, p) de n en une somme d'exactement p éléments
...
>0. On dit alors :
P(n, p) =(nombre de partage de n tels que
= 1)+(nombre de partage de n tels que
> 1.
On a :
(nombre de partage de n tels que
= 1)=(nombre de partage de n - 1 en
p - 1
)=
P(n - 1, p - 1)
(nombre de partage de n tels que
> 1(nombre de partage de n - p en
p
)=P(n - p, p)
P(n, p) : = P(n - 1, p - 1) + P(n - p, p)
avec P(n, 0) = 0, P(n, n) = 1 et P(n, p) = 0 si p > n
On tape et on renvoie la somme des lignes de P :
partage(n):={
local P,j,k,m,S;
P:=idn(n+1);
pour k de 1 jusque n faire
P[k,0]:=0;
fpour;
pour j de 1 jusque n faire
pour k de 1 jusque j faire
P[j,k]:=P[j-1,k-1]+P[j-k,k];
fpour;
fpour;
S:=[];
pour k de 1 jusque n faire
S[k]:=sum(row(P,k));
fpour;
retourne S;
}:;
On tape :
P:=partage(1000):;
On obtient (Evaluation time: 455.81) enfin le résultat...mais c'est deux
fois plus rapide qu'avec B:=partition(1000):;
On tape :
P[200]
On obtient
3972999029388
On tape :
P[1000]
On obtient
24061467864032622473692149727991
relation entre P et A :
On a :
P[n, p] = P[n - 1, p - 1] + P[n - p, p]
P[n - 1, p - 1] = P[n - 2, p - 2] + P[n - p, p - 1]....
donc
P[
n,
p] =
P[
n -
p, 0] +
P[
n -
p,
j]
avec P[n, 0] = 0, P[n, n] = 1 et P[n, p] = 0 si p > n
Si on compare avec les relations obtenus pour A:
A[
n,
k] =
A[
n -
k,
j] et
A[n, n] = 1 et A[n, 0] = 0 si n > 0
On a les mêmes relations de récurrence, donc :
P[n, p] = A[n, p]
Représentation de Young
On peut voir facilement cette égalité, grâce à la repésentation de
Young qui repésente par exemple le partage :
20=7+3+3+2+1+1+1+1+1
par le tableau formé par 20 carrés disposés selon 9 lignes :
7 carrés sur la 1-ière ligne,
3 carrés sur la 2-ième ligne,
3 carrés sur la 3-ième ligne,
2 carrés sur la 4-ième ligne,
1 carré sur de la 5-ième jusqu'à la 9-ième ligne :
Le nombre p de lignes correspond a un partage en une
somme de p éléments et le plus grand élément m de ce partage
est le nombre d'éléments de la première ligne.
Si maintenant on échange les lignes et les colonnes (on prend le transposé
de ce tableau) on obtient une transformation qui au partage :
20=7+3+3+2+1+1+1+1+1 en
une somme de 9 termes ayant comme plus grand élément 7 fait correspondre le
partage :
20=9+4+3+1+1+1+1 en
une somme de 7 termes ayant comme plus grand élément 9 :
Notations
1 sera noté 11, 1+1 sera noté 21, 1+1+1 sera noté 31 etc...
2 sera noté 22, 2+2 sera noté 42, 2+2+2 sera noté 62 etc...
Le développement en série de ;
sera noté
1 + x11 + x21 + ... + xn1 + ...
sera noté
1 + x22 + x42 + ... + x2n2 + ...
sera noté
1 + x33 + x63 + ... + x3n3 + ...
.....
sera noté
1 + xpp + x2pp + ... + xpnp + ...
Lorsque l'on fait le produit de ces développements en série le terme en xj a
pour coefficient p(j) car :
xj = xj1 = x(j-2)1x22 = x(j-4)1x42 ...
xj = x(j-2)j-2x21 = x(j-2)j-2x22 = x(j-1)j-1x11 = xjj
On tape :
P:=truncate(product([(1-x^
j)$(j=1..20)]),20)
On obtient : -x^
15-x^
12+x^
7+x^
5-x^
2-x+1
On tape : A:=truncate(series(1/P,x=0,20),20)
On obtient :
627*x^
20+490*x^
19+385*x^
18+297*x^
17+231*x^
16+176*x^
15+ 135*x^
14+101*x^
13+77*x^
12+56*x^
11+42*x^
10+30*x^
9+22*x^
8+ 15*x^
7+11*x^
6+7*x^
5+5*x^
4+3*x^
3+2*x^
2+x+1
On tape :symb2poly(A)
ou on tape : coeff(A,x)
On obtient la liste
p(20), p(19),.., p(1), p(0):
[627,490,385,297,231,176,135,101,77,56,42,30,22,15,11, 7,5,3,2,1,1]
On tape :lcoeff(A)
On obtient p(20):
627