A 731. Le classement des billes.
Problème suggéré par Augustin Genoud
Jules possède des billes d’apparence identique. Il sait qu’elles sont toutes de masses légèrement différentes.
Il aimerait les classer, dans l’ordre, de la plus lourde à la plus légère. Pour cela, il ne dispose que d’une petite balance à plateaux sur laquelle il ne peut mettre qu’une bille de chaque côté. Chaque utilisation de la balance constitue un test.
Q1 Combien de tests doit-il effectuer, au minimum, pour classer 5 billes, dans le pire des cas et en appliquant la meilleure stratégie ? [***]
Q2 Combien de tests doit-il effectuer, au minimum, pour classer 8 billes, dans le pire des cas et en appliquant la meilleure stratégie ? [****]
Q3 Pour les plus courageux : combien de billes, au maximum, peut-il classer en 34 tests, dans le pire des cas et en appliquant la meilleure stratégie ? [*****]
Solution proposée par Michel Lafond
Sur le site OEIS (Encyclopédie des suites) on trouve le nombre F (n) de tests nécessaires pour classer n objets de poids différents, par l’algorithme de Fusion-Insertion dont on verra un exemple dans Q3.
On voit que 5 objets nécessitent 7 tests, 8 objets 16 tests et 13 objets 34 tests.
Commençons par un problème plus simple : l’insertion binaire, consistant à trouver la place d’un objet x parmi n objets déjà classés [On dit qu’on insère x]
On représentera un ensemble d’objets partiellement classés par un arbre (pas nécessairement connexe) dans lequel l’arc a --- b signifie a < b [On identifie les objets et leurs poids]
Notons IB (n) le nombre de tests nécessaires pour l’insertion de x parmi n objets classés.
On a évidemment IB (1) = 1.
Cas n = 2 :
On veut insérer x parmi a --- b Il faut 2 tests. C’est-à-dire IB (2) = 2.
On compare x à b avec 2 issues :
Dans le second cas, il faut comparer a et x pour conclure.
Cas n = 3 :
On veut insérer x parmi
Il faut encore 2 tests : C’est-à-dire IB (3) = 2.
On compare x à b avec 2 issues : [et le cas symétrique].
On est ramené à insérer x parmi (a) soit un second test.
Dans le cas général, on a (1) où est l’entier immédiatement supérieur ou égal à t.
La démonstration se fait par récurrence sur n : (1) est vraie pour n = 1, 2, 3
Si (1) est vraie jusqu’à n examinons l’insertion de x parmi n + 1 objets déjà classés :
Si n + 1 est impair, comparons x à l’objet médian avec Il y a objets de part et d’autre de dans (2) donc
n 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
F (n) 1 3 5 7 10 13 16 19 22 26 30 34 38 42 46
a x ou b
a b x
x
a b c
a b c
Si n + 1 est pair comparons x à l’objet médian avec Il y a objets à gauche de et objets à droite de Dans le cas le plus défavorable, on a
Mais n + 2 est impair, donc avec des inégalités strictes.
Ainsi .
Or implique .
Donc et on a encore
Abordons maintenant le problème proposé par Augustin Genoud.
Il y a classements possibles de n objets.
Chaque test divise l’ensemble des possibilités en deux sous-ensembles dont ou moins un a un effectif supérieur ou égal à .
Au bout de k tests, on aura donc nécessairement un sous-ensemble de possibilités d’effectif supérieur ou égal à .
Pour lever toutes les incertitudes, il faut arriver à
Le nombre minimal théorique de tests pour classer n objets est Q1.
Pour classer 5 objets il faut au moins 7 tests, et 7 tests suffisent en procédant comme suit : On veut classer {a, b, c, d, e}
On compare (a et b) puis (c et d). On peut supposer qu’on a l’arbre
Comparons maintenant a et c [Par symétrie, on peut supposer a < c]
On arrive à
L’insertion binaire de e parmi (a, c, d) nécessite deux tests. [On peut supposer e < c < d ] Le cas le plus défavorable est
Il reste à insérer b parmi (e, c, d) ce qui nécessite 2 tests.
Au total on a effectué 2 + 1 + 2 + 2 = 7 tests.
Q2.
Pour classer 8 objets il faut au moins 16 tests, et 16 tests suffisent en procédant comme suit : On veut classer {a, b, c, d, e, f, g, h}
On classe d’abord {a, b, c, d, e} en 7 tests comme vu dans Q1.
On insère f parmi (a, b, c, d, e) en tests
a b
c d
e
a c d
b e
a e c
b
d
On insère g parmi (a, b, c, d, e, f) en tests On insère h parmi (a, b, c, d, e, f, g) en tests.
Au total on a effectué 7 + 3 + 3 + 3 = 16 tests.
Q3.
Ainsi, avec 34 tests, on ne peut espérer classer que 13 objets.
On va d’abord classer 10 objets en 22 tests, ensuite on insérera successivement les 3 objets restants.
Pour classer 10 objets il faut au moins 22 tests, et 22 tests suffisent en procédant comme suit : On veut classer {a, b, c, d, e, f, g, h, i, j}.
On procède par Fusion-Insertion :
On compare (a, b) puis (c, d) puis (e, f) puis (g, h) puis (i, j) [5tests]
On classe {b, d, f, h, j} comme vu dans Q1. [7 tests]
On arrive donc à un arbre tel que
On insère e parmi (a, b, d) en IB (3) = 2 tests.
Le cas le plus défavorable est
On insère c parmi (e, a, b) en IB (3) = 2 tests On arrive donc à un arbre tel que
On insère i parmi (c, e, a, b, d, f, h) en IB (3) = 3 tests Dans le cas le plus défavorable, on arrive à un arbre tel que
Enfin, on insère g parmi (i, c, e, a, b, d, f) en IB (8) = 3 tests On a effectué 5 + 7 + 2 + 2 + 3 + 3 = 22 tests.
Maintenant que 10 objets sont classés (en 22 tests) il ne reste plus qu’à - insérer le 11ème objet parmi les 10 classés en IB (10) = 4 tests - insérer le 12ème objet parmi les 11 classés en IB (11) = 4 tests - insérer le 13ème objet parmi les 12 classés en IB (12) = 4 tests.
On a effectué 22 + 4 + 4 + 4 = 34 tests.
a b d f h j
c e g i
a b d f h j
c g i
e
a b d f h j
c
g i
e
a b d f h j
c
g i e