HEAP ATAI 1 Heaps – Definição Um heap é uma árvore binária T que armazena uma colecção de chaves (ou duplos do tipo (elemento, chave)) de modo a cumprir os requisitos: Propriedade de ordem: chave(pai) chave(filho) (nenhum filho possui valor menor do que seu pai) Propriedade de estrutura: Um heap é uma árvore binária completa. Uma árvore binária completa é uma árvore que é completamente preenchida, com excepção dos nós folhas, que são preenchidos da esquerda para direita. 2 Heaps 4 5 6 15 16 9 25 14 7 12 11 20 8 3 Exemplos que NÃO são heaps 4 Altura de um Heap Um heap T com n chaves possui uma altura = log(n + 1) 5 Operação Inserir Inserir a chave 6 6 Operação Inserir 1 passo: Inserir a chave na próxima posição vaga 2 passo: Subir no heap 7 Subir no heap Trocar as chaves pai, filho que estão fora da ordem estabelecida 8 Subir no heap 9 Subir no heap Subida no heap termina quando uma chave é maior do que a chave do seu pai, ou chega-se ao topo do heap (total #trocas) (h - 1), que é O(log n) 10 Operação remover A chave do topo ao ser removida deixa uma vaga É necessário compor o heap: 1 passo, por na vaga a última chave do heap 2 passo, realizar a operação de descer no heap 11 Descer no heap Descer no heap: compara o pai com o filho mais pequeno. Se o filho é menor, troca ambos de posição 12 Descer no heap 13 Descer no heap 14 Descer no heap Descida termina quando a chave é maior que ambos os filhos ou quando chegar a final. 15 Implementação do Heap public class HeapPriorityQueue implements PriorityQueue { BinaryTree heap; Position last; Comparator comp; ... } 16 Implementação do Heap Duas maneiras de encontrar a posição de inserção (z) no heap. 17 Estrutura Heap Implementação estática: tabela unidimensional, onde a raiz ocupa a posição 1, e os elementos obedecem à relação: esq.i = 2i, dir.i = 2i + 1. Ex: 89 74 32 22 41 15 4 21 9 34 26 8 89 74 32 22 21 41 9 34 15 26 4 8 18