O algoritmo de seleção aleatória é o seguinte:
Entrada: Uma matriz de n (distintos, para simplificar) números e um número k ∈ [ n ]
Saída: O " elemento da classificação " de A (ou seja, aquele na posição k se A foi classificado)
Método:
- Se houver um elemento em , retorne-o
- Selecione um elemento (o "pivô") uniformemente aleatoriamente
- Calcule os conjuntos e R = { a ∈ A : a > p }
- Se , regressar ao posto k elemento de L .
- Caso contrário, retorne a classificação elemento de R
Foi-me feita a seguinte pergunta:
Suponha-se que , de modo que procura a mediana, e deixá- ct ∈ ( 1 / 2 , 1 ) ser uma constante. Qual é a probabilidade de que, na primeira chamada recursiva, o conjunto que contém a mediana tenha tamanho no máximo α n ?
Disseram-me que a resposta é , com a justificativa "O pivô selecionado deve ficar entre 1 - α e α vezes a matriz original"
Por quê? Como , qualquer elemento escolhido como pivô é maior ou menor que mais da metade dos elementos originais. A mediana sempre fica no sub-arranjo maior, porque os elementos no sub-arranjo particionado são sempre menores que o pivô.
Se o pivô estiver na primeira metade da matriz original (menos da metade deles), a mediana certamente estará na segunda metade maior, porque, uma vez encontrada a mediana, ela deve estar na posição intermediária da matriz e tudo antes do pivô é menor, como mencionado acima.
Se o pivô estiver na segunda metade da matriz original (mais da metade dos elementos), a mediana certamente segurará a primeira metade maior, pelo mesmo motivo, tudo antes do pivô ser considerado menor.
Exemplo:
3 4 5 8 7 9 2 1 6 10
A mediana é 5.
Suponhamos que o pivô escolhido seja 2. Portanto, após a primeira iteração, ele se torna:
1 2 .... parte maior ....
Somente 1
e 2
são trocados após a primeira iteração. O número 5 (a mediana) ainda está na primeira metade maior (chegando ao pivô 2). O ponto é que a mediana está sempre na metade superior, como pode ter a chance de permanecer em um sub-arranjo menor?