SlideShare uma empresa Scribd logo
1 de 20
Estrutura de
Dados
Heaps
profa. Divani Barbosa
Aula 14 parte 1
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
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
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
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
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.
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.
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
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
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
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.
12
3.a) 3.b)
Troca
pelo filho
maior
3.c) 3.d)
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
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.
15
Nó a ser
inserido
b)
c) d)
a)
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
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
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
 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)
20
 Sistema controlador de vôo

Mais conteúdo relacionado

Mais procurados (20)

Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Aula 15
Aula 15Aula 15
Aula 15
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Aula 01
Aula 01Aula 01
Aula 01
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Pged 04
Pged 04Pged 04
Pged 04
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Knuth
KnuthKnuth
Knuth
 
Trabalho de algoritmos
Trabalho de algoritmosTrabalho de algoritmos
Trabalho de algoritmos
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 

Mais de Divani Barbosa (17)

Banco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface GraficaBanco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface Grafica
 
Aula 19
Aula 19Aula 19
Aula 19
 
Aula 18
Aula 18Aula 18
Aula 18
 
Aula 17
Aula 17Aula 17
Aula 17
 
Aula14
Aula14Aula14
Aula14
 
Aula 12
Aula 12Aula 12
Aula 12
 
Aula 11
Aula 11Aula 11
Aula 11
 
Aula 10
Aula 10 Aula 10
Aula 10
 
Aula 9
Aula 9Aula 9
Aula 9
 
Aula 8
Aula 8Aula 8
Aula 8
 
Aula 7
Aula 7 Aula 7
Aula 7
 
Aula 6
Aula 6Aula 6
Aula 6
 
Aula 5
Aula 5 Aula 5
Aula 5
 
Aula 4
Aula 4 Aula 4
Aula 4
 
Aula 3
Aula 3Aula 3
Aula 3
 
Aula 2
Aula 2Aula 2
Aula 2
 
Aula 1
Aula 1Aula 1
Aula 1
 

Aula 20

  • 1. Estrutura de Dados Heaps profa. Divani Barbosa Aula 14 parte 1
  • 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)