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

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

Heapsort Katia S. Guimarães

Apresentações semelhantes


Apresentação em tema: "Heapsort Katia S. Guimarães"— Transcrição da apresentação:

1 Heapsort Katia S. Guimarães

2 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 2 i  n /* i tem filhos */ faça { Se 2 i < n /* i tem dois filhos */ então Se A[ 2 i ] > A[ 2 i + 1 ] então maior  2 i senão maior  2 i + 1 senão /* o único é o maior */ maior  2 i ; 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 

5 Heapsort 

6 Heapsort 

7 Heapsort 

8 Heapsort 

9 Heapsort 

10 Heapsort 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 = 0  0 h = 1  1 h = 2  4

13 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) h H(h) = 2 h+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 · log 2 (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: 1.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 "Heapsort Katia S. Guimarães"

Apresentações semelhantes


Anúncios Google