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›Greedy-algoritmen
🏃
AI Sketch • Gemiddeld⏱️ 17 min leestijd

Greedy-algoritmen

Wat Maakt een Algoritme Greedy?

Een greedy algoritme bouwt stap voor stap een oplossing op, waarbij het altijd de optie kiest die er op dit moment het beste uitziet - zonder eerdere keuzes te heroverwegen. Geen backtracking, geen vooruitkijken.

Het werkt als twee eigenschappen gelden:

  1. Greedy choice property - een lokaal optimale keuze leidt tot een globaal optimale oplossing.
  2. Optimale substructuur - het resterende probleem na elke keuze is een kleinere versie van hetzelfde probleem.

Activiteitenselectie - Het Klassieke Voorbeeld

Gegeven een verzameling activiteiten met begin- en eindtijden: selecteer het maximale aantal niet-overlappende activiteiten.

Greedy strategie: sorteer op eindtijd, kies altijd de activiteit die het eerst eindigt.

def max_activities(intervals):
    intervals.sort(key=lambda x: x[1])
    count, end = 0, 0
    for s, e in intervals:
        if s >= end:
            count += 1
            end = e
    return count

Waarom werkt dit? De activiteit kiezen die het eerst eindigt, laat de meeste ruimte voor toekomstige activiteiten. Geen andere keuze kan beter zijn.

Tijdlijn met activiteitenselectie op basis van vroegste eindtijd
Selectie op vroegste eindtijd maximaliseert het aantal niet-overlappende activiteiten.

Huffman-codering - Concept

Bouw een optimale prefixvrije binaire code door herhaaldelijk de twee laagste-frequentie symbolen samen te voegen. Dit is greedy: bij elke stap voeg je het goedkoopste paar samen. Het resultaat is een boom waarin frequente symbolen korte codes krijgen.

🤯
Huffman-codering wordt gebruikt in JPEG, MP3 en ZIP-compressie. David Huffman bedacht het als student in 1952 - het was een huiswerkopdracht!

Jump Game

Gegeven een array waarbij nums[i] de maximale spronglengte is vanaf index i: bepaal of je de laatste index kunt bereiken.

Greedy aanpak: houd de verst bereikbare index bij. Scan van links naar rechts - als je ooit achterraakt, return false.

def can_jump(nums):
    farthest = 0
    for i, jump in enumerate(nums):
        if i > farthest:
            return False
        farthest = max(farthest, i + jump)
    return True
Les 9 van 100% voltooid
←Recursie en backtracking

Discussion

Sign in to join the discussion

lessons.suggestEdit
🧠Snelle check

Wat stelt de greedy-variabele 'farthest' voor in het Jump Game?

Gas Station

Rij een circulaire route met tankstations. Bij station i krijg je gas[i] brandstof en verbruik je cost[i] om het volgende station te bereiken. Vind het startstation waarmee je het circuit kunt voltooien, of return −1.

Greedy inzicht: als totaal gas ≥ totaal kosten, bestaat er een oplossing. Houd een lopend surplus bij; zodra het onder nul zakt, moet het antwoord na dat punt beginnen.

Task Scheduler

Plan taken met een cooldown van n tussen identieke taken. Greedy: kies altijd de meest frequente resterende taak. Het antwoord hangt af van de maximale frequentie en hoeveel taken die frequentie delen.

Tasks: A A A B B C, cooldown = 2
Schedule: A B C A B _ A
Total = 7
🤔
Think about it:Waarom minimaliseert het kiezen van de meest frequente taak eerst de idle slots in de task scheduler? Wat zou er misgaan als je de minst frequente taak eerst kiest?

Fractionele Knapsack vs 0/1 Knapsack

Fractionele knapsack: je kunt fracties van items meenemen. Greedy werkt - sorteer op waarde-per-gewicht, neem de beste verhouding eerst.

0/1 knapsack: items zijn alles-of-niets. Greedy faalt hier omdat het overslaan van een zwaar-maar-waardevol item slechter kan uitpakken dan twee lichtere items meenemen. Dit vereist dynamisch programmeren.

Items: (weight=3, value=4), (weight=2, value=3), (weight=2, value=3)
Capacity: 4

Greedy (best ratio first): takes item 1 (w=3, v=4) → 1 remaining → can't fit rest → value = 4
Optimal: takes items 2+3 (w=4, v=6) → value = 6 ✗ Greedy fails!
🧠Snelle check

Waarom faalt de greedy aanpak bij het 0/1 knapsack-probleem?

Wanneer Werkt Greedy?

✅ Werkt wanneer je de greedy choice property kunt bewijzen:

  • Intervalplanning, Huffman-codering, minimum spanning trees, Dijkstra's algoritme, wisselgeld met standaard coupures

❌ Faalt wanneer lokale optima geen globaal optimum vormen:

  • 0/1 knapsack, langste pad in algemene grafen, handelsreizigersprobleem

Greedy Correctheid Bewijzen - Exchange Argument

De standaardtechniek: neem aan dat er een optimale oplossing bestaat die de greedy-keuze niet maakt. Laat zien dat je één van haar keuzes kunt verwisselen met de greedy-keuze zonder de oplossing te verslechteren. Dit bewijst dat greedy minstens even goed is.

🧠Snelle check

Waarvoor wordt het 'exchange argument' gebruikt?

Greedy vs Dynamisch Programmeren

| Aspect | Greedy | Dynamisch Programmeren | |--------|--------|------------------------| | Keuzes | Eén beste keuze per stap | Alle deelproblemen verkennen | | Heroverweegt eerder? | Nooit | Ja - slaat deelresultaten op | | Snelheid | Meestal sneller | Hangt af van de toestandsruimte | | Correctheid | Alleen als bewijsbaar | Altijd (mits correct geformuleerd) |

Bij twijfel: begin greedy - als je niet kunt bewijzen dat het werkt, schakel over naar DP.

🤯
Dijkstra's kortste-pad-algoritme is greedy - het verwerkt altijd de dichtstbijzijnde onbezochte knoop. Het werkt omdat randgewichten niet-negatief zijn, waardoor de greedy-keuze veilig is.
🤔
Think about it:Je krijgt muntwaarden [1, 3, 4] en moet wisselgeld maken voor 6. De greedy aanpak kiest 4+1+1=3 munten, maar optimaal is 3+3=2 munten. Wat aan deze coupures breekt de greedy choice property?

📚 Verder Lezen

  • NeetCode - Greedy playlist - samengestelde greedy-problemen met uitleg
  • Tech Interview Handbook - Greedy - wanneer greedy te gebruiken en veelvoorkomende patronen
  • CP-Algorithms - Greedy algorithms - diepere theorie en bewijzen