Les Schtroumpfs - Solution

Nombre total de relations

Notons plus simplement aSb si a schtroumpfe b, ou plus traditionnel aRb pour noter la relation entre a et b.
On peut écrire la table de vérité de R qui donne pour toute valeur du couple ordonné (a,b) la valeur de R = (0,1).
Il y a N = n² valeurs du couple (a,b), pour chacune 2 valeurs pour R et donc r = 2N = 2(n²) tables de vérités possibles.
nr = 2(n²)
001
112
2416
39512
41665536
52533554432
63668719476736
Ce nombre croît extrèmement vite avec n.

Restrictions

On note ici r(p,q) le nombre de relations R pour lesquelles il y a au plus p valeurs de x avec xRb et au plus q valeurs de y avec aRy
On remarque immédiatement que :
Pour n = 1 r(0,0)=1, r(1,0)=1 et r(p,q)=r(1,1)=2 si p et q≥1

Pour n = 2 on peut recenser les 16 cas possibles

 nb max de x : xRy  nb max de y : xRy
aucun00
aRa11
aRb11
bRa11
bRb11
aRa aRb12
aRa bRa21
aRa bRb11
aRb bRa11
aRb bRb21
bRa bRb12
aRa aRb bRa22
aRa aRb bRb22
aRa bRa bRb22
aRb bRa bRb22
aRa aRb bRa bRb  22
et donc r(1,1)=7, r(2,1)=9 et comme d'hab r(p,0)=1 et r(2,2)=16

Pour n = 3 recenser les 512 cas possibles est déja trop fastidieux et un programme donne facilement les valeurs cherchées
Ce programme donne aussi les valeurs pour n = 4 (65536 cas) et n = 5 (33554432 cas) :

****** n=1 ********

p\q01
01 
112
****** n=2 ********
p\q012
01  
117 
21916
****** n=3 ********
p\q0123
01   
1134  
2161265 
3164343512
****** n=4 ********
p\q01234
01    
11209   
215577343  
316211362341503 
41625146415062565536
****** n=5 ********
p\q012345
01     
111546    
216396304186   
3176468650366474726  
41777110329611108635124997921 
5177761048576118813762862915133554432

Au dela le programme s'essouffle à examiner 68719476736 cas et plus, d'ailleurs il faut commencer à traiter des nombres en multiple précision car plus de 32 bits sont nécessaires !

Calcul de r(1,1)

Il s'agit de compter le nombre de tables de vérité de R ayant au plus un 1 dans chaque ligne et dans chaque colonne.
En posant Cin=n!/(i!(n-i)!) le nombre de combinaisons de i objets parmi p et Ain=n!/(n-i)! le nombre d'arrangements de i objets parmi p
il y a 1 = C0nA0n façon de mettre aucun 1 dans la table
Il y a n*n = C1nA1n façons de mettre un seul 1 dans la table
C2nA2n façons de mettre deux 1
C3nA3n façons de mettre trois 1
...
il y a CnnAnn = n! façons de mettre n fois 1
et donc r(1,1) = ∑i=0n CinAin

Calcul de r(n,p)

Pour r(n,1), cela revient à choisir au plus un 1, donc de C0n+C1n = n+1 façons, dans chacune des n colonnes de la table.
Donc r(n,1) = (n+1)n = (C0n+C1n)n
pour r(n,2), il y a C0n+C1n+C2n façons de mettre au plus deux 1 dans une ligne et donc
r(n,2)=(C0n+C1n+C2n)n
et de façon générale r(n,p) = (∑i=0p Cin)n
Nota : r(n,n) = (∑i=0n Cin)n = (2n)n = 2(n²)

Calcul de r(n-1,p)

Ceci revient à éliminer des r(n,p) cas ceux qui ont exactement n fois 1 dans une ou plusieurs lignes
soit C1n+C2n+...+Cpn cas, et r(n-1,p) = r(n,p) - ∑i=0p Cin
En particulier r(n-1,1) = r(n,1) - n

Calcul de r(n-2,1), r(n-3,1), ...

Parmi les r(n-1,1) cas on élimine ceux qui ont un seul 0 par ligne :
n lignes
fois n emplacements du 0 sur la ligne
fois n valeurs de la colonne contenant le 0 : pas de 1, un 1 sur une des n-1 autres lignes.
Soit r(n-2,1) = (n+1)n-n-n³

Pour éliminer les cas avec deux 0 par lignes :
n lignes
fois C2n=n(n-1)/2 façons de choisir les deux 0 sur la ligne
fois n façons de placer éventuellement un 1 sur la colonne du 1er zéro
fois n façons de placer éventuellement un 1 sur la colonne du 2eme zéro
Soit r(n-3,1) = r(n-2,1)-n4(n-1)/2

Mais attention ! ceci n'est vrai que si n est "assez grand", c'est à dire si n-2>2
Sinon les choix pour placer un 1 dans les colonnes de 0 sont limités.

pour n=4, les cas où il y a deux 1 sur la même ligne sont comptés deux fois, soit (C24)2 = 36 cas
et r(n-3,1) = r(n-2,1)-n4(n-1)/2+(n(n-1)/2)²

De façon générale : r(n-i-1,1) = r(n-i,1)-nCinni = r(n-i,1)-ni+1Cin pourvu que n-i>i

Pour i≥n/2, c'est un peu plus dur à éliminer les cas comptés plusieurs fois ou à rejeter.
Examinons par exemple le cas n=8.
r(8,1) = 97,
elimination des lignes toutes à 1 : r(7,1) = r(8,1)-n
elimination des lignes avec un seul 0 : r(6,1) = r(7,1)-n³ =
elimination des lignes avec deux 0 : r(5,1) = r(6,1)-n3C2n
elimination des lignes avec trois 0 : r(4,1) = r(5,1)-n4C3n
elimination des lignes avec quatre 0 : r(3,1) = r(4,1)-n5C4n+(C4n)2 pour prendre en compte les cas en double comme pour n=4 ci-dessus.
elimination des lignes avec cinq 0 : on élimine n6C4n cas, mais sont éliminés en trop les cas où dans les cinq colonnes avec un 0, il y a des lignes de trois, quatre ou cinq 1

En résumé :

r(p,q) = r(q,p)
r(p,0) = r(0,0) = 1
r(p,q) = r(p,n) si q≥n
r(n,n) = r = 2(n²)
r(1,1) = ∑i=0n CinAin
r(n,p)=(∑i=0p Cin)n,    en particulier r(n,1) = (n+1)n
pour i<n/2   r(n-i-1,1) = r(n-i,1)-ni+1Cin

 

Accueil Arithmétiques Géométrique Divers Thèmes Scripts Jeux Exercices Précédent Suivant Parent