plexit´e lin´eaire. La strat´egie diviser pour r´egner consiste ici `a ´eliminer `a chaque r´ecursion
la moiti´e des ´el´ements, mais un algorithme sur le mˆeme canevas qui en ´eliminerait un
quart, un cinqui`eme, un huiti`eme... serait ´egalement lin´eaire.
E’. S´election en temps lin´eaire en moyenne
La nouveaut´e dans cet algorithme est d’´eliminer `a chaque ´etape, non pas une proportion
fixe d’´el´ements, mais un nombre al´eatoire de ceux-ci. Pour cela on tire au sort une valeur
p(appel´ee pivot) prise dans l’ensemble V, et l’on compte le nombre de valeurs de Vqui
sont au dessus et en dessous de p. Selon le cas, on r´ep`ete la mˆeme op´eration sur les valeurs
sup´erieures ou inf´erieures.
Algorithme 2 : Select2
Donn´ees :V, k
p= un ´el´ement al´eatoirement choisi dans V;1
V1={v∈V, v < p};V2={v∈V, v >p};2
si |V1|=k−1alors retourner p;3
si |V1|< k −1alors retourner Select2(V2, k − |V1|);4
retourner Select2(V1, k);5
L’analyse de la complexit´e de cet algorithme n’est pas facile car, contrairement au cas
pr´ec´edent, on ne sait pas quelle est la proportion d’´el´ements ´elimin´es `a chaque ´etape.
Pour simplifier l’analyse, on modifie l’algorithme pour que cette proportion soit mieux
d´elimit´ee. L’id´ee est de recommencer le partitionnement jusqu’`a ce que la valeur pivot
se trouve dans une zone “centrale” du tableau, de mani`ere `a ce que la proportion des
´el´ements ´elimin´ees soit dans tous les cas d’au moins un quart.
Algorithme 3 : Select3
Donn´ees :V, k
r´ep´eter1
p= un ´el´ement al´eatoirement choisi dans V;2
V1={v∈V, v < p};V2={v∈V, v >p};3
jusqu’`a |V1|>|V|
4et |V2|>|V|
4;4
si |V1|=k−1alors retourner p;5
si |V1|< k −1alors retourner Select3(V2, k − |V1|);6
retourner Select3(V1, k);7
Pour ´evaluer la complexit´e en moyenne, il faut resoudre la r´ecurrence suivante :
5