AIUnlimited
🌳

Fundamentos de IA

🌱
AI Seeds

Comece do zero

🌿
AI Sprouts

Construa bases

🌳
AI Branches

Aplique na prática

🏕️
AI Canopy

Aprofunde-se

🌲
AI Forest

Domine a IA

🔨

Mestria em IA

✏️
AI Sketch

Comece do zero

🪨
AI Chisel

Construa bases

⚒️
AI Craft

Aplique na prática

💎
AI Polish

Aprofunde-se

🏆
AI Masterpiece

Domine a IA

📘

Prática de IA

📖
Entendendo modelos open-source

Fundamentos e recursos para modelos open-source

🎯
Do problema à tarefa do modelo

Convertendo problemas de negócio em tarefas de modelo

⚡
Executando seu primeiro modelo

Veja seus primeiros resultados em 30 minutos

🔧
Fine-tuning e avaliação

Ajuste modelos e avalie o desempenho

🚀
Sistemas de aplicação

Construa aplicações IA do mundo real

🎨
IA generativa

Explore modelos AIGC open-source

🤖
Agentes

Aprenda frameworks Agent e ferramentas MCP

📐
Fundamentos complementares

Fundamentos LLM e avaliação

🎓

Claude Academia

🤖
Claude 101

Learn AI basics with Claude

💻
Claude Code 101

Code with Claude as your pair programmer

🤝
Introduction to Claude Cowork

Collaborate with Claude on complex projects

⚙️
Claude Platform 101

Build apps with the Claude API

Laboratório

7 experimentos carregados
🧬Sandbox de Rede Neural🤖IA ou Humano?🥋Dojo de Prompt Engineering🏁Corrida de Algoritmos🧠Trivia de IA🏗️Tela de design de sistemas
🎯Entrevista simuladaEntrar no Laboratório→
🚀

Desenvolvimento de carreira

🚀
Plataforma de Lançamento de Entrevistas

Comece sua jornada

🌟
Domínio Comportamental

Domine habilidades interpessoais

💻
Entrevistas Técnicas

Passe na rodada de programação

🤖
Entrevistas de IA e ML

Domínio em entrevistas de ML

🏆
Oferta e Além

Conquiste a melhor oferta

Começar
AIUnlimited

Licença MIT

沪ICP备18025655号-11

Aprender

  • Fundamentos de IA
  • Prática de IA
  • Claude Academia
  • Laboratório
  • Desenvolvimento de carreira

Comunidade

  • Sobre
  • Perguntas Frequentes

Suporte

  • Termos de Serviço
  • Política de Privacidade
  • Contato
Acadêmicos de IA e Engenharia›✏️ AI Sketch›Aulas›Heaps e Filas de Prioridade
⛰️
AI Sketch • Intermediário⏱️ 18 min de leitura

Heaps e Filas de Prioridade

O que é uma pilha?

Um heap é uma árvore binária completa onde cada pai satisfaz a propriedade heap - seja sempre menor (heap mínimo) ou sempre maior (heap máximo) que seus filhos. "Completo" significa que todos os níveis estão cheios, exceto possivelmente o último, que é preenchido da esquerda para a direita.

       1            Min-heap
      / \
     3   5
    / \
   7   4

Por estar completo, nós o armazenamos em um flat array - sem necessidade de ponteiros. Para índice i: filho esquerdo = 2i + 1, filho direito = 2i + 2, pai = (i - 1) // 2.

Min-Heap vs Max-Heap

| Propriedade | Heap mínimo | Heap máximo | |----------|----------|----------| | Raiz | Elemento menor | Maior elemento | | Pai ≤ Filhos? | ✅ Sim | ❌ Não (≥) | | Extrato dá | Mínimo | Máximo |

O heapq do Python é um min-heap por padrão. Para um heap máximo, negue os valores na inserção e negue novamente na extração.

Inserir e Extrair - Passo a Passo

Inserir - pressione até o final e, em seguida, aumente a bolha (troque com o pai enquanto menor):

import heapq
h = [1, 3, 5, 7]
heapq.heappush(h, 2)  # h becomes [1, 2, 5, 7, 3]

Extrair min - troque a raiz com o último elemento, pop por último e peneire (troque com o filho menor):

smallest = heapq.heappop(h)  # returns 1

Ambas as operações são executadas em O(log n) porque a altura da árvore é log n.

Diagrama mostrando a bolha de inserção e a peneiração de extração em um heap mínimo
Insira as bolhas; extract-min é peneirado.

Heapify - Construindo um Heap em O(n)

Chamar converte uma lista em um heap em O(n), não em O(n log n). Ele funciona de baixo para cima, analisando cada nó que não é folha. Este é um dos resultados de complexidade mais surpreendentes em CS.

Aula 6 de 100% concluído
←Árvores e Grafos Visualizados

Discussão

Entrar participar da discussão

heapq.heapify(arr)
no local
🤯
Construir um heap é O(n), não O(n log n). A maioria dos nós está perto do fundo e quase não precisa ser peneirada - a matemática resulta em tempo linear.

A abstração da fila prioritária

Uma fila de prioridade permite que você sempre acesse primeiro o item de maior prioridade. Heaps são a implementação ideal porque tanto a inserção quanto a extração são O (log n). Use um sempre que precisar "dê-me o melhor item até agora".

Padrão: Principais problemas

"Encontre os K maiores elementos em uma matriz não classificada."

Mantenha um min-heap de tamanho K. Para cada elemento, empurre-o; se o heap exceder K, coloque o menor. O que resta são os K maiores.

import heapq
def top_k(nums, k):
    return heapq.nlargest(k, nums)

Tempo: O(n log k) - muito melhor do que classificar quando k ≪ n.

🧠Verificação Rápida

Você precisa das 5 maiores pontuações de 1 milhão de entradas. Qual tipo e tamanho de heap?

Padrão: Mesclar K Listas Classificadas

Empurre o cabeçalho de cada lista para um heap mínimo. Abra o menor e, em seguida, pressione o próximo elemento da mesma lista. Repita até que todas as listas se esgotem. Tempo: O(N log K) onde N é o total de elementos.

Padrão: mediana do fluxo de dados

Mantenha dois heaps: um max-heap para a metade inferior e um min-heap para a metade superior. Equilibre seus tamanhos para que difiram no máximo 1. A mediana está sempre em uma ou ambas as raízes.

Lower half (max-heap): [1, 2, 3]  ← max = 3
Upper half (min-heap): [4, 5, 6]  ← min = 4
Median = (3 + 4) / 2 = 3.5
🧠Verificação Rápida

Na abordagem mediana de dois heaps, para onde vai primeiro um novo elemento?

Problemas de agendamento

Muitos brilham no agendamento: salas de reunião (monitorar o horário de término mais cedo), agendamento de tarefas com resfriamento ou filas de tarefas da CPU. O principal insight é que um heap rastreia com eficiência “o que termina em seguida”.

🤔
Think about it:Se você precisar do mínimo E do máximo com eficiência, um único heap não servirá. Que combinação de estrutura de dados você usaria?

Quando usar Heap vs Sorted Array vs BST

| Necessidade | Melhor escolha | Por que | |------|-------------|-----| | Extração min/máx repetida | Pilha | O(log n) inserir + extrair | | Dados estáticos, classificação única | Matriz ordenada | O(n log n) uma vez, acesso O(1) | | Consultas de intervalo + estatísticas de pedidos | BST balanceado | O(log n) para tudo | | Top-K de uma transmissão | Monte de tamanho K | O(n log k) total |

🧠Verificação Rápida

Qual operação é O(1) em um min-heap?

Folha de dicas de complexidade

| Operação | Tempo | |-----------|------| | Inserir | O(logn) | | Extrair mín/máx | O(logn) | | Espiar mín/máx | O(1) | | Heapificar | Sobre(n) | | Top-K de n itens | O(n log k) |

🤔
Think about it:Por que você não pode fazer pesquisa binária em um heap, mesmo que esteja armazenado em um array? Pense na ordem de classificação que a propriedade heap realmente garante.

📚 Leitura adicional

  • NeetCode - Heap / Priority Queue - roteiro visual de problemas com problemas de heap agrupados
  • Manual de entrevista técnica - Heap - padrões e dicas concisos
  • Python heapq docs - referência oficial do módulo com exemplos