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›Patronen voor binair zoeken
🔍
AI Sketch • Gemiddeld⏱️ 17 min leestijd

Patronen voor binair zoeken

Klassieke Binary Search - Korte Herhaling

Binary search halveert de zoekruimte bij elke stap. In een gesorteerde array van n elementen vind je een doelwaarde in O(log n) tijd.

def binary_search(nums, target):
    lo, hi = 0, len(nums) - 1
    while lo <= hi:
        mid = (lo + hi) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            lo = mid + 1
        else:
            hi = mid - 1
    return -1

Eenvoudig - maar de echte kracht van binary search reikt veel verder dan gesorteerde arrays.

Het Concept van de Zoekruimte

Binary search werkt wanneer er een monotone conditie over een bereik bestaat. De "array" hoeft niet eens te bestaan - je hebt alleen een bereik [lo, hi] nodig en een functie die van False naar True (of andersom) omslaagt bij een grens.

Search space:  [lo .................. hi]
Condition:      F  F  F  F  T  T  T  T
                          ^-- answer
🤯
Binary search werd voor het eerst gepubliceerd in 1946, maar de eerste foutloze implementatie verscheen pas in 1962 - 16 jaar off-by-one errors!

Binary Search op het Antwoord

In plaats van in een array te zoeken, doorzoek je de antwoordruimte. Vraag: "Kan ik resultaat X bereiken?" Zo ja, probeer kleiner; zo nee, probeer groter.

Voorbeeld: Koko Eating Bananas

Koko heeft n stapels bananen en h uur. Vind de minimale eetsnelheid zodat ze op tijd klaar is.

def min_speed(piles, h):
    lo, hi = 1, max(piles)
    while lo < hi:
        mid = (lo + hi) // 2
        hours = sum((p + mid - 1) // mid for p in piles)
        if hours <= h:
            hi = mid      # speed works, try slower
        else:
            lo = mid + 1  # too slow, go faster
    return lo

De antwoordruimte is [1, max(piles)] en de conditie is monotoon - hogere snelheid betekent altijd minder uren.

Les 7 van 100% voltooid
←Heaps en priority queues

Discussion

Sign in to join the discussion

lessons.suggestEdit
Binary search die de antwoordruimte verkleint voor minimale eetsnelheid
Binary search op het antwoord: verklein het haalbare bereik bij elke iteratie.

Geroteerde Gesorteerde Array

Een gesorteerde array geroteerd bij een draaipunt: [4, 5, 6, 7, 0, 1, 2]. Eén helft is altijd gesorteerd. Vergelijk mid met lo om te bepalen welke helft, en kijk dan of het doel in de gesorteerde helft valt.

[4, 5, 6, 7, 0, 1, 2]
 L        M        R
Left half [4..7] is sorted.
Target 1 not in [4..7] → search right.
🧠Snelle check

In een geroteerde gesorteerde array [3,4,5,1,2], welke helft is gesorteerd als mid=2 (waarde 5)?

Eerste en Laatste Voorkomen

Om het eerste voorkomen te vinden: als je het doel raakt, stop dan niet - zet hi = mid en blijf links zoeken. Voor het laatste: zet lo = mid + 1 en zoek rechts.

Dit paar zoekopdrachten geeft je ook het aantal voorkomens: last - first + 1.

Piekelement

Een element dat groter is dan beide buren. Zelfs in een ongesorteerde array werkt binary search: als nums[mid] < nums[mid + 1], ligt de piek rechts; anders links. O(log n).

🤔
Think about it:Waarom werkt het vinden van een piek met binary search, ook al is de array niet gesorteerd? Welke eigenschap vervangt hier de gesorteerde volgorde?

Zoeken in een 2D Matrix

Als rijen gesorteerd zijn en het eerste element van elke rij groter is dan het laatste van de vorige, behandel de matrix dan als één gesorteerde array van m × n elementen. Map index k naar rij k // n, kolom k % n.

Vierkantswortel Zonder Bibliotheek

Vind het grootste gehele getal x waarvoor x * x ≤ n. Zoekruimte: [0, n]. Klassieke binary search op het antwoord.

def sqrt(n):
    lo, hi = 0, n
    while lo <= hi:
        mid = (lo + hi) // 2
        if mid * mid <= n:
            lo = mid + 1
        else:
            hi = mid - 1
    return hi

Het "Minimaliseer het Maximum"-Patroon

Problemen als "split array largest sum" of "capacity to ship packages within D days" vragen je om het slechtste geval te minimaliseren. Het antwoord is monotoon: als capaciteit C werkt, werkt C+1 ook. Binary search op C.

🧠Snelle check

Wat is de zoekruimte voor binary search bij 'Capacity to Ship Packages in D Days'?

Het Universele Template

lo, hi = min_possible, max_possible
while lo < hi:
    mid = (lo + hi) // 2
    if condition(mid):
        hi = mid        # mid works, try smaller
    else:
        lo = mid + 1    # mid fails, need larger
return lo

Pas hi = mid vs lo = mid aan naargelang je de eerste True of laatste True zoekt.

🧠Snelle check

Wat is de tijdscomplexiteit van binary search op een antwoordruimte van grootte S met een O(n) haalbaarheidscheck?

🤔
Think about it:Wanneer je "minimum possible maximum" of "maximum possible minimum" in een probleemstelling ziet, waar moet je dan meteen aan denken?

📚 Verder Lezen

  • NeetCode - Binary Search playlist - samengestelde problemen van makkelijk tot moeilijk
  • Tech Interview Handbook - Binary Search - patronen, tips en valkuilen
  • LeetCode Binary Search studieplan - opbouwende probleemset