Filas de prioridade e heaps
Forma completa, prioridade entre pai e filhos, construção linear e retirada do extremo.
Dois invariantes
Max-heap junta forma completa e pai maior ou igual aos filhos. Vetor guarda por níveis sem buracos. Raiz é o máximo; o resto não está ordenado.
Com n>0 elementos, os filhos de i são 2*i+1 e 2*i+2. O pai de i>0 é (i-1)/2 com divisão inteira. A altura é .
Subir e descer
- Novo entra no fim e sobe enquanto exceder o pai.
- Saída guarda a raiz, traz o último para o topo e desce pelo maior filho.
- Só o nó mexido pode violar a ordem. Consulta ; alteração .
Constrói de baixo para cima, dos últimos pais até à raiz:
- EntradaComeça no índice 2.
4911247 - Pais 2 e 1Trocas locais resolvem cada um.
4127941 - RaizDesce dois níveis.
1297441
Construção . Inserir um a um pode dar .
Ordenar e pedir à biblioteca
- Heapsort troca raiz com o fim ativo e reduz. Pior , auxiliar , sem estabilidade.
priority_queueé max por omissão.topexige não vazio;popnão devolve.- Mínimo de max-heap está numa folha, mas não necessariamente na mais funda. Procurar custa .
- Prioridade com índice conhecido sobe ou desce em . Achar a posição pode custar .
Top-k maiores usa min-heap de tamanho k. Cordas [4,3,2,6] pagam 5, depois 9, depois 15: total 29.