Algoritmos e estruturas de dados · Estruturas de dados · 5 min de leitura
Heaps e filas de prioridade
O menor (ou maior) sempre no topo, com inserção e remoção em O(log n): a estrutura por trás de agendadores, top-k, Dijkstra e do heapsort — guardada num simples array.
Arraste para o lado para ver o diagrama inteiro.
A regra do heap
Num min-heap, cada pai é menor ou igual aos filhos; logo o menor de todos está na raiz e ler o topo é O(1). Não é uma árvore ordenada como a BST — irmãos não têm ordem entre si —, e é exatamente essa folga que deixa inserir e remover baratos: O(log n).
Um array disfarçado de árvore
O heap é guardado num array, sem ponteiros. Com índices começando em 0, os filhos de i ficam em 2i + 1 e 2i + 2, e o pai em (i − 1) / 2. Inserir: coloca no fim e sobe. Remover o topo: põe o último no lugar da raiz e desce trocando com o menor filho.
Onde aparece
PriorityQueue(Java/Kotlin) eHeapdo Swift Collections.- Agendadores de tarefas e timers (o próximo a vencer no topo).
- Top-k: os k maiores de n itens com um heap de tamanho k, O(n log k).
- Dijkstra (menor caminho) e intercalar k listas ordenadas.
No código: antes e depois
// O(n log n): ordena tudo só para pegar k itens
fun topK(vendas: List<Int>, k: Int) = vendas.sortedDescending().take(k) import java.util.PriorityQueue
// O(n log k): um min-heap guarda só os k maiores vistos até agora
fun topK(vendas: List<Int>, k: Int): List<Int> {
val heap = PriorityQueue<Int>() // menor no topo
for (v in vendas) {
heap.add(v)
if (heap.size > k) heap.poll() // descarta o menor dos k + 1
}
return heap.sortedDescending()
} Com 10 milhões de vendas e k = 10, o heap nunca passa de 11 itens: pouca memória e cada operação custa uns 4 passos.
Em resumo
- Min-heap: o menor sempre na raiz.
- Topo O(1); inserir e remover O(log n).
- Guardado num array: filhos em 2i+1 e 2i+2.
- Top-k com heap de tamanho k: O(n log k).
- Não serve para buscar um valor qualquer (O(n)).
Exercícios
Responda e confira na hora. Complexidades valem com ou sem espaços, como O(n log n).
-
Num min-heap, onde fica o menor elemento?
Ver a solução
Resposta: na raiz. Cada pai é menor ou igual aos filhos, então o menor de todos sobe até a raiz (índice 0 do array).
-
Num heap guardado em array (índices a partir de 0), quais são os índices dos filhos do nó 2? Responda como "5 e 6".
Ver a solução
Resposta: 5 e 6. Filhos de i: 2i + 1 = 5 e 2i + 2 = 6.
-
Qual a complexidade de achar os k maiores de n itens com um min-heap de tamanho k?
Ver a solução
Resposta: O(n log k). Cada um dos n itens faz uma inserção (e talvez uma remoção) num heap de tamanho k: O(log k) cada.
Perguntar à IA
Monte um prompt pronto sobre Heaps e filas de prioridade na sua linguagem e no seu caso, e abra num chat gratuito.
O prompt vai para o site que você escolher. Não cole senhas, tokens nem dados reais de clientes. Para Gemini e outros, copie e cole.