Je vais brièvement esquisser un croquis d'un argument de l'adversaire.
Considérez votre algorithme de sélection jouer contre un adversaire que nous appellerons l'adversaire.Le but de l'adversaire est de fournir une entrée pour votre algorithme qui maximise le nombre d'opérations de comparaison effectuées par votre algorithme. En effet, votre algorithme peut être vu comme un arbre de comparaison, dans lequel un chemin correspond à un ordre partiel. Lorsque l'algorithme interroge l'adversaire sur une paire d'éléments, l'adversaire renvoie soit ou . Les réponses de l'adversaire ne peuvent jamais contredire les résultats précédents.X(x,y)x<yy<x
Supposons que le ème élément le plus grand soit : compte tenu de l'ordre partiel associé à n'importe quelle feuille de l'arbre de comparaison, alors doit être comparable à tous les autres éléments pour que l'algorithme soit correct, de sorte que l'algorithme doit avoir fait au moins une comparaison dont le résultat est soitkx∗x∗(y,z) ∀y≠x∗y<z≤x∗ ou x∗≤z<y . Appelons une telle comparaison cruciale pour un élément y . De toute évidence, l'adversaire souhaite maximiser le nombre de comparaisons non cruciales effectuées par votre algorithme.
Soit L l'ensemble des k−1 éléments les plus grands; votre algorithme doit identifier correctement tous les éléments de L ainsi que le plus grand élément de X∖L , c'est-à-dire x∗ . Observez que chaque élément de X∖L a perdu au moins une comparaison cruciale. Maintenant, l'adversaire a une stratégie qui oblige chacun des k - 1 éléments de L à gagner au moins ⌈ lgnk - 1⌉comparatif, aucun dequi est crucial pourX∖ L. En additionnant lesn - kcomparaisons crucialesrestantespourX∖ Lvous obtenez la borne inférieure. Pour plus de détails, veuillez lire les excellentesnotessuivantes de Jeff Erikson.
crucial comparison for $y$