AIUnlimited
🌳

KI-Grundlagen

🌱
AI Seeds

Starte bei null

🌿
AI Sprouts

Fundament aufbauen

🌳
AI Branches

In der Praxis anwenden

🏕️
AI Canopy

In die Tiefe gehen

🌲
AI Forest

KI meistern

🔨

KI-Meisterschaft

✏️
AI Sketch

Starte bei null

🪨
AI Chisel

Fundament aufbauen

⚒️
AI Craft

In der Praxis anwenden

💎
AI Polish

In die Tiefe gehen

🏆
AI Masterpiece

KI meistern

📘

KI-Praxis

📖
Open-Source-Modelle verstehen

Grundlagen und Ressourcen für Open-Source-Modelle

🎯
Vom Problem zur Modellaufgabe

Geschäftsprobleme in Modellaufgaben umwandeln

⚡
Ihr erstes Modell ausführen

Sehen Sie Ihre ersten Ergebnisse in 30 Minuten

🔧
Fine-Tuning und Evaluierung

Modelle feinjustieren und Leistung bewerten

🚀
Anwendungssysteme

Bauen Sie reale KI-Anwendungen

🎨
Generative KI

Erkunden Sie Open-Source-AIGC-Modelle

🤖
Agenten

Lernen Sie Agent-Frameworks und MCP-Werkzeuge

📐
Ergänzende Grundlagen

LLM-Grundlagen und Evaluierung

🎓

Claude Akademie

🤖
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

Labor

7 Experimente geladen
🧬Neuronales Netz Sandbox🤖KI oder Mensch?🥋Prompt Engineering Dojo🏁Algorithmus-Rennen🧠KI-Quizduell🏗️Systemdesign-Leinwand
🎯ProbeinterviewLabor betreten→
🚀

Karriereentwicklung

🚀
Interview-Startrampe

Starte deine Reise

🌟
Verhaltensinterview-Meisterschaft

Soft Skills meistern

💻
Technische Interviews

Die Coding-Runde bestehen

🤖
AI- & ML-Interviews

ML-Interview meistern

🏆
Angebot & Karriere

Das beste Angebot sichern

Loslegen
AIUnlimited

MIT-Lizenz

沪ICP备18025655号-11

Lernen

  • KI-Grundlagen
  • KI-Praxis
  • Claude Akademie
  • Labor
  • Karriereentwicklung

Community

  • Über uns
  • FAQ

Unterstützung

  • Nutzungsbedingungen
  • Datenschutzerklärung
  • Kontakt
KI & Engineering Programme›✏️ AI Sketch›Lektionen›Binäre Suchmuster
🔍
AI Sketch • Fortgeschritten⏱️ 17 Min. Lesezeit

Binäre Suchmuster

Klassische binäre Suche – Ein kurzer Überblick

Die binäre Suche halbiert den Suchraum bei jedem Schritt. In einem sortierten Array mit n Elementen wird in O(log n) Zeit ein Ziel gefunden.

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

Ganz einfach – aber die wahre Stärke der binären Suche geht weit über sortierte Arrays hinaus.

Das Search Space-Konzept

Die binäre Suche funktioniert immer dann, wenn in einem Bereich eine monotone Bedingung vorliegt. Das „Array“ muss nicht einmal existieren – Sie benötigen lediglich einen Bereich [lo, hi] und eine Funktion, die an einer Grenze von False auf True (oder umgekehrt) wechselt.

Search space:  [lo .................. hi]
Condition:      F  F  F  F  T  T  T  T
                          ^-- answer
🤯
Die binäre Suche wurde erstmals im Jahr 1946 veröffentlicht, aber die erste fehlerfreie Version wurde erst 1962 geschrieben – 16 Jahre mit Off-by-One-Fehlern!

Binäre Suche nach Antwort

Anstatt ein Array zu durchsuchen, durchsuchen Sie den Antwortbereich. Fragen Sie: „Kann ich Ergebnis X erreichen?“ Wenn ja, versuchen Sie es mit einer kleineren Größe. Wenn nicht, versuchen Sie es größer.

Beispiel: Koko isst Bananen

Koko hat n Haufen Bananen und h Stunden. Finden Sie die minimale Fressgeschwindigkeit, damit sie rechtzeitig fertig ist.

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

Der Antwortraum ist [1, max(piles)] und die Bedingung ist monoton – höhere Geschwindigkeit bedeutet immer weniger Stunden.

Lektion 7 von 100% abgeschlossen
←Heaps und Priority Queues

Diskussion

Anmelden an der Diskussion teilnehmen

Binäre Suche, die den Antwortraum für minimale Essgeschwindigkeit einschränkt
Binäre Suche nach Antwort: Den möglichen Geschwindigkeitsbereich bei jeder Iteration eingrenzen.

Gedrehtes sortiertes Array

Ein sortiertes Array, das an einem Drehpunkt gedreht wurde: [4, 5, 6, 7, 0, 1, 2]. Eine Hälfte ist immer sortiert. Vergleichen Sie mid mit lo, um zu entscheiden, welche Hälfte und prüfen Sie dann, ob das Ziel in die sortierte Hälfte fällt.

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

Welche Hälfte wird in einem gedrehten sortierten Array [3,4,5,1,2] sortiert, wenn mid=2 (Wert 5)?

Erstes und letztes Vorkommen

Um das erste Vorkommen zu finden, halten Sie nicht an, wenn Sie das Ziel erreichen, sondern stellen Sie hi = mid ein und suchen Sie weiter nach links. Für den letzten stellen Sie lo = mid + 1 ein und suchen nach rechts.

Dieses Suchpaar liefert Ihnen auch die Anzahl eines Ziels: last - first + 1.

Peak-Element

Ein Element, das größer als beide Nachbarn ist. Selbst in einem unsortierten Array funktioniert die binäre Suche: Bei nums[mid] < nums[mid + 1] liegt der Peak rechts; sonst ist es links. O(log n).

🤔
Think about it:Warum funktioniert die Peak-Suche mit der binären Suche, obwohl das Array nicht sortiert ist? Welche Eigenschaft ersetzt hier die sortierte Reihenfolge?

Suche in einer 2D-Matrix

Wenn Zeilen sortiert sind und das erste Element jeder Zeile größer als das letzte der vorherigen ist, behandeln Sie die Matrix als ein einzelnes sortiertes Array von m × n Elementen. Ordnen Sie den Index k der Zeile k // n und der Spalte k % n zu.

Quadratwurzel ohne Bibliothek

Finden Sie die größte ganze Zahl x mit x * x ≤ n. Suchraum: [0, n]. Klassische binäre Suche nach Antwort.

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

Das Muster „Minimiere das Maximum“.

Bei Problemen wie „Split Array größte Summe“ oder „Kapazität zum Versenden von Paketen innerhalb von D Tagen“ müssen Sie den schlimmsten Fall minimieren. Die Antwort ist monoton: Wenn die Kapazität C funktioniert, funktioniert auch C+1. Binäre Suche auf C.

🧠Kurzer Check

Wie groß ist der Suchraum für die binäre Suche bei „Kapazität zum Versenden von Paketen in D Tagen”?

Die universelle Vorlage

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

Passen Sie hi = mid gegenüber lo = mid an, je nachdem, ob Sie das erste Wahre oder das letzte Wahre suchen.

🧠Kurzer Check

Wie groß ist die zeitliche Komplexität der binären Suche auf einem Antwortraum der Größe S mit einer O(n)-Machbarkeitsprüfung?

🤔
Think about it:Was sollte Ihnen sofort in den Sinn kommen, wenn Sie in einer Problemstellung den Ausdruck „minimal mögliches Maximum“ oder „maximal mögliches Minimum“ sehen?

📚 Weiterführende Literatur

  • NeetCode – Wiedergabeliste für binäre Suche – kuratierte Probleme von leicht bis schwer
  • Tech Interview Handbook – Binäre Suche – Muster, Tipps und Fallstricke
  • LeetCode Binary Search-Studienplan – progressiver Aufgabensatz