Heaps Binárias


Dificuldade ★★☆

3 minutos de Leitura 🕒

O quê é uma Heap Binária?

Uma Heap Binária é uma estrutura de dados não linear que implementa uma fila de prioridades usando uma árvore binária completa. Nessa estrutura, cada elemento possui no máximo dois elementos filhos, e o elemento raiz da heap é o maior ou menor elemento de todos, no caso de uma heap de máximo ou de mínimo, respectivamente.

Onde Heaps Binárias são usadas?

  • Algoritmos de de Ordenação – Uma Heap Binária é usada para implementar o algoritmo de ordenação Heapsort.
  • Roteamento em Grafos – Uma Heap Binária é usada para encontrar o caminho mais curto entre dois nós em um grafo, como no Algoritmo de Dijkstra.
  • Gerenciamento de Recursos – Heaps Binários podem ser usados para gerenciar recursos, como memória ou processos, garantindo que as solicitações com a maior prioridade sejam atendidas primeiro.
  • Bancos de Dados – Heaps Binários são usados em bancos de dados para implementar índices, otimizar consultas de busca e garantir a consistência de dados em operações de atualização.

Qual é a estrutura de uma Heap Binária?

Uma Heap Binária h pode ser construída com os seguintes componentes:

  • h.celulas[]: células que armazenam os elementos da heap binária.
  • h.comprimento: um inteiro que conta o número de elementos na heap binária.

Quais são as operações básicas de uma Heap Binária?

Operação Comprimento

  1. Retorne o valor de h.comprimento.

Operação Inserir

  1. Adicionar o novo elemento na folha mais à direita na última camada da árvore.
  2. Comparar o valor do novo elemento com o valor do seu pai. Se o valor do novo elemento é menor que o valor do pai em uma heap de mínimo, ou se o valor do novo elemento é maior que o valor do pai em uma heap de máximo, troque os dois valores.
  3. Repita o Passo 2 com o novo elemento até que ele esteja na posição correta na árvore, satisfazendo as propriedades de uma heap binária.

Operação Remover Raiz

O algoritmo para remover o elemento raiz também é conhecido como “extrair o mínimo” ou “extrair o máximo”, em uma heap binária de mínimo ou de máximo, respectivamente.

  1. Armazene o valor da raiz em uma variável x.
  2. Substitua o valor da raiz com o valor da folha mais à direita na última camada da árvore.
  3. Compare o valor do nó com os valores de seus filhos. Se o valor do nó é maior que o valor de algum de seus filhos em uma heap de mínimo, ou se o valor do nó é menor que o valor de algum de seus filhos em uma heap de máximo, troque o valor do nó com o valor do filho de maior prioridade.
  4. Repita o Passo 3 até que o nó esteja na posição correta na árvore, satisfazendo as propriedades de uma heap binária.
  5. Retorne o valor armazenado em x.

Como implementar uma Heap Binária?

Veja o código completo no GitHub.