2. Comparação das Estruturas de Armazenamento
vistas que oferecem acesso rápido ao item de
dados com a maior chave
2arvore binária
balanceada
arvore binária
degenerada
arvore binária
degenerada
(pior caso)
Estrutura Inserção Eliminação Acesso ao
item com
maior chave
Vetor Ordenado (aula 2 – parte 2) O(n) O(n) O(1)
Fila de Prioridade (aula 8 – parte 2) O(n) O(1) O(1)
Arvore Binária (pior caso) O(n) O(n) O(n)
Arvore Binária (balanceada) O(log n) O(log n) O(log n)
3. 3
Estrutura Inserção Eliminação Acesso ao
item com
maior chave
Vetor Ordenado (aula 2 – parte 2) O(n) O(n) O(1)
Fila de Prioridade (aula 8 – parte 2) O(n) O(1) O(1)
Arvore Binária (pior caso) O(n) O(n) O(n)
Arvore Binária (balanceada) O(log n) O(log n) O(log n)
HeapSort O(log n) O(log n) O(1)
Comparação das Estruturas de Armazenamento
Vistas que oferecem acesso rápido ao item de
dados com a maior chave
4. 4
Heaps
Uma Heap é uma estrutura de dados do tipo árvore
binária balanceada. Sendo assim, ela oferece inserção e
eliminação num tempo O(log n).
Ela é o tipo de estrutura ideal para aplicações que
necessitam de acesso rápido ao item de dados com a menor
e maior chave.
Comparada com uma Fila de Prioridades, a Heap não é tão
rápida na eliminação, porém, é muito mais rápido para
inserção.
É o método ideal para implementar filas de prioridades
onde velocidade seja importante e haja muita inserções.
Estrutura de Armazenamento de Dados de
Propósito Especial
5. Uma Heap é uma arvore binária com as seguintes
características:
1. É completo. Isso significa que ele fica
completamente preenchido, lendo da esquerda
para direita cada linha, embora a última linha não
precise estar cheia.
Exemplo:
Arvore binária completa Arvore binária incompleta
6. Vetor
da Heap Heap
2. É implementado como vetor. Usa-se vetor para
armazenamento do conteúdo, ao invés de
referencias para conectar os Nós.
O vetor é armazenado na memória, a Heap é
apenas uma representação conceitual.
7. Vetor
da Heap Heap
O fato de que a Heap é uma Arvore Binária Completa
implica na inexistência de buracos no vetor usado para
representa-la. Cada célula esta preenchida de 0 a n-1.
8. 3. Cada Nó de uma Heap satisfaz a condição de
Heap, que estabelece que a chave de todo Nó é
maior ou igual que as chaves de seus filhos.
9. 9
Fracamente ordenado:
Uma Heap é fracamente ordenado em comparação a
uma arvore binária de busca (que usa algoritmo
simples).
Em uma Heap percorrer os Nós em ordem é difícil
porque o principio de organização (condição de Heap)
não é tão forte.
Só se pode afirmar que em
todo caminho da raiz até a
folha os Nós estão
ordenados em ordem
descendente.
Como Heaps são
fracamente ordenados,
algumas operações são
difíceis ou impossíveis.
10. 10
Uma Heap não permite uma busca conveniente para uma
chave especifica. Isso porque não há informação suficiente
para decidir qual dos dois filhos de um Nó selecionar para
descer num nível mais baixo durante a busca.
Portanto um Nó com uma chave especificada não pode ser
eliminado num tempo O(log n), porque não há maneira de
encontra-lo.
A organização de uma
Heap esta próxima de um
estado de aleatoriedade.
Entretanto, a ordem é
suficiente apenas para
permitir remoção rápida
do Nó máximo e inserção
rápida de novos Nós.
11. 11
Remoção significa remover um Nó com a chave
máxima. Esse Nó é sempre a raiz e ela esta no índice
zero do vetor da Heap, portanto remove-lo é fácil.
Remoção
O problema é que restara um “buraco” que tem de ser
preenchido. Para isso usa-se os seguintes passos:
1. Remova a raiz
2. Mova o ultimo Nó para raiz
vHeap[0] = vHeap[n-1];
n--;
3. Passe para baixo o ultimo Nó até que ele fique abaixo de
um Nó maior e acima de um Nó menor.
13. 13
3.e)
A cada posição do Nó destino o algoritmo de passagem
para baixo verifica qual o filho maior. Ele então troca o Nó
destino com o filho maior. Se ele tentasse trocar com o
filho menor, esse filho se tornaria pai de um filho maior, o
que viola a condição da Heap.
Move para baixo:
ERRADO CORRETO
14. 14
A inserção usa passagem para cima, ao invés de para
baixo. Inicialmente o Nó a ser inserido é colocado na
primeira posição aberta no final do vetor.
Inserção
vHeap[n] = novo;
n++;
Logo após, caso se faça necessário para se manter a
condição de Heap, o novo Nó será passado para cima até
que fique abaixo de um Nó com uma chave maior e acima
de um Nó com uma chave menor.
16. 16
e)
O algoritmo de passagem para cima é mais simples que
para baixo, pois há somente uma comparação (dois filhos
não precisam ser comparados).
Move para cima:
17. 17
Resumo
A Heap é a implementação eficiente de uma fila de
prioridades;
Uma Heap oferece acesso rápido ao maior item
(sempre está na raiz)
Uma Heap oferece remoção do maior e inserção de
itens em tempo O(logN)
A Heap não suporta travessia ordenada de dados,
localizar ou eliminar item com chave especifica.
A Heap é implementada como um vetor
representando uma arvore binária completa. A raiz
esta no índice zero e o ultimo item no item n-1.
Cada nó tem uma chave menor que seus pais e
maior que seus filhos
18. 18
Aplicações
Escalonamento de tarefas em computadores onde
alguns programas e atividades devem ser
executados antes que outros, e, portanto, recebem
uma prioridade mais alta.
19. 19
Sistemas de Armas (cruzador de uma esquadra)
Em um cruzador de guerra diversas ameaças, como
aviões, misseis, submarinos, etc.) devem ser
detectadas e priorizadas.
Por exemplo: Um míssil que esteja a uma distancia
curta do cruzador recebe uma prioridade mais alta
que um avião a longa distancia)