E443-Surprise partie.
Zig et Puce jouent au LOTO. Zig choisit 6 numéros dans E = {1, 2, 3, - - - 49}.
Puce doit deviner les 6 bons numéros en posant des questions à Zig sous la forme de parties P de E.
Zig répond à la question P en donnant le nombre de bons numéros figurant dans P.
Trouver une stratégie assurant à Puce la découverte des 6 bons numéros, et nécessitant le moins de questions possibles.
[Les parties proposées par Puce peuvent avoir un nombre quelconque d’éléments].
Solution proposée par Michel Lafond
Si q et n sont des entiers naturels (n 0) notons :
J (q, n) le jeu consistant à trouver q bons numéros parmi n dans les conditions de l’énoncé.
et M (q, n) le nombre minimal de questions à poser pour trouver ces q bons numéros.
On convient que M (0, n) = 0.
On cherche M (6, 49) et on va montrer que M (6, 49) = 24.
Examinions d’abord ce qui se passe pour q = 1 : Il faut trouver un bon numéro choisi parmi n.
Soit P = {x1, x2, x3, - - - xp} la première question posée.
Peu importe la valeur des xi, tous les entiers jouant le même rôle.
Ou bien Zig répond 1, et Puce est ramené au jeu J (1, p) Ou bien Zig répond 0, et Puce est ramené au jeu J (1, n – p).
Pour terminer, il faudra à Puce un nombre de questions égal à 1 + Max [M (1, p) ; M (1, n – p)].
En effet, il faut se placer dans le pire des cas (réponse la plus défavorable).
La meilleure stratégie pour Puce est de choisir p pour minimiser Max [M (1, p) ; M (1, n – p)].
Comme il est évident que M (1, x) est une fonction croissante de x, ce minimum sera atteint lorsque Max (p, n – p) sera aussi petit que possible, ce qui a lieu si p = n / 2.
x désigne la partie entière de x et x désigne l’entier immédiatement supérieur ou égal à x.
On a donc M (1, n) = 1 + Max [M (1, n / 2) ; M (1, n / 2)] = 1 + M (1, n / 2) (1).
La relation de récurrence (1) permet le calcul de M (1, n) à partir de M (1, 1) = 0 :
n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
M (1, n) 0 0 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 5
D’ailleurs on montre par récurrence que si n > 0 un = M (1, n) = ln(n) / ln(2) (2).
En effet, (2) est vraie pour n = 1 et 2. Ensuite, si (2) est vraie jusqu’à n alors : Si n = 2 m on a :
un+1 = u2 m + 1 = 1 + u (2m+ 1) / 2 = 1 + u m + 1 = 1 + ln(m+1) / ln(2) = ln(2m+2) / ln(2)
= ln(2m+1) / ln(2) = ln(n+1) / ln(2).
[en effet, ln(2m+1) / ln(2) = ln(2m+2) / ln(2) puisque ln(2m+1) / ln(2) n’est pas entier et qu’il n’y a pas d’entier r strictement compris entre ln(2m+1) / ln(2) et ln(2m+2) / ln(2) sans quoi on aurait 2m + 1 < 2r < 2m + 2]
Si n = 2 m+1 on a :
un+1 = u2 m + 2 = 1 + u (2m+ 2) / 2 = 1 + u m + 1 = 1 + ln(m+1) / ln(2) = ln(2m+2) / ln(2)
= ln(n+1) / ln(2).
La connaissance de M (1, n) va permettre de proche en proche le calcul de M (2, n) etc.
Considérons le jeu J (q , n) avec q > 1.
Lorsque Puce pose la question P, après la réponse de Zig, il connaît le nombre de bons numéros dans P et par différence le nombre de bons numéros dans la partie complémentaire P’.
Il est donc équivalent pour Puce de poser la question P ou la question P’ et on peut se limiter aux parties P d’effectif inférieur ou égal à n / 2.
Puce a donc pour sa première question le choix entre les stratégies P = {x1} ; P = {x1, x2} ; P = {x1, x2, x3} - - - P = {x1, x2, x3, - - - xn / 2}.
Supposons que Puce opte pour la première question P = {x1, x2, x3, - - - xp } avec 1 p n / 2.
Zig répondra en donnant le nombre b de bons numéros présents dans P.
Bien entendu, 0 b p et 0 b q donc b Min (p, q) . Puce se trouve maintenant confronté au problème suivant :
1) Trouver b bons numéros parmi les p numéros de P,
2) Trouver les q – b bons numéros parmi les n – p numéros de la partie complémentaire P’.
Pour cela il lui faudra au minimum M (b, p) + M (q – b, n – p) questions.
[Rappelons la convention M (0, n) = 0].
Le pire des cas est lorsque M (b, p) + M (q – b, n – p) est maximal [pour b variant de 0 à Min (p, q)].
La meilleure stratégie de Puce est donc de choisir p [entre 1 et n / 2] de façon à minimiser Max (M (b, p) + M (q – b, n – p)) [b variant de 0 à Min (p, q).
On a ainsi la récurrence valable si 2 q n :
M (q , n) = 1 + Min [Max (M (b, p) + M (q – b, n – p))]
p = 1 --- n / 2 b = 0 --- Min (p, q)
Un programme (listing à la fin) permet l’obtention du tableau ci-dessous donnant M (q , n) :
q n
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 0 0 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 5 5 5 5 5 2 0 0 0 2 3 4 4 5 5 6 6 6 6 7 7 7 7 8 8 8 8 8 3 0 0 0 0 2 4 5 6 6 7 7 8 8 9 9 9 9 10 10 10 10 11 4 0 0 0 0 0 3 4 6 7 8 8 9 9 10 10 11 11 12 12 12 12 13 5 0 0 0 0 0 0 3 5 6 8 9 10 10 11 11 12 12 13 13 14 14 15 6 0 0 0 0 0 0 0 3 5 7 8 10 11 12 12 13 13 14 14 15 15 16
Le programme donne M (6, 49) = 24.
Le programme (MAPLE) :
minq:=array(1..6,1..49): minq (q,n) donne le minimum de questions à poser au jeu J (q,n) for i from 1 to 6 do for j from 1 to 49 do minq[i,j]:=0: od:od:
for n from 1 to 49 do minq[1,n]:=ceil(evalf(ln(n)/ln(2))): od: cas q = 1 for q from 2 to 6 do
for n from q+1 to 49 do mini:=1e9:
for p from 1 to n/2 do maxv:=0:
for b from 0 to min(p,q) do v:=1: if b>0 then v:=v+minq[b,p]: fi: if q>b then v:=v+minq[q-b,n-p]: fi:
if v>maxv then maxv:=v: fi:
od: if maxv<mini then mini:=maxv: fi:
od: minq[q,n]:=mini:
od:
od:
print (minq[6,49]):
24