Wie aus Raphaels Kommentar und j_random_hackers Kommentar hervorgeht , ist die Antwort positiv. Tatsächlich ist jeder MST mit einigen geringfügigen Ausnahmen mit jedem MST-Algorithmus erreichbar .
Für einen Graphen werden zwei Gewichtsfunktionen an allen Kanten (zu reellen Zahlen) als (schwach) vergleichbar (zueinander) definiert, wenn wir die durch beide Gewichtsfunktionen hervorgerufene strenge schwache Ordnung an den Kanten auf dieselbe strenge ausdehnen können Gesamtbestellung. Das heißt, wir können mit jeder Gewichtsfunktion konsistente Regeln für das Brechen von Verbindungen aufstellen, so dass das Ergebnis des Vergleichs von zwei Kanten durch eine Gewichtsfunktion und deren Brechen von dem Ergebnis durch die andere Gewichtsfunktion und deren Binden abweicht. Regeln brechen.G
Lemma 1 : Sei und zwei Gewichtsfunktionen. Die folgenden fünf Aussagen sind einander äquivalent.w1w2
- w1 und sind vergleichbar.w2
- In jeder Menge von Kanten gibt es eine gemeinsame hellste Kante von und von .w1w2
- In jeder Menge von Kanten gibt es eine gemeinsame schwerste Kante von und von .w1w2
- Es gibt eine Gewichtsfunktion , die unterschiedlichen Kanten unterschiedliche Gewichte , sodass mit und .w3w3w1w2
- für jede Kante und e 2, so dass e 1 durch eine Gewichtsfunktion leichter als e 2 ist , ist e 1 so leicht wie oder leichter als e 2 durch die andere Gewichtsfunktion.e1e2e1e2e1e2
Der Beweis von Lemma 1 bleibt als einfache Übung.
Lemma 2 : Es seien zwei Gewichtsfunktionen und w 2 so, dass wenn e 1 < w 1 e 2 ist , dann e 1 < w 2 e 2 . Dann sind sie vergleichbar.w1w2e1<w1e2e1<w2e2
(Hinweis auf) Beweis: Ein Ansatz besteht darin, die Bedingung 5 von Lemma 1 zu verifizieren. Ein anderer Ansatz besteht darin, die Bedingung 2 von Lemma 1 zu verifizieren, indem gezeigt wird, dass in jedem Satz von Kanten eine leichteste Kante von auch eine leichteste Kante von ist w 1 ,w2w1
Ein vergleichsbasierter Algorithmus auf einem Graphen wird als vergleichskompatibel definiert, wenn für zwei (schwach) vergleichskompatible Gewichtsfunktionen an allen Kanten der Algorithmus mit einer Gewichtsfunktion so ausgeführt werden kann, dass er unverändert wiederholt werden kann mit der anderen Gewichtsfunktion. Insbesondere haben diese beiden Läufe des Algorithmus die gleiche Ausgabe.G
Bitte beachten Sie, dass die meisten, wenn nicht alle MST-Algorithmen in zwei Varianten angegeben werden können. Bei der ersten Variante wird davon ausgegangen, dass bestimmte Kanten von unterschiedliche Gewichte haben. Dies wird verwendet, wenn das Hauptanliegen darin besteht, eine MST zu finden (die tatsächlich auch die eindeutige MST ist). Die zweite Geschmacksrichtung ermöglicht, dass unterschiedliche Kanten von G die gleichen Gewichte haben. In dieser Antwort, in der es hauptsächlich darum geht, alle MSTs zu finden, werden wir uns natürlich nur um MST-Algorithmen in der zweiten Variante kümmern.GG
Ein vergleichbarer MST-Algorithmus kann alle MSTs finden.
Um den obigen Satz zu beweisen, müssen wir nur den Abschnitt "Kruskal kann jeden MST finden" in der Berechnung der Anzahl der MST leicht anpassen . Wählen Sie für jedes MST von G mit Gewichtsfunktion w 1 ein positives Gewicht, das leichter ist als die absolute Differenz zwischen zwei ungleichen Kantengewichten. Wenn wir dieses Gewicht vom Gewicht jeder Kante in m abziehen, ohne das Gewicht anderer Kanten zu ändern, erhalten wir eine neue Gewichtsfunktion, beispielsweise w 2 . Wenn die Kante um heller als , muss um heller alsmGw1mw2e1e2w1e1e2w2auch. Nach Lemma 2 sind und vergleichskompatibel. Beachten Sie, dass die eindeutige MST mit . (Eine Möglichkeit, diese Eindeutigkeit zu demonstrieren, besteht darin, zu beweisen, dass jedes MST mit der neuen Gewichtungsfunktion, wenn die Gewichtung einer MST-Kante verringert wird, diese Kante enthalten muss.) Daher wird jeder Durchlauf des Algorithmus auf findenw1w2mw2w2. Da der Algorithmus vergleichbar ist, können wir den Algorithmus auf die gleiche Weise mit w 1 oder mit w 2 ausführen. Da dieser Lauf die eindeutige MST m mit w 2 findet, findet er m auch mit wmw1w2mw2m .w1
Jeder MST-Algorithmus ist vergleichbar
Der obige Satz klingt über die Straße. Nun, mit jedem MST-Algorithmus meine ich jeden allgemeinen vergleichsbasierten MST-Algorithmus, den ich gesehen habe, mit Ausnahme der scheinbar pathologischen, wie etwa falschen oder unnötigen Schritten. Da ein vergleichbarer MST-Algorithmus alle MSTs finden kann, kann jeder MST-Algorithmus alle MSTs finden. Insbesondere kann jeder der vier klassischen MST-Algorithmen , nämlich der Borůvka- Algorithmus , der Prim- Algorithmus , der Kruskal-Algorithmus und der Reverse-Delete-Algorithmus, alle MSTs finden.
Hier sind drei weitere vergleichbare MST-Algorithmen.
- der Algorithmus zum Löschen schwerer Kanten. Beginnen Sie mit allen Kanten. Suchen Sie wiederholt einen Zyklus und entfernen Sie eine der schwersten Kanten, bis kein Zyklus mehr vorhanden ist.
- der Add-Non-Heavy-Edge-Algorithmus. Beginnen Sie mit dem leeren Satz. Durch alle Kanten iterieren. Jede Kante wird hinzugefügt und, falls ein Zyklus gebildet wird, eine der schwersten Kanten entfernt.
- der Algorithmus zum Ersetzen durch leichtere Kanten. Beginnen Sie mit einem der Spanning - Tree - . Finden Sie den Zyklus in T sowie eine Kante e nicht in T . Wenn eine Kante t in diesem Zyklus ist schwerer als e , entfernen t von T und fügen e zu T . Wiederholen, bis wir das Gewicht von T nicht mehr reduzieren können.TTeTtetTeTT
Der folgende MST-Algorithmus ist nicht vergleichbar.
- der gradabhängige Kruskal-Algorithmus, der Kruskal-Algorithmus mit der folgenden Modifikation. Angenommen, wenn wir eine Kante mit dem minimalen Gewicht von entfernen wollen, wie in der Beschreibung des Kruskal-Algorithmus in Wikipedia , haben wir mehrere Kanten mit dem minimalen Gewicht zur Auswahl. Die Kante, die wir entfernen möchten, ist eine Kante, deren Gradsumme der beiden Scheitelpunkte die größte unter allen Auswahlmöglichkeiten ist. Dieser Algorithmus kann nicht mit dem Vergleich kompatibel sein, da der MST { a b , b c , c d } des Graphen mit den Eckpunkten a , b , c und der Kante a b nicht gefunden wirdS{ a b , b c , c d}a , b , ca bvon Gewicht und Kanten b c , c d , d b von Gewicht 2 . Dieser Algorithmus wird aufgrund dieser unnötigen Modifikation als pathologisch angesehen.1bc,cd,db2
Bitte beachten Sie, dass alle acht oben genannten MST-Algorithmen vergleichsbasiert sind.
Wie zeige ich, dass ein Algorithmus vergleichbar ist?
Ich werde den Algorithmus von Kruskal als Beispiel verwenden. Hier ist die Beschreibung des Kruskal-Algorithmus (im zweiten Aroma) auf einem gewichteten ungerichtet verbundenen Graphen .G
- Erstellen Sie einen Graphen mit den gleichen Eckpunkten wie G, jedoch ohne Kanten. Also ist F ein Wald von getrennten Bäumen eines einzelnen Scheitelpunkts.FGF
- Erstellen Sie eine Menge die alle Kanten im Diagramm enthält.S
- während nicht leer ist und F noch nicht überspannt
SF
- eine Kante mit minimalem Gewicht von wählen .S
- diese Kante aus entfernen .S
- Wenn diese Kante zwei verschiedene Bäume verbindet, fügen Sie sie dem Wald und kombinieren Sie zwei Bäume zu einem einzigen BaumF
- Ausgang .F
w1w2GSw1w2
Ein Algorithmus ist vergleichbar, wenn er in drei Schritten beschrieben werden kann.
- Mach etwas, bei dem es nicht um Gewicht geht.
- Wählen Sie eine Kante mit dem geringsten Gewicht in einem bestimmten Satz von Kanten
- Wählen Sie eine Kante mit dem maximalen Gewicht in einem bestimmten Satz von Kanten
Diese ausreichende Bedingung deckt den Algorithmus von Borůvka, Prim, Kruskal, Reverse-Delete, Delete-Heavy-Edge und Add-Non-Heavy-Edge ab. Beachten Sie, dass wir möglicherweise bestimmte Beschreibungen eines Algorithmus ändern müssen, um diese ausreichende Bedingung zu erfüllen, ohne die Menge der erreichbaren MSTs zu beeinflussen. Da der gradabhängige Kruskal-Algorithmus nicht vergleichbar ist, möchte ich betonen, dass diese hinreichende Bedingung in loser Form beschrieben wird