Como parte de uma tarefa de lição de casa que abrange a implementação do introsort , perguntam-me por que o heapsort é usado em vez de mesclar (ou outros algoritmos nesse sentido).
O Introsort é um algoritmo de classificação híbrido que fornece desempenho médio rápido e (assintoticamente) o pior desempenho ideal. Ele começa com quicksort e alterna para heapsort quando a profundidade da recursão excede um nível com base no (logaritmo do) número de elementos que estão sendo classificados. ( Wikipedia , recuperado em 2014-maio-06).
A única razão pela qual consigo pensar é que o heapsort está "no lugar" ... Mas, na verdade, não entendo por que isso importaria aqui.
algorithms
algorithm-analysis
sorting
user672009
fonte
fonte
Respostas:
As duas desvantagens do quicksort é que ele requer espaço extra (para manter os intervalos não classificados) e a seleção de pivô ruim (ou sequências planejadas para fazer você selecionar um pivô ruim) pode causar um O ( n 2 ) tempo e O ( n ) algoritmo de espaço extra.O(logn) O(n2) O(n)
Mudar para heapsort quando a profundidade da recursão se tornar muito grande (em torno de ) significa que temos um limite superior garantido que é tempo O ( n log n ) e espaço extra O ( log n ) .logn O(nlogn) O(logn)
requisito de espaço extra O ( 1 ) do Heapsort faz com que seja uma melhor escolha mesclar O ( n ) do onde para uma matriz artificial que n ainda possa ser grande.O(1) O(n) n
O motivo pelo qual o heapsort não é usado para a classificação completa é porque é mais lento que o quicksort (devido em parte às constantes ocultas na grande expressão O e em parte ao comportamento do cache)
fonte