Heaps e Filas de Prioridade¶
Um min-heap binário é uma árvore binária completa que satisfaz:
O fato de ser completa permite uma representação compacta em array. Para um
índice i baseado em zero:
- pai:
(i - 1) / 2parai > 0; - filho esquerdo:
2i + 1; - filho direito:
2i + 2.
Operações¶
| Operação | Heap binário |
|---|---|
| Consultar o mínimo | Θ(1) |
| Inserir | O(log n) |
| Remover o mínimo | O(log n) |
Construir com n itens |
Θ(n) |
| Encontrar um valor arbitrário | Θ(n) |
A construção bottom-up é linear porque a maioria dos nós está perto das folhas
e percorre apenas uma distância curta. Multiplicar n nós por log n fornece
um limite superior válido, mas pouco justo.
Java¶
Queue<Integer> priorities = new PriorityQueue<>();
priorities.add(8);
priorities.add(3);
priorities.add(5);
int smallest = priorities.remove(); // 3
Não há garantia de que a iteração sobre um PriorityQueue produza uma ordem
classificada; apenas as operações sobre a cabeça seguem o contrato de prioridade.
Exercícios¶
- Restaure o heap após remover a raiz.
- Derive um comparador para max-heap sem overflow na subtração de inteiros.
- Explique por que um heap não é uma estrutura eficiente de busca geral.