Der Algorithmus von Prim

In der Informatik ist der Algorithmus von Prim ein gieriger Algorithmus, der einen minimalen Überspannen-Baum für einen verbundenen belasteten ungeleiteten Graphen findet. Das bedeutet, dass es eine Teilmenge der Ränder findet, die einen Baum bildet, der jeden Scheitelpunkt einschließt, wo das Gesamtgewicht aller Ränder im Baum minimiert wird. Der Algorithmus wurde 1930 vom tschechischen Mathematiker Vojtěch Jarník und später unabhängig vom Computerwissenschaftler Robert C. Prim 1957 entwickelt und von Edsger Dijkstra 1959 wieder entdeckt. Deshalb wird es auch manchmal den DJP Algorithmus, den Algorithmus von Jarník oder den Ordentlichen-Jarník Algorithmus genannt.

Andere Algorithmen für dieses Problem schließen den Algorithmus von Kruskal und Borůvka's Algorithmus ein.

Beschreibung

Der einzige Überspannen-Baum des leeren Graphen (mit einem leeren Scheitelpunkt-Satz) ist wieder der leere Graph. Die folgende Beschreibung nimmt an, dass dieser spezielle Fall getrennt behandelt wird.

Der Algorithmus vergrößert unaufhörlich die Größe eines Baums, ein Rand auf einmal, mit einem Baum anfangend, der aus einem einzelnen Scheitelpunkt besteht, bis es alle Scheitelpunkte abmisst.

  • Eingang: Ein nichtleerer verbundener belasteter Graph mit Scheitelpunkten V und Rändern E (können die Gewichte negativ sein).
  • Initialisieren Sie: V = {x}, wo x ein willkürlicher Knoten (Startpunkt) von V, E = {}\ist
  • Wiederholen Sie sich bis V = V:
  • Wählen Sie einen Rand (u, v) mit dem minimalen solchem Gewicht, dass u in V ist und v ist nicht (wenn es vielfache Ränder mit demselben Gewicht gibt, kann einige von ihnen aufgepickt werden)
  • Fügen Sie v zu V, und (u, v) zu E hinzu
  • Produktion: V und E beschreiben einen minimalen Überspannen-Baum

Zeitkompliziertheit

Eine einfache Durchführung mit einer Angrenzen-Matrixgraph-Darstellung und eine Reihe von Gewichten suchend, um zu finden, dass der minimale Gewicht-Rand beiträgt, verlangt O (V) Laufzeit. Mit einer einfachen binären Haufen-Datenstruktur und einer Angrenzen-Listendarstellung, wie man zeigen kann, läuft der Algorithmus von Prim rechtzeitig O (E loggen V), wo E die Zahl von Rändern ist und V die Zahl von Scheitelpunkten ist. Mit einem hoch entwickelteren Haufen von Fibonacci kann das zu O heruntergebracht werden (E + V Klotz V), der asymptotisch schneller ist, wenn der Graph dicht genug ist, dass E Ω (V) ist.

Beispiel läuft

Beweis der Genauigkeit

Lassen Sie P ein verbundener, belasteter Graph sein. Bei jeder Wiederholung des Algorithmus von Prim muss ein Rand gefunden werden, dass das einen Scheitelpunkt in einem Subgraphen zu einem Scheitelpunkt außerhalb des Subgraphen verbindet. Da P verbunden wird, wird es immer einen Pfad zu jedem Scheitelpunkt geben. Die Produktion Y des Algorithmus von Prim ist ein Baum, weil der Rand und Scheitelpunkt, der zum Baum Y hinzugefügt ist, verbunden werden. Lassen Sie Y ein minimaler Überspannen-Baum des Graphen P sein. Wenn Y=Y dann Y ein minimaler Überspannen-Baum ist. Lassen Sie sonst e der erste Rand sein, der während des Aufbaus des Baums Y hinzugefügt ist, der nicht im Baum Y, und V ist, der Satz von Scheitelpunkten sein, die durch die Ränder verbunden sind, hinzugefügt vor dem Rand e. Dann ist ein Endpunkt des Randes e im Satz V, und der andere ist nicht. Da Baum Y ein Überspannen-Baum des Graphen P ist, gibt es einen Pfad im Baum Y das Verbinden den zwei Endpunkten. Als man entlang dem Pfad reist, muss man auf einen Rand f das Anschließen einem Scheitelpunkt im Satz V zu demjenigen stoßen, der nicht im Satz V ist. Jetzt bei der Wiederholung, als Rand e zum Baum Y hinzugefügt wurde, könnte Rand f auch hinzugefügt worden sein, und es würde statt des Randes e hinzugefügt, wenn sein Gewicht weniger wäre als e (wir wissen, dass wir auf die Gelegenheit gestoßen sind, "f" vorher "e" zu nehmen, weil "f" mit V verbunden wird, und wir jeden Scheitelpunkt V vor dem Scheitelpunkt besucht haben, zu dem wir in Verbindung gestanden haben, "e" [wird "e" mit dem letzten Scheitelpunkt verbunden, den wir in V] besucht haben). Seit dem Rand wurde f nicht hinzugefügt, wir schließen das

:

Lassen Sie Baum Y der erhaltene Graph sein, indem Sie Rand f davon entfernen und Rand e zum Baum Y hinzufügen. Es ist leicht zu zeigen, dass Baum Y verbunden wird, hat dieselbe Zahl von Rändern wie Baum Y, und die Gesamtgewichte seiner Ränder sind nicht größer als dieser des Baums Y, deshalb ist es auch ein minimaler Überspannen-Baum des Graphen P, und es enthält Rand e und alle Ränder hinzugefügt davor während des Aufbaus des Satzes V. Wiederholen Sie die Schritte oben, und wir werden schließlich einen minimalen Überspannen-Baum des Graphen P erhalten, der zum Baum Y identisch ist. Das zeigt, dass Y ein minimaler Überspannen-Baum ist.

  • V. Jarník: O jistém problému minimálním [Über ein bestimmtes minimales Problem], Práce Moravské Přírodovědecké Společnosti, 6, 1930, Seiten 57-63. (in Tschechisch)
  • R. C. Prim: Kürzeste Verbindungsnetze und einige Generalisationen. In: Glockensystemfachzeitschrift, 36 (1957), Seiten 1389-1401
  • D. Cheriton und R. E. Tarjan: Entdeckung von minimalen Überspannen-Bäumen. In: SIAM Zeitschrift auf der Computerwissenschaft, 5 (Dez 1976), Seiten 724-741
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest und Clifford Stein. Einführung in Algorithmen, die Dritte Ausgabe. MIT Presse, 2009. Internationale Standardbuchnummer 0-262-03384-4. Abschnitt 23.2: Die Algorithmen von Kruskal und Prim, Seiten 631-638.

Links


Seeforelle / Angriff der rohen Gewalt
Impressum & Datenschutz