O algoritmo simples usual para encontrar o elemento mediano em uma matriz de números é:n
- Amostra de elementos de com substituição em A B
- Ordenar e encontrar o posto elementos e de
- Verifique se e estão em lados opostos da mediana de e se existem no máximo elementos em entre e para alguma constante C> 0 constante . Falha se isso não acontecer.
- Caso contrário, encontre a mediana classificando os elementos de entre e
Não é difícil ver que isso ocorre em tempo linear e que é bem-sucedido com alta probabilidade. (Todos os eventos ruins são grandes desvios da expectativa de um binômio.)
Um algoritmo alternativo para o mesmo problema, que é mais natural para ensinar aos alunos que viram uma classificação rápida, é o descrito aqui: Seleção Aleatória
Também é fácil ver que este possui um tempo de execução linear esperado: digamos que um "round" seja uma sequência de chamadas recursivas que termina quando se faz uma divisão 1 / 4-3 / 4 e, em seguida, observe que a duração esperada de uma rodada é no máximo 2. (No primeiro sorteio de uma rodada, a probabilidade de obter uma boa divisão é 1/2 e depois depois aumenta de fato, pois o algoritmo foi descrito para que o comprimento da rodada seja dominado por uma variável geométrica aleatória.)
Então agora a pergunta:
É possível mostrar que a seleção aleatória é executada em tempo linear com alta probabilidade?
Temos rodadas, e cada rodada tem comprimento pelo menos com probabilidade no máximo , portanto, um limite de união indica que o tempo de execução é com probabilidade .k 2 - k + 1 O ( n log log n ) 1 - 1 / O ( log n )
Isso é meio insatisfatório, mas é realmente a verdade?