Die Algorithmen von Prim und Kruskal werden verwendet, um den minimalen Spannbaum eines Graphen zu finden, der verbunden und ungerichtet ist. Warum können sie nicht auf einem gerichteten Diagramm verwendet werden?Warum können die Algorithmen von Prim oder Kruskal nicht in einem gerichteten Graphen verwendet werden?
Antwort
Es ist ein kleines Wunder, dass diese Algorithmen in erster Linie funktionieren - die meisten gierigen Algorithmen stürzen ab und zu ab. Angenommen, Sie möchten diese verwenden, um einen minimalen Spannbaum zu finden (gerichtete Pfade von einem Knoten zu allen anderen), dann sieht ein problematischer Graph für Kruskal so aus.
5
--> a
//^
s 1| |2
\ v/
--> b
3
Wir werden die a- nehmen> b Bogen der Kosten 1, dann stecken, weil wir wirklich s-> b der Kosten 3 und b-> Prim wollte eine Kosten 2.
Für , diese Grafik ist problematisch.
5
--> a
//
s 1|
\ v
--> b
3
Wir nehmen s-> b von Kosten 3, aber wir wirklich s- gesucht> eine Kosten 5 und a-> b Kosten 1.
Prim und Kruskals Algorithmus Ausgang ein Minimum Spanning Tree für verbundene und "ungerichtete" Graphen. Wenn es nicht verbunden ist, können wir sie optimieren, um minimal überspannende Gesamtstrukturen auszugeben.
In Prim-Algorithmus teilen wir das Diagramm in zwei Gruppen von Vertices. Ein Satz der erkundeten Scheitelpunkte, die bereits MST (Set1) und einen weiteren Satz von unerforschten Scheitelpunkten gebildet haben, die sich schließlich dem ersten Satz anschließen, um "spanning" (Satz2) zu vervollständigen. Zu jedem Zeitpunkt wählen wir eine minimale gewichtete Kante in dem Schnitt, der die zwei disjunkten Sätze verbindet. Wenn es von den erkundeten Knoten der MST keine gerichtete Kante gibt, um unerforscht zu bleiben, bleibt der Algorithmus stecken, obwohl Kanten von unerforschten Knoten zu erkundeten Knoten in MST vorhanden sind. Im Kruskal-Algorithmus besteht die Idee darin, die Kanten in aufsteigender Reihenfolge nach ihrem Gewicht zu sortieren und sie in der Reihenfolge aufzufangen und sie in MST-erkundete Knoten/Kanten aufzunehmen, wenn sie nicht bereits einen Zyklus mit erkundeten Knoten bilden. Dies wird von Union-Find DS getan. Die Erkennung eines Zyklus für gerichtete Graphen schlägt jedoch mit dieser Methode fehl. Für Beispiel: Graph mit Kanten [1-> 2] [2-> 3] [1-> 3] enthält einen Zyklus mit der Union-Find-Methode.
So Prims schlägt fehl, da es annimmt, dass jeder Knoten von jedem Knoten aus erreichbar ist, der für ungerichtete Graphen für Digraphen möglicherweise nicht zutreffend ist. Kruskal schlägt fehl, weil Zyklen nicht erkannt werden, und manchmal ist es wichtig, Kanten hinzuzufügen, die Zyklen bilden, um die "minimale" gewichtete Eigenschaft von MST zu erfüllen.
Auch bei Digraphen macht MST keinen Sinn. Sein Äquivalent für Digraphen ist "minimum spanning arborescence", das einen Baum erzeugt, in dem jeder Eckpunkt von einem einzigen Eckpunkt aus erreicht werden kann.
:) Danke Greybeard. Jetzt korrigiert !! – elborak9
- 1. Finding MST von gerichteten Graphen mit Prim-Algorithmus
- 2. Effiziente Suche in einem gerichteten Graphen
- 3. Prims- und Bellman-Ford-Algorithmen in gerichteten Diagrammen
- 4. Encoding gerichteten Graphen als Zahlen
- 5. Algorithmus die Anzahl unterschiedlicher Pfade in einem gerichteten Graphen
- 6. D3 gerichteten Graphen
- 7. Randomized Algorithmus für die Hamilton-Pfad in einem gerichteten Graphen
- 8. Wie kann ich einen MST-Algorithmus (Prim oder Kruskal) in Haskell schreiben?
- 9. Blattknoten von gerichteten Graphen - Prolog
- 10. Traversal von zyklischen gerichteten Graphen
- 11. Was ist der Unterschied zwischen dem minimalen Spanning-Tree-Algorithmus für ungerichtete vs gerichtete Graphen?
- 12. Implementieren eines gerichteten Graphen in Python
- 13. Lesen eines gerichteten Graphen in R
- 14. Welche Algorithmen verwendet D3.js für den kraftgerichteten Graphen?
- 15. Algorithmen zum Identifizieren aller Zyklusbasen in einem ungerichteten Graphen
- 16. Wofür werden stark verbundene Komponenten verwendet?
- 17. Zyklusaufzählung eines gerichteten Graphen mit mehreren Kanten
- 18. Algorithmus für die BFS traveral eines acylic gerichteten Graphen
- 19. Erstellen eines gerichteten Graphen aus einer Datei
- 20. "Protokolle können nicht mit isinstance()" verwendet werden - warum nicht?
- 21. Sicheres Durchlaufen eines gerichteten azyklischen Graphen
- 22. Speichern eines großen gerichteten ungewichteten Graphen mit Milliarden von Knoten und Scheitelpunkten
- 23. Warum können @PostConstruct und @Retryable nicht zusammen verwendet werden?
- 24. Generieren Sie einen gerichteten Zufallsgraphen mit Erdős-Rényi Modell aus einem realen gerichteten Graphen
- 25. Können alle iterativen Algorithmen rekursiv ausgedrückt werden?
- 26. Wie können Ressourcen geschützt werden, die in einer Multithread- oder asynchronen Umgebung verwendet werden können?
- 27. Plotten von gerichteten Graphen in Python in einer Weise, die alle Kanten getrennt zeigt
- 28. Empfehlungen zum Visualisieren eines gerichteten Graphen in einer Web-UI
- 29. Welche Algorithmen verwendet SQL?
- 30. Finden eines Zyklus in einem ungerichteten Graph vs Finden eines in einem gerichteten Graph
Nun, was ist die Definition eines Spannbaums auf einem gerichteten Graphen? – elias
Das analoge Problem für MST für gerichtete Graphen wäre das Minimum-Cost-Spanning Arborescen oder Minimum Verzweigungsproblem. [Edmonds Algorithmus] (http://en.wikipedia.org/wiki/Edmond's_algorithm) kann mit der gleichen asymptotischen Komplexität wie Prim implementiert werden, ist aber konzeptionell komplizierter. –