AI EducademyAIEducademy
🌳

AI-Fundamenten

🌱
AI Seeds

Begin bij nul

🌿
AI Sprouts

Bouw een fundament

🌳
AI Branches

Pas toe in de praktijk

🏕️
AI Canopy

Ga de diepte in

🌲
AI Forest

Beheers AI

🔨

AI-Meesterschap

✏️
AI Sketch

Begin bij nul

🪨
AI Chisel

Bouw een fundament

⚒️
AI Craft

Pas toe in de praktijk

💎
AI Polish

Ga de diepte in

🏆
AI Masterpiece

Beheers AI

🚀

Carrière Klaar

🚀
Interview Startplatform

Start je reis

🌟
Gedragsinterview Meesterschap

Beheers soft skills

💻
Technische Interviews

Slaag voor de codeerronde

🤖
AI- & ML-interviews

ML-interview meesterschap

🏆
Aanbod & verder

Bemachtig het beste aanbod

Alle programma's bekijken→

Lab

7 experimenten geladen
🧠Neuraal netwerk speeltuin🤖AI of mens?💬Prompt lab🎨Beeldgenerator😊Sentimentanalyse💡Chatbot bouwer⚖️Ethiek simulator
🎯Proef-sollicitatieGa naar het lab→
nav.journeyBlog
🎯
Over ons

AI-onderwijs toegankelijk maken voor iedereen, overal

❓
nav.faq

Common questions answered

✉️
Contact

Get in touch with us

⭐
Open Source

Openbaar gebouwd op GitHub

Begin met leren, het is gratis
AI EducademyAIEducademy

MIT-licentie. Open source

Leren

  • Opleidingen
  • Lessen
  • Lab

Community

  • GitHub
  • Bijdragen
  • Gedragscode
  • Over ons
  • FAQ

Ondersteuning

  • Koop een koffie voor me ☕
  • footer.terms
  • footer.privacy
  • footer.contact
AI & Engineering Opleidingen›✏️ AI Sketch›Lessen›Heaps en priority queues
⛰️
AI Sketch • Gemiddeld⏱️ 18 min leestijd

Heaps en priority queues

Wat Is een Heap?

Een heap is een complete binaire boom waarbij elke ouder voldoet aan de heap-eigenschap - altijd kleiner (min-heap) of altijd groter (max-heap) dan zijn kinderen. "Compleet" betekent dat elk niveau vol is, behalve mogelijk het laatste dat van links naar rechts wordt gevuld.

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

Omdat de boom compleet is, slaan we hem op in een platte array - geen pointers nodig. Voor index i: linkerkind = 2i + 1, rechterkind = 2i + 2, ouder = (i - 1) // 2.

Min-Heap vs Max-Heap

| Eigenschap | Min-Heap | Max-Heap | |------------|----------|----------| | Wortel | Kleinste element | Grootste element | | Ouder ≤ Kinderen? | ✅ Ja | ❌ Nee (≥) | | Extract geeft | Minimum | Maximum |

Python's heapq is standaard een min-heap. Voor een max-heap negeer je waarden bij insert en negeer je opnieuw bij extract.

Insert en Extract - Stap voor Stap

Insert - voeg toe aan het einde, dan bubble up (wissel met ouder zolang kleiner):

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

Extract min - wissel wortel met laatste element, verwijder laatste, dan sift down (wissel met kleinste kind):

smallest = heapq.heappop(h)  # returns 1

Beide operaties kosten O(log n) omdat de boomhoogte log n is.

Diagram van insert bubble-up en extract sift-down op een min-heap
Insert bubbelt omhoog; extract-min zift omlaag.

Heapify - Een Heap Bouwen in O(n)

heapq.heapify(arr) zet een lijst om naar een heap in O(n), niet O(n log n). Het werkt bottom-up door elke niet-bladknoop omlaag te ziften. Dit is een van de meest verrassende complexiteitsresultaten in de informatica.

Les 6 van 100% voltooid
←Bomen en grafen gevisualiseerd

Discussion

Sign in to join the discussion

lessons.suggestEdit
in-place
🤯
Een heap bouwen kost O(n), niet O(n log n). De meeste knooppunten zitten onderaan en hoeven nauwelijks omlaag te ziften - wiskundig komt het uit op lineaire tijd.

De Priority Queue-abstractie

Een priority queue geeft je altijd toegang tot het item met de hoogste prioriteit. Heaps zijn de standaardimplementatie omdat zowel insert als extract O(log n) zijn. Gebruik er een wanneer je "geef me het beste item tot nu toe" nodig hebt.

Patroon: Top-K Problemen

"Vind de K grootste elementen in een ongesorteerde array."

Houd een min-heap van grootte K bij. Voor elk element: push het; als de heap groter wordt dan K, pop het kleinste. Wat overblijft zijn de K grootste.

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

Tijd: O(n log k) - veel beter dan sorteren wanneer k ≪ n.

🧠Snelle check

Je hebt de 5 hoogste scores nodig uit 1 miljoen entries. Welk heap-type en welke grootte?

Patroon: K Gesorteerde Lijsten Samenvoegen

Push de kop van elke lijst in een min-heap. Pop het kleinste, push dan het volgende element uit diezelfde lijst. Herhaal tot alle lijsten leeg zijn. Tijd: O(N log K) waarbij N het totaal aantal elementen is.

Patroon: Mediaan uit een Datastroom

Onderhoud twee heaps: een max-heap voor de onderste helft en een min-heap voor de bovenste helft. Houd hun grootte in balans (maximaal 1 verschil). De mediaan zit altijd bij één of beide wortels.

Lower half (max-heap): [1, 2, 3]  ← max = 3
Upper half (min-heap): [4, 5, 6]  ← min = 4
Median = (3 + 4) / 2 = 3.5
🧠Snelle check

Bij de twee-heap mediaan-aanpak, waar gaat een nieuw element eerst naartoe?

Planningsproblemen

Heaps blinken uit bij planning: vergaderruimtes (houd de vroegste eindtijd bij), taakplanning met cooldowns, of CPU-taakwachtrijen. Het kernidee: een heap houdt efficiënt bij "wat eindigt het eerst."

🤔
Think about it:Als je zowel het minimum ALS het maximum efficiënt nodig hebt, volstaat een enkele heap niet. Welke combinatie van datastructuren zou je gebruiken?

Wanneer Heap vs Gesorteerde Array vs BST

| Behoefte | Beste keuze | Waarom | |----------|-------------|--------| | Herhaald min/max extractie | Heap | O(log n) insert + extract | | Statische data, eenmalig sorteren | Gesorteerde array | O(n log n) eenmalig, O(1) toegang | | Bereik-queries + rangorde-statistieken | Gebalanceerde BST | O(log n) voor alles | | Top-K uit een stroom | Heap van grootte K | O(n log k) totaal |

🧠Snelle check

Welke operatie is O(1) in een min-heap?

Complexiteitsoverzicht

| Operatie | Tijd | |----------|------| | Insert | O(log n) | | Extract min/max | O(log n) | | Peek min/max | O(1) | | Heapify | O(n) | | Top-K uit n items | O(n log k) |

🤔
Think about it:Waarom kun je geen binary search doen op een heap, ook al is die opgeslagen in een array? Denk na over welke gesorteerde volgorde de heap-eigenschap eigenlijk garandeert.

📚 Verder Lezen

  • NeetCode - Heap / Priority Queue - visuele probleemroadmap met gegroepeerde heap-problemen
  • Tech Interview Handbook - Heap - beknopte patronen en tips
  • Python heapq docs - officiële modulereferentie met voorbeelden