Donald Knuth est L'Art de la Programmation Informatique, le volume 3 contient une section sur exactement de ce sujet. Je n'ai pas de livres ici avec moi, mais je suis sûr que Knuth présente l'algorithme 5 éléments. Comme vous pensez, il n'y a pas un algorithme général qui donne le nombre minimal de comparaisons pour de nombreuses tailles, mais il y a un certain nombre de trucs qui sont utilisés dans de tels algorithmes.
De vagues souvenirs, j'ai reconstitué l'algorithme de 5 éléments, et il peut être effectué dans les 7 comparaisons. Tout d'abord, prendre deux paires séparées, comparer à l'intérieur de ceux-ci, et de comparer les plus petits de chaque paire. Ensuite, comparer le restant contre le plus grand des deux. Maintenant cela se divise en deux cas selon que le reste de l'élément est plus petit ou plus grand, mais dans tous les cas, il est possible de terminer dans les trois comparaisons encore disponibles.
Je recommande à dessiner des images pour vous aider. Knuth les photos sont quelque chose comme ceci:
o---o
/
o---o
qui montre les résultats obtenus après les trois premières comparaisons (et de ce que je me souviens, ce genre de photo apparaît dans de nombreux minimale de comparaison de toutes sortes). Une ligne relie deux éléments dont l'ordre que nous connaissons. Avoir de telles images vous aide à déterminer les éléments à comparer, comme vous voulez faire une comparaison qui vous donne le montant maximal de l'information.
Addendum: Depuis qu'il est accepté de répondre avec code, je suppose qu'il n'y a pas de mal dans la finition de ces diagrammes, et ils peuvent être un complément utile à la réponse. Donc, commencez par le dessus de l'un, et de comparer l'élément manquant à l'encontre de celui en haut à gauche. Si elle est plus grande, cela conduira à
/--o
o
/ \--o
o
\--o
Maintenant, comparer les deux grands éléments en haut à droite et nous nous retrouvons avec
o---o---o
/
o---o
Maintenant, en comparant le bas à droite de l'élément de première contre celui du milieu sur le dessus, puis sur le côté, elle appartient, nous la placer correctement à l'aide de deux autres comparaisons.
Si la comparaison initiale a abouti à l'élément restant étant plus petit, le schéma devient
o---o---o
/
o---o
Maintenant, comparer les deux qui ont pourtant rien de plus petits qu'eux. Une option est le dernier schéma ci-dessus, ce qui est possible avec les deux autres comparaisons. L'autre cas est
o---o
/
o---o---o
Et ici encore, celui qui n'est pas encore en séquence avec les autres peut être placé correctement avec les deux comparaisons.