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

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

Heaps Katia S. Guimarães 2 Busca por Prioridade Até agora nós estudamos estruturas de busca através de chaves. E se o nosso argumento.

Apresentações semelhantes


Apresentação em tema: "Heaps Katia S. Guimarães 2 Busca por Prioridade Até agora nós estudamos estruturas de busca através de chaves. E se o nosso argumento."— Transcrição da apresentação:

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

2 2 Busca por Prioridade Até agora nós estudamos estruturas de busca através de chaves. E se o nosso argumento de busca for diferente? Se nós quisermos recuperar, por exemplo, o elemento que tem a maior chave?

3 katia@cin.ufpe.br3 Estrutura Heap Heap é uma estrutura de prioridades, na forma de árvore binária semi-completa, que representa uma ordem parcial entre os elementos do conjunto. Ex: 89 921 22 2634 41 74 8 15 32 4

4 katia@cin.ufpe.br4 Estrutura Heap Ex: 89 921 22 2634 41 74 8 15 32 4 Implementação usual: Array unidimensional, onde a raiz ocupa a posição 1, e os elementos obedecem à relação: esq. i = 2 i, dir. i = 2 i + 1. 743289224115421934268

5 katia@cin.ufpe.br5 Construção de um Heap A construção é feita a partir do array com os elementos desordenados, e pode ser feita “bottom-up” ou “top-down”. Na construção bottom-up, o controle segue das folhas à raiz (ou seja, da direita para a esquerda no array), construindo um heap único a partir de dois heaps menores + um novo elemento.

6 katia@cin.ufpe.br6 Construindo um Heap Bottom-up Base: Se n = 1, então a árvore é uma folha, não há o que fazer (a árvore já é um heap). 21 934 Ex: 9 34

7 katia@cin.ufpe.br7 Construindo um Heap Bottom-up Passo: Se n > 1, então usando a Hipótese de Indução, só é necessário ajustar a ordem parcial com relação ao novo elemento. 21934 Ex: 9 21 34 921 34 21934 

8 katia@cin.ufpe.br8 Heapify 9 921 22 2634 41 74 Toma: Dois (sub)heaps + um novo elemento  Gera:  um novo heap contendo todos. Ex. 74224121934267422412193426 2221 74 2634 41 

9 katia@cin.ufpe.br9 Heapify 9 921 22 2634 41 74 Só precisamos encontrar um local apropriado para o elemento nesta nova raiz. 74224121934267422412193426 2221 74 2634 41 

10 katia@cin.ufpe.br10 Algoritmo Heapify Algoritmo Heapify( i ) Enquanto i  int (n/2) /* i tem filhos */ faça { Se i < (n/2) /* 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 { A[ i ]  A[maior]; i  maior } senão i  n /* deixe o laço */ }

11 katia@cin.ufpe.br11 Heapify 921 22 2634 41 74 21 9 2221 74 2634 41  74 22212634 41 9 9 74 2634 41  22 i=1 i=2 i=5 i=7

12 katia@cin.ufpe.br12 Construindo um Heap Bottom-up Algoritmo Constrói-Heap: Para i  int (n/2) até 1 faça Heapify 7421 22 2641 34 9 7421 22 2634 41 9 74224121934267422412193426 

13 katia@cin.ufpe.br13 Construindo um Heap Bottom-up  7421 22 2634 41 9 7422412193426 2221 74 2634 41 9 7422412193426

14 katia@cin.ufpe.br14 Construindo um Heap Bottom-up  921 22 2634 41 74 22412193426 2221 74 2634 41 9 7422412193426

15 katia@cin.ufpe.br15 Construindo um Heap Bottom-up Algoritmo Constrói-Heap: Para i  n/2 até 1 faça Heapify (A, n, i) Custo para construir um heap: T(n) = n / 2 · log (n) = O (n · log (n)) Será que este custo é exato?

16 katia@cin.ufpe.br16 Custo para construir um Heap Bottom-up A cada execução da rotina Heapify o número de comparações é no máximo o dobro da altura da sub-árvore que está sendo transformada em heap. Logo, no total queremos a soma das alturas de todas as sub-árvores dentro de uma árvore de altura h: H(h) = 2 · H(h-1) + h

17 katia@cin.ufpe.br17 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 0 1 2 3 4 5 6 7... H(h) 0 1 4 11 26 57 120 247... 2 h+1 2 4 8 16 32 64 128 256...

18 katia@cin.ufpe.br18 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 0 1 2 3 4 5 6 7... H(h) 0 1 4 11 26 57 120 247... 2 h+1 2 4 8 16 32 64 128 256... H(h) = 2 h+1 - (h+2 ) = O (n)


Carregar ppt "Heaps Katia S. Guimarães 2 Busca por Prioridade Até agora nós estudamos estruturas de busca através de chaves. E se o nosso argumento."

Apresentações semelhantes


Anúncios Google