De alguma forma, pensei sobre o quicksort ontem à noite e estava lendo sobre isso na Wikipedia. A parte interessante para mim foi: 'Se pudéssemos escolher consistentemente um pivô dos 50% médios, teríamos que dividir a lista no máximo. A escolha do pivô parece ser um possível problema do quicksort que pode levar a comportamento.
Minha idéia era: se em cada etapa se usasse a média da partição como pivô , isso poderia aumentar significativamente a velocidade. Especialmente depois de algumas etapas, quando os outliers estão em sua própria divisão da lista, a média e a mediana devem estar muito próximas umas das outras (mais uma vez, olhando para listas grandes). O tempo adicional durante cada etapa para calcular a média deve ser. Portanto:
Tempo estimado do Quicksort:
Tempo estimado de Quicksort_mean:
(5/3 é provavelmente uma estimativa conservadora da minha parte, também poderia estar mais próxima de 2, pois os subconjuntos devem ficar rapidamente sem discrepâncias). Portanto, a partir de 10.000 entradas, o Quicksort_mean seria (em média) mais rápido que o Quicksort. Além disso, nunca arriscaria ser, pois ele não aceita o elemento mínimo ou máximo da pilha.
Minha principal pergunta é: eu perdi alguma coisa? Eu tenho que admitir, eu nunca implementei o quicksort, então posso perder outras partes da coisa toda (armazenamento, etc.)
fonte
Respostas:
O uso da média para sua partição não impede que oΩ(n2) pior comportamento. Ocorre quando a lista de entrada está aumentando exponencialmente. Considere a entrada:
A média deste conjunto é (assintoticamente)nn−1 para que você obtenha a pior partição possível. Isso é meio trapaceiro, considerando que o armazenamento da lista levaΩ(n2) espaço se os números forem representados como números inteiros. Mas se você estiver classificando números de ponto flutuante, esse cenário é visível.
No entanto, é possível calcular a mediana de um conjunto (ou qualquer outra estatística de ordem para esse assunto) emO(n) tempo, por isso, se você realmente se importa com as garantias de tempo de execução para uma classificação rápida, use isso em vez da média.
No entanto, em todos os cenários práticos, o custo adicional de calcular a média / mediana é tão grande que escolher um pivô aleatório quase sempre é mais rápido.
fonte