L'algorithme de sélection aléatoire est le suivant:
Entrée: un tableau de nombres (distincts, pour simplifier) et un nombren k ∈ [ n ]
Sortie: le " élément de rang " de A (c'est-à-dire celui en position k si A a été trié)A k A
Méthode:
- S'il y a un élément dans , retournez-le
- Sélectionnez un élément (le "pivot") uniformément au hasard
- Calculez les ensembles et
- Si , le retour du rang élément de .
- Sinon, retournez le rang élément de
On m'a posé la question suivante:
Supposons que , vous recherchez donc la médiane, et que soit une constante. Quelle est la probabilité que, lors du premier appel récursif, l'ensemble contenant la médiane ait une taille au plus ?
On m'a dit que la réponse est , avec la justification "Le pivot sélectionné doit être compris entre et fois le tableau d'origine"
Pourquoi? Comme , tout élément choisi comme pivot est soit plus grand soit plus petit que plus de la moitié des éléments d'origine. La médiane se situe toujours dans le sous-tableau plus grand, car les éléments du sous-tableau partitionné sont toujours inférieurs au pivot.
Si le pivot se trouve dans la première moitié du tableau d'origine (moins de la moitié d'entre eux), la médiane sera sûrement dans la seconde moitié plus grande, car une fois la médiane trouvée, elle doit se trouver au milieu du tableau, et tout avant le pivot est plus petit comme indiqué ci-dessus.
Si le pivot se trouve dans la seconde moitié du tableau d'origine (plus de la moitié des éléments), la médiane sera sûrement la première moitié plus grande, pour la même raison, tout ce qui précède le pivot est considéré comme plus petit.
Exemple:
3 4 5 8 7 9 2 1 6 10
La médiane est de 5.
Supposons que le pivot choisi soit 2. Donc après la première itération, il devient:
1 2 .... plus grande partie ....
Seulement 1
et 2
sont échangés après la première itération. Le numéro 5 (la médiane) est toujours dans la première moitié supérieure (selon le pivot 2). Le fait est que la médiane se situe toujours sur la moitié supérieure, comment peut-elle avoir une chance de rester dans un sous-réseau plus petit?