Jedes Diagramm hat mehr als eine topologische Sortiersequenz, da sie von den Grad der Ränder der Knoten abhängt. Der erste Startknoten, den wir mit einer uneingeschränkten Anzahl von Knoten auswählen, ist 0.
Lassen Sie uns den topologischen Sortieralgorithmus mit einem Beispiel verstehen.
Schritt 1: Wir setzen die Knoten ein, deren ankommende Kantenzahl gleich 0 ist. Diese Knoten sind also Knoten 1 und Knoten 4.
Schritt 2:
A. Wir beginnen mit dem Knoten 1. Wir können jeden Knoten zwischen Knoten 1 und Knoten 4 auswählen.
B. Wir verringern jede Knotenkante um 1, die mit Knoten 1 verbunden ist. Wir verringern die Kante der Knoten (0, 2 und 3).
C. Wir verschieben den Knoten 1 von der Liste in die topologisch sortierte Liste, wie unten gezeigt.
Schritt 3:
A. Wir gehen jetzt aus der Liste, die Node 4 ist.
B. Wir verringern alle ausgehenden Kanten der mit Knoten 4 verbundenen Knoten, die Knoten (0 und 3) sind.
C. Jetzt hat Node 3 keine eingehenden Kanten, also drücken wir ihn in die Liste, und der Knoten 4 verlagert sich auf die topologisch sortierte Liste.
Schritt 4:
A. Wir gehen jetzt aus der Liste, die Node 3 ist.
B. Wir verringern alle ausgehenden Kanten der mit Knoten 3 verbundenen Knoten, die Knoten (0 und 2) sind.
C. Jetzt haben die Knoten 0 und der Knoten 2 keine eingehenden Kanten, also drücken wir sie in die Liste, und der Knoten 3 verschiebt.
Schritt 5:
A. Wir gehen jetzt aus der Liste, die Node 0 ist.
B. Da keine ausgehenden Kanten aus Knoten 0, fügen wir sie einfach der topologischen Sortierliste hinzu.
Schritt 6:
A. Wir gehen jetzt aus der Liste, die Node 2 ist.
B. Da keine ausgehenden Kanten aus Knoten 2, fügen wir sie einfach der topologischen Sortierliste hinzu.
Schritt 7:
Schließlich haben wir die Liste hier sortiert.
Topologischer Sortieralgorithmus
Die folgenden sind die Schritte für den topologischen Sortieralgorithmus, dem wir folgen müssen.
Schritt 0: Berechnen Sie den Grad jedes Grafikknotens.
Schritt 1: Wir müssen zuerst einen Knoten finden, der eingehende Kanten von Null hat.
Schritt 2: Wir entfernen diesen Knoten aus dem Diagramm und fügen ihn der Liste der topologischen Sortieraufträge hinzu.
Schritt 3: Entfernen Sie die Knoten mit ausgehenden Kanten.
Schritt 4: Reduzieren.
Schritt 5: Wiederholen Sie die Schritte 1-4, bis keine Knoten mit 0 Grad verbleiben.
Schritt 6: Stellen Sie sicher, dass alle Elemente in der richtigen Reihenfolge sind.
Schritt 7: Jetzt haben wir die Bestellung ab Schritt 6 sortiert.
Schritt 8: Setzen Sie dem Algorithmus ein Ende.
Python -Code: Das folgende ist eine Python -Implementierung des obigen Beispiels.
FromCollectionsImportDefaultDictAusgang:
Topologische Sortierreihenfolge: [0, 1, 3, 5, 6, 2, 4] |
Topologische Sortieralgorithmus -Zeitkomplexität:
Die Gesamtzeit für den Verarbeitung des Algorithmus ist O (E + N), wobei E die Anzahl der Kanten darstellt und N die Anzahl der Knoten in der Grafik darstellt. Im folgenden Schritt müssen wir dann in einem Grad jedes Knotens, das im Allgemeinen O (e) Zeiten dauert, berechnen und dann alle diese Knoten in eine sortierte Liste platzieren, in der ihr In-Grad Null ist, was O (n) nimmt) mal. Die Gesamtzeitkomplexität des topologischen Sortieralgorithmus ist also O (E+N).
Aber die Raumkomplexität des topologischen Sortieralgorithmus ist O (n), die Gesamtzahl der Knoten in der Grafik ist.
Anwendung :
1. Die topologische Sortierung ist sehr nützlich, um den Zyklus des Diagramms zu finden.
2. Der topologische Sortieralgorithmus wird verwendet, um die Deadlockbedingungen in einem Betriebssystem zu bestimmen.
3. Der topologische Sortieralgorithmus wird verwendet, um den kürzesten Weg in einem gewichteten acyclischen Graphen zu finden.
Abschluss:
Dieser Artikel hat einen weiteren wichtigen Algorithmus, topologische Sortierung, erfahren. Wir haben gesehen, dass dieser Algorithmus nur mit acyclischen Graphen funktioniert. Der topologische Sortieralgorithmus hilft auch, die Aufgabenkompilierungsreihenfolge zu bestimmen. Der topologische Sortieralgorithmus hat viele Echtzeitvorteile, z. B. den kürzesten Weg zu finden. Da die topologische Art äußerst nützlich ist, muss jeder Programmierer und Schüler diesen Algorithmus gründlich verstehen.