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›Heaps und Priority Queues
⛰️
AI Sketch • Fortgeschritten⏱️ 18 Min. Lesezeit

Heaps und Priority Queues

Was ist ein Heap?

Ein Heap ist ein vollständiger Binärbaum, in dem jedes übergeordnete Element die Heap-Eigenschaft erfüllt – entweder immer kleiner (Min.-Heap) oder immer größer (Max-Heap) als seine untergeordneten Elemente. „Abgeschlossen“ bedeutet, dass jedes Level voll ist, mit Ausnahme möglicherweise des letzten, das von links nach rechts gefüllt wird.

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

Da es vollständig ist, speichern wir es in einem flachen Array – es sind keine Zeiger erforderlich. Für Index i: linkes Kind = 2i + 1, rechtes Kind = 2i + 2, Eltern = (i - 1) // 2.

Min-Heap vs. Max-Heap

| Eigentum | Min-Heap | Max-Heap | |----------|----------|----------| | Wurzel | Kleinstes Element | Größtes Element | | Eltern ≤ Kinder? | ✅ Ja | ❌ Nein (≥) | | Auszug ergibt | Minimum | Maximal |

Pythons heapq ist standardmäßig ein Min-Heap. Negieren Sie für einen Max-Heap Werte beim Einfügen und erneut beim Extrahieren.

Einfügen und Extrahieren – Schritt für Schritt

Einfügen – bis zum Ende drücken, dann aufblasen (mit dem übergeordneten Element tauschen, solange es kleiner ist):

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

Mindestmenge extrahieren – Wurzel mit letztem Element tauschen, letztes einfügen, dann nach unten sieben (mit kleinerem Kind tauschen):

smallest = heapq.heappop(h)  # returns 1

Beide Operationen werden in O(log n) ausgeführt, da die Baumhöhe log n ist.

Diagramm, das das Aufblasen des Einsatzes und das Absieben des Extrakts auf einem Min-Haufen zeigt
Blasen nach oben einsetzen; extract-min filtert nach unten.
Lektion 6 von 100% abgeschlossen
←Bäume und Graphen visualisiert

Diskussion

Anmelden an der Diskussion teilnehmen

Heapify – Erstellen eines Heaps in O(n)

Der Aufruf von heapq.heapify(arr) konvertiert eine Liste in-place in einen Heap in O(n), nicht in O(n log n). Es funktioniert von unten nach oben und durchsucht jeden Nicht-Blattknoten. Dies ist eines der überraschendsten Komplexitätsergebnisse in CS.

🤯
Der Aufbau eines Heaps ist O(n), nicht O(n log n). Die meisten Knoten befinden sich in der Nähe des unteren Endes und müssen kaum nach unten gesiebt werden – die Mathematik ergibt eine lineare Zeit.

Die Prioritätswarteschlangenabstraktion

Mit einer Prioritätswarteschlange können Sie immer zuerst auf das Element mit der höchsten Priorität zugreifen. Heaps sind die bevorzugte Implementierung, da sowohl Einfügen als auch Extrahieren O(log n) sind. Verwenden Sie eines immer dann, wenn Sie „Geben Sie mir den bisher besten Artikel“ benötigen.

Muster: Top-K-Probleme

„Finden Sie die K größten Elemente in einem unsortierten Array.“

Behalten Sie einen Min-Heap der Größe K. Drücken Sie für jedes Element darauf; Wenn der Heap größer als K ist, platziere den kleinsten. Übrig bleiben die K-größten.

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

Zeit: O(n log k) – viel besser als Sortieren, wenn k ≪ n.

🧠Kurzer Check

Sie benötigen die 5 höchsten Punktzahlen aus 1 Million Einträgen. Welcher Heap-Typ und welche Größe?

Muster: K-sortierte Listen zusammenführen

Schieben Sie den Kopf jeder Liste in einen Min-Heap. Platzieren Sie das kleinste Element und verschieben Sie dann das nächste Element aus derselben Liste. Wiederholen, bis alle Listen erschöpft sind. Zeit: O(N log K) wobei N die Gesamtzahl der Elemente ist.

Muster: Median aus Datenstrom

Behalten Sie zwei Heaps bei: einen Max-Heap für die untere Hälfte und einen Min-Heap für die obere Hälfte. Gleichen Sie ihre Größen so aus, dass sie sich höchstens um 1 unterscheiden. Der Median liegt immer bei einer oder beiden Wurzeln.

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

Wo landet beim Zwei-Heap-Median-Ansatz ein neues Element zuerst?

Planungsprobleme

Bei der Planung glänzen jede Menge Dinge: Besprechungsräume (verfolgen Sie die früheste Endzeit), Aufgabenplanung mit Abklingzeiten oder CPU-Jobwarteschlangen. Die wichtigste Erkenntnis besteht darin, dass ein Heap effizient verfolgt, „was als nächstes endet“.

🤔
Think about it:Wenn Sie sowohl das Minimum als auch das Maximum effizient benötigen, reicht ein einzelner Heap nicht aus. Welche Datenstrukturkombination würden Sie verwenden?

Wann sollte Heap vs. Sorted Array vs. BST verwendet werden?

| Brauchen | Beste Wahl | Warum | |------|-------------|-----| | Wiederholte Min/Max-Extraktion | Haufen | O(log n) einfügen + extrahieren | | Statische Daten, einmalige Sortierung | Sortiertes Array | O(n log n) einmal, O(1) Zugriff | | Bereichsabfragen + Bestellstatistiken | Ausgewogener BST | O(log n) für alles | | Top-K aus einem Stream | Haufen der Größe K | O(n log k) insgesamt |

🧠Kurzer Check

Welche Operation ist O(1) in einem Min-Heap?

Komplexitäts-Spickzettel

| Betrieb | Zeit | |-----------|------| | Einfügen | O(log n) | | Extrahieren Sie Min./Max. | O(log n) | | Peek min/max | O(1) | | Aufhäufen | O(n) | | Top-K aus n Elementen | O(n log k) |

🤔
Think about it:Warum können Sie auf einem Heap keine binäre Suche durchführen, obwohl dieser in einem Array gespeichert ist? Überlegen Sie, welche Sortierreihenfolge die Heap-Eigenschaft tatsächlich garantiert.

📚 Weiterführende Literatur

  • NeetCode – Heap-/Prioritätswarteschlange – visuelle Problem-Roadmap mit gruppierten Heap-Problemen
  • Tech Interview Handbook – Heap – prägnante Muster und Tipps – Python-Heapq-Dokumente – offizielle Modulreferenz mit Beispielen