▶

Rechner für topologische Sortierung

DAG · Kahn-Algorithmus · Tiefensuche · Zykluserkennung · alle Reihenfolgen

Finden Sie eine gültige lineare Reihenfolge eines gerichteten azyklischen Graphen (DAG). Unterstützt werden der Kahn-Algorithmus mit Breitensuche und die Tiefensuche; Zyklen werden erkannt und für kleine Graphen alle gültigen Reihenfolgen aufgezählt.

Schnellbeispiele

Eingabemethode:

Akzeptierte Formate: A→B   A->B   A-B   A,B durch Kommas oder Zeilenumbrüche getrennt.

Algorithmus:

Was ist eine topologische Sortierung?

Topologische Sortierung oder topologische Reihenfolge bezeichnet eine lineare Anordnung der Knoten eines gerichteten azyklischen Graphen (DAG). Für jede gerichtete Kante u → v muss u vor v stehen. Anders als beim üblichen Sortieren geht es um die Reihenfolge von Abhängigkeiten, nicht um Zahlen oder Buchstaben.

Eine topologische Sortierung existiert nur, wenn der Graph keine gerichteten Zyklen enthält. Bei A → B → C → A müsste A vor B, B vor C und zugleich C vor A stehen – das ist unmöglich.

Gerichtete azyklische Graphen (DAGs)

Ein gerichteter azyklischer Graph (DAG) ist ein Graph, dessen Kanten eine Richtung besitzen und der keine gerichteten Zyklen enthält. DAGs entstehen überall dort, wo Abhängigkeiten modelliert werden: Aufgabe A muss abgeschlossen sein, bevor Aufgabe B beginnt. Die Kanten stehen für „muss vorher kommen“.

Typische Beispiele sind Kursvoraussetzungen, Abhängigkeiten beim Erstellen von Software, die Reihenfolge von Rezeptschritten und Tabellenkalkulationsformeln, bei denen D1 = A1 + B1 vor E1 = D1 · 2 berechnet werden muss.

Kahn-Algorithmus (Breitensuche)

Der 1962 von Arthur B. Kahn veröffentlichte Algorithmus ist besonders anschaulich. Er entfernt wiederholt Knoten ohne verbleibende Abhängigkeiten:

  1. Eingangsgrad berechnen: Für jeden Knoten wird die Zahl eingehender Kanten bestimmt.
  2. Warteschlange initialisieren: Alle Knoten mit Eingangsgrad 0 werden eingefügt.
  3. Solange die Warteschlange nicht leer ist: Knoten u entnehmen, an das Ergebnis anhängen und für jeden Nachbarn v den Eingangsgrad verringern. Wird er 0, kommt v in die Warteschlange.
  4. Zyklusprüfung: Enthält das Ergebnis alle Knoten, ist der Graph ein DAG. Andernfalls gehören die verbleibenden Knoten zu einem Zyklus.

Zeitkomplexität: O(V + E), wobei V die Anzahl der Knoten und E die Anzahl der Kanten bezeichnet. Das ist optimal, weil jeder Knoten und jede Kante mindestens einmal untersucht werden muss.

Topologische Sortierung mit Tiefensuche

Das Verfahren mit Tiefensuche speichert für jeden Knoten die Abschlusszeit, also den Zeitpunkt, an dem alle Nachfolger vollständig besucht sind. Knoten mit höherer Abschlusszeit stehen weiter vorn. Eine Rückkante zu einem Vorfahren im aktuellen Suchpfad – einem „grauen“ Knoten im Dreifarbschema – zeigt einen Zyklus an.

Kahn-Algorithmus und Tiefensuche haben beide die Komplexität O(V + E), können für denselben Graphen jedoch verschiedene gültige Reihenfolgen liefern.

Anwendungen der topologischen Sortierung

BereichAnwendungBedeutung im DAG
Build-SystemeGNU Make, Bazel, npmQuelldatei A muss vor dem Binden von B übersetzt werden
BildungKursplanungVoraussetzungskurs muss zuerst belegt werden
TabellenkalkulationNeuberechnung von FormelnZelle muss vor abhängigen Zellen berechnet werden
CompilerBefehlsplanungBefehlsergebnis wird später benötigt
PaketverwaltungenApt, pip, npm installAbhängigkeit muss vor abhängigen Paketen installiert werden
ProjektplanungMethode des kritischen PfadsAufgabe muss vor Beginn des Nachfolgers abgeschlossen sein

Wie viele gültige Reihenfolgen gibt es?

Ein Graph kann mehrere gültige topologische Reihenfolgen haben. Für die Kette A → B → C → D gibt es genau eine. Beim „Diamanten“ A → B → D und A → C → D sind dagegen [A, B, C, D] und [A, C, B, D] gültig. Die Anzahl hängt von der Graphstruktur ab und wächst schnell; ihre Bestimmung ist ein #P-vollständiges Problem. Dieser Rechner zählt für kleine Graphen mit bis zu sieben Knoten alle Reihenfolgen auf.

Details zur Zykluserkennung

Beim Kahn-Algorithmus wird ein Zyklus erkannt, wenn das Ergebnis nach dem Leeren der Warteschlange weniger als V Knoten enthält. Die übrigen Knoten gehören zu Zyklen und besitzen jeweils mindestens eine eingehende Kante aus diesem Bereich; deshalb erreicht keiner Eingangsgrad 0. Bei der Tiefensuche signalisiert ein bereits „grauer“, noch in Bearbeitung befindlicher Knoten eine Rückkante und damit einen Zyklus.

Häufig gestellte Fragen

Was ist eine topologische Sortierung?
Eine topologische Sortierung ist eine lineare Reihenfolge der Knoten eines DAG, bei der für jede Kante u→v der Knoten u vor v steht. Sie dient zur Planung abhängiger Aufgaben, zum Auflösen von Build-Reihenfolgen und zum Beachten von Kursvoraussetzungen.
Was ist ein gerichteter azyklischer Graph (DAG)?
Ein gerichteter azyklischer Graph ist ein gerichteter Graph ohne gerichtete Zyklen. Man kann von keinem Knoten entlang gerichteter Kanten zu ihm zurückkehren. DAGs modellieren Abhängigkeiten wie Kursvoraussetzungen, Build-Abhängigkeiten und Tabellenformeln.
Wie funktioniert der Kahn-Algorithmus?
Der Kahn-Algorithmus entfernt wiederholt Knoten ohne eingehende Kanten. Alle Knoten mit Eingangsgrad 0 kommen in eine Warteschlange. Pro Schritt wird ein Knoten entnommen, dem Ergebnis hinzugefügt und der Grad seiner Nachbarn verringert; Knoten mit Grad 0 werden eingereiht. Enthält das Ergebnis alle Knoten, ist die Reihenfolge gültig, andernfalls existiert ein Zyklus.
Ist die topologische Sortierung eindeutig?
Nein, gewöhnlich ist sie nicht eindeutig. Fehlen direkte Abhängigkeiten zwischen manchen Knoten, sind mehrere Reihenfolgen möglich. Bei A→C und B→C sind beispielsweise [A, B, C] und [B, A, C] gültig. Eindeutigkeit besteht nur bei einer einzigen Kette.
Was geschieht bei einem Zyklus im Graphen?
Enthält ein gerichteter Graph einen Zyklus, ist keine topologische Sortierung möglich. Beim Kahn-Algorithmus erreichen die beteiligten Knoten nie Eingangsgrad 0 und gelangen nicht ins Ergebnis. Der Rechner erkennt den Zyklus und nennt die beteiligten Knoten.
Welche Zeitkomplexität hat die topologische Sortierung?
Sowohl der Kahn-Algorithmus als auch die Tiefensuche laufen in O(V + E), also linear zur Zahl der Knoten und Kanten. Das ist optimal, weil jedes Element mindestens einmal besucht werden muss.
Welche praktischen Anwendungen hat die topologische Sortierung?
Topologische Sortierung bestimmt die Übersetzungsreihenfolge in Build-Systemen, beachtet Voraussetzungen in der Kursplanung, steuert die Formelberechnung in Tabellenkalkulationen, löst Installationsabhängigkeiten in Paketverwaltungen auf und ordnet Befehle in Compilern sowie Aufgaben im Projektmanagement.