El algoritmo simple habitual para encontrar el elemento mediano en una matriz de números es:n
- Muestra de elementos de con reemplazo en A B
- Ordene y encuentre el rango elementos y de| B | ± √ lrB
- Verifique que y estén en lados opuestos de la mediana de y que haya a lo sumo elementos en entre y para alguna constante constante . Falla si esto no sucede.r A C √ AlrC>0
- De lo contrario, encuentre la mediana ordenando los elementos de entre yl r
No es difícil ver que esto se ejecuta en tiempo lineal y que tiene éxito con alta probabilidad. (Todos los eventos negativos son grandes desviaciones de la expectativa de un binomio).
Un algoritmo alternativo para el mismo problema, que es más natural enseñar a los estudiantes que han visto una clasificación rápida, es el que se describe aquí: Selección aleatoria
También es fácil ver que este tiene un tiempo de ejecución lineal esperado: digamos que una "ronda" es una secuencia de llamadas recursivas que finaliza cuando uno da una división de 1 / 4-3 / 4, y luego observe que la longitud esperada de una ronda es como máximo 2. (En el primer sorteo de una ronda, la probabilidad de obtener una buena división es 1/2 y luego aumenta, ya que el algoritmo se describió de modo que la longitud de la ronda está dominada por una variable aleatoria geométrica).
Entonces ahora la pregunta:
¿Es posible mostrar que la selección aleatoria se ejecuta en tiempo lineal con alta probabilidad?
Tenemos rondas , y cada ronda tiene una longitud de al menos con una probabilidad máxima de , por lo que un límite de unión da que el tiempo de ejecución es con probabilidad .k 2 - k + 1 O ( n log log n ) 1 - 1 / O ( log n )
Esto es un poco insatisfactorio, pero ¿es realmente la verdad?