A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Katia S. Guimarães katia@cin.ufpe.br Heapsort Katia S. Guimarães katia@cin.ufpe.br katia@cin.ufpe.br.

Apresentações semelhantes


Apresentação em tema: "Katia S. Guimarães katia@cin.ufpe.br Heapsort Katia S. Guimarães katia@cin.ufpe.br katia@cin.ufpe.br."— Transcrição da apresentação:

1 Katia S. Guimarães katia@cin.ufpe.br
Heapsort Katia S. Guimarães

2 Recordando a construção de um Heap
Algoritmo Constrói-Heap: Para i  n/2 até 1 faça Heapify (A, n, i ) Onde: A é o array contendo os elementos n é o número de elementos no array, e i é o índice do nó raiz da sub-árvore considerada.

3 Algoritmo Heapify Algoritmo Heapify(A, n, i )
Enquanto 2i  n /* i tem filhos*/ faça { Se 2i < n /* i tem dois filhos*/ então Se A[2i ] > A[2i +1] então maior  2i senão maior  2i +1 senão /* o único é o maior*/ maior  2i ; Se A[i ] < A[maior] então então {A[i ]  A[maior]; i  maior } senão i  n /* deixe o laço*/ }

4 Heapsort Após construir o heap, o array é visto como
contendo: um heap + parte da solução 74 41 34 21 9 22 26 74 22 41 21 9 34 26 41 26 34 21 9 22 74 74 41 41 34 26 34 21 9 22 26 21 9 22 74

5 Heapsort 41 26 34 21 9 22 74 34 26 22 21 9 41 74 41 26 34 21 9 22 74 41 34 26 34 26 22 21 9 22 74 21 9 41 74

6 Heapsort 34 26 22 21 9 41 74 34 26 22 21 9 41 74 26 21 22 9 34 41 74 34 26 26 22 21 22 21 9 41 74 9 34 41 74

7 Heapsort 26 21 22 9 34 41 74 26 21 22 9 34 41 74 22 21 9 26 34 41 74 26 22 21 22 21 9 9 34 41 74 26 34 41 74

8 Heapsort 22 21 9 26 34 41 74 22 21 9 26 34 41 74 21 9 22 26 34 41 74 22 21 21 9 9 22 26 34 41 74 26 34 41 74

9 Heapsort 21 9 22 26 34 41 74 21 9 22 26 34 41 74 9 21 22 26 34 41 74 21 9 9 22 21 22 26 34 41 74 26 34 41 74

10 Algoritmo Heapsort (A, n) Constrói-Heap(A, n) Para j  n até 2 faça
{ exchange (A[1], A[ j]); Heapify (A, j, 1) }

11 Custo do Heapsort T(n) = Custo (Constrói-Heap) + Custo (laço)

12 Relembrando o custo para construir um Heap bottom-up
Qual é a soma das alturas de todas as sub-árvores dentro de uma árvore de altura h ? h = 2  4 h = 0 0 h = 1 1

13 Relembrando o custo para construir um Heap bottom-up
A soma das alturas de todas as sub-árvores dentro de uma árvore de altura h é dada por: H(h) = 2 · H(h-1) + h H(0) = 0 h H(h) 2h H(h) = 2h+1 - (h+2) =  (n)

14 Custo do Laço O laço é executado exatamente n-1 vezes.
A cada iteração, ocorre - Uma troca de elementos no array (tempo constante) - Heapify (tempo proporcional à altura da árvore, que é logarítmico) Logo, Custo (laço) =  (n · log (n) )

15 Custo do Heapsort T(n) = Custo (Constrói-Heap) + Custo (laço)
T(n) = [ (n)] + [n · log2 (n)] = =  (n · log (n) ) OBS: A constante do Heapsort é menor que a do MergeSort. Por quê?

16 Constantes do Heapsort vs. MergeSort
1. A cada comparação, o MergeSort realiza uma movimentação de dados, enquanto que o Heapsort nem sempre faz isso. 2. Além disso, o MergeSort sempre faz as n • log n comparações, enquanto o HeapSort pode encerrar a reorganização do heap sem precisar descer até uma folha.

17 Heapsort OBSERVAÇÕES:
O algoritmo Heapsort tem um número de comparações de chaves no pior caso comparável ao do MergeSort. Mas como ele faz muito menos cópias de chaves, ele é consideravelmente mais rápido. 2. Em termos de espaço, o Heapsort é um algoritmo in-place, enquanto o MergeSort necessita do dobro do espaço necessário para as chaves.

18 Para que serve o MergeSort?
Se o algoritmo Heapsort é melhor que o MergeSort em tempo de execução em em espaço, para que serve o MS? O MergeSort tem duas características muito interessantes: - Localidade de referências (a cada chamada recursiva, as comparações vão-se fazendo entre elementos cada vez mais próximos), e - Blocos de tamanho controlável.

19 Para que serve o MergeSort?
Essas duas características são muito úteis quando se está ordenando um arquivo muito grande, que precisa ser mantido em dispositivo externo. A localidade de referências diminui o número de acessos a dispositivos externos (o “gargalo” neste tipo de aplicação), e permite o controle no tamanho dos blocos de dados a serem lidos.


Carregar ppt "Katia S. Guimarães katia@cin.ufpe.br Heapsort Katia S. Guimarães katia@cin.ufpe.br katia@cin.ufpe.br."

Apresentações semelhantes


Anúncios Google