Your SlideShare is downloading. ×
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)

498
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
498
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Einfuhrung in minimale Spannb¨ume und ¨ a deren Berechnung Johannes Diemke Nils Sommer Universit¨t Oldenburg, FK II - Department f¨r Informatik a u Vortrag im Rahmen des Proseminars 2006 Zusammenfassung: In der folgenden Ausarbeitung behandeln wir minima- le Spannb¨ume und die zu ihrer Berechnung n¨tigen Algorithmen. Nach einer a o kurzen Einf¨hrung in die Thematik folgt zun¨chst ein Abschnitt in dem wir u a grundlegende Begriffe und Definitionen wiederholen. Darauf schliesst dann ein Ausblick auf unmittelbare Anwendungsgebiete des Spannbaumproblems an. Im Haupteil wenden wir uns schliesslich den Algorithmen von Kruskal und Prim zum finden minimaler Spannb¨ume zu. a1.1 EinleitungOft stellt sich die Frage wie man mit m¨glichst wenigen Verbindungen eine bestimmte oMenge von Objekten, zum Beispiel Computer, miteinander verbinden kann. Die L¨sung odieses Problems ist in der Graphentheorie ein spannender Baum. In der Praxis kannman diese Verbindungen jedoch oft bez¨glich ihrer L¨nge, Kosten oder anderer Merkmale u abewerten. Diese Bewertung bezeichnen wir im folgenden als Gewichtung. Wenn man nundie bestm¨gliche Verbindung aller Komponenten findet nennt man dies einen minimal ospannenden Baum. Im Folgenden werden wir minimale Spannb¨ume noch formal definieren und n¨her auf a aderen praktische und theoretische Bedeutung eingehen. Im Hauptteil werden wir dannschliesslich zwei Greedy-Algorithmen zur Berechnung minimaler Spannb¨ume vorstellen. aZun¨chst den Algortihmus von Kurskal welcher erstmals 1956 in der Zeitschrift Procee- adings of the American Mathematical Society von dem US-amerkianischen Mathematikerund Statistiker Joseph Bernard Kruskal vorgestellt wurde [Kru56]. Daraufhin dann denAlgorithmus von Prim welcher von Robert C. Prim erfunden wurde [Pri57]. Die Algo-rithmen werden jeweils zum besseren Verst¨ndnis in einem java-¨hnlichem Pseudocode a aausformuliert.1.2 Spannb¨ume aIn der Graphentheorie bezeichnet ein Spannbaum T = (V, E ) mit E ⊆ E einen Teilgra-phen eines ungerichteten, zusammenh¨ngenden Graphen G = (V, E) welcher alle seine a 1
  • 2. Knoten enth¨lt und ein Baum, also insbesondere zusammenh¨ngend und keine Zyklen a aenth¨lt, ist [HS81]. a Abbildung 1.1 zeigt einen Graphen und einen seiner zugeh¨rigen Spannb¨ume (Dar- o astellung in fetten Linien und Knoten). Der vorherige Satz impliziert schon, dass einungerichteter, zusammenh¨ngender Graph durchaus mehrere zugeh¨rige Spannb¨ume a o abesitzen kann. F¨r kantengewichtete Graphen G = (V, E) die uber eine Kantengewichtungsfunktion u ¨w : E → R jeder Kante eindeutig ein Gewicht zuordnen ist das Gewicht des Graphenw(G) als die Summe aller seiner, den Kanten zugeordneten, Kantengewichte definiert: w(G) = w(e) e∈E Anschaulich gesprochen werden also die Werte an den Kanten zusammengez¨hlt und abilden so das Gewicht des Graphen. Ein Spannbaum T = (V, E ) ist nun genau dannminimal wenn kein anderer zugeh¨riger Spannbaum mit geringerem Gewicht existiert o[HS84, Sed02]. Also wenn f¨r alle Spannb¨ume T von G gilt: u a w(T ) ≥ w(T ) Intuitiv ist ein minimaler Spannbaum zu einem ungerichteten, zusammenh¨ngenden, agewichteten Graphen G = (V, E) also derjenige Baum welcher alle Knoten aus V soverbindet, dass das Gewicht des Baumes minimal ist dennoch aber jeder dieser Knoten,wenn auch nur indirekt, erreichbar ist. Der minimale Spannbaum bleibt folglich zusam-menh¨ngend, reduziert jedoch sein Gewicht auf das Minimum. Hier wird deutlich welche aRelevanz minimale Spannb¨ume in der Praxis besitzen. So tritt das Spannbaumproblem azum Beispiel in Computernetzen in Form der Frage nach der k¨rzeste Verdrahtung al- uler zu verbindenden Rechner auf [HS84]. Interpretiert man zum Beispiel die Kanten inAbbildung 1.1 als Verdrahtung und die Knoten als Computer so wird schnell klar, dassder minimale Spannbaum es immer noch erlaubt jeden Computer zu erreichen jedochdie Verdrahtungsl¨nge drastisch sinkt und somit wahrscheinlich auch die Kosten f¨r ein a usolches Netz. 4 3 2 2 2 6 3 5 1 4 3 1 4 5 Abbildung 1.1: Graph mit seinem zugeh¨rigem (minimalen) Spannbaum o 2
  • 3. 1.3 Praktische und Theoretische Bedeutung Minimaler Spannb¨ume aDas Minimale Spannbaum Problem ist oft repr¨sentativ f¨r viele andere Probleme im a uZusammenhang mit Graphen. So k¨nnen die bekannten L¨sungsstrategien f¨r minima- o o ule Spannb¨ume oft auf diese Probleme ubertragen werden um diese wiederum zu l¨sen a ¨ o[Sed02]. Bei Der Minimum-Spanning-Tree-Heuristik wird zum Beispiel zuerst ein mini-maler Spannbaum erstellt um dann das Problem des Handlungsreisenden zu l¨sen. Auch oauf Bereiche ausserhalb der Theorie kann man das Problem ubertragen. So kann man sich ¨zum Beispiel vorstellen, dass die Knoten eines Graphen elektrische Komponenten sindund die Kanten der Draht zum Verbinden. Die Gewichtung der Kanten w¨re dann der aPreis oder die L¨nge des Drahtes. Ein minimaler Spannbaum ist die optimale Verdrah- atung aller Komponenten. Leicht l¨sst sich dies auch auf Computernetzwerke ubertragen. a ¨Ein anderer praktischer Einsatz f¨r minimale Spannb¨ume ist ein Scheduling Chart. Die u a a ¨Knoten sind hierbei die Auftr¨ge und die gewichteten Kanten stellen die Uberg¨nge mit adem n¨tigen Zeitaufwand zum Bearbeiten dar. In besseren Routern werden Spannb¨u- o ame verwendet um das Routing zu verbessern und Zyklenfreiheit zu gew¨hrleisten. Die aGewichtung der Kanten kann hierbei Kosten und Geschwindigkeit sein [Sys, Sed02].1.4 Greedy AlgorithmenDie vorgestellten Algorithmen zur Konstruktion minimaler Spannb¨ume sind jeweils agierige Algorithmen (engl.: greedy algorithms) die infolge ihres Zustandes die zu einemZeitpunkt bestm¨gliche Entscheidung zur Erreichung ihres Zieles auf Grund einer Bewer- otungsfunktion treffen. Solche Algorithmen sind im Vergleich zu backtrackenden Algorith-men vergleichsweise effizent. Gierige Algorithmen neigen ausserdem dazu schnell zu einerguten L¨sung zu f¨hren die jedoch nicht immer ein Optimum darstellt [HS81, HS84]. Eine o uBesonderheit sind jedoch L¨sungen von Problemen welche die Struktur eines Matroiden oaufweisen [Oxl92]. F¨r diese sind gierige Algorithmen in der Lage optimale L¨sungen zu u ofinden. Das Spannbaumproblem besitzt die Struktur eines Matroiden und somit findendie Algorithmen von Kruskal und Prim jeweils optimale L¨sungen. o1.5 Algorithmus von KruskalDer Algorithmus von Kruskal konstruiert einen minimalen Spannbaum T = (V, E ) auseinem ungerichteten, zusammenh¨ngenden, gewichteten Graphen G = (v, E). Dazu wird awie folgt beschrieben vorgegangen: Zu Beginn enth¨lt T genau die Knoten aus G. Seine Kantenmenge ist jedoch gleich ader leeren Menge E = ∅. Nun werden sukzessiv die Kanten e ∈ E aus dem GraphenG in die Kantenmenge E des Baumes T eingef¨gt. Dabei werden alle Kanten e ∈ E uin aufsteigender Reihenfolge ihrer Gewichte durchlaufen und in Abh¨ngigkeit einer Aus- awahlbedingung entweder verworfen oder aber zu E hinzugef¨gt. Die Auswahlbedingung upr¨ft ob das Einf¨gen der Kante zu Zyklen f¨rt. F¨hrt das Einf¨gen der Kante e ∈ E in u u u u u 3
  • 4. T zu Zyklen so wird die Kante e verworfen und mit der n¨chsten Kante fortgefahren. An- asonsten wird die Kante in die Kantenmenge E aus T eingef¨gt. Sind alle Kanten von T uin aufsteigender Reihenfolge ihrer Gewichte durchlaufen so terminiert dieser Algorithmusund der minimale Spannbaum T ist gefunden [GD03, HS84, Kru56]. Eine alternative Auswahlbedingung besteht darin zu pr¨fen ob das Einf¨gen einer u uKante e ∈ E in die Kantenmenge E des Graphen T dazu f¨hrt, dass paarweise disjunk- ute Zusammenhangskomponenten von T zu einer einzigen Zusammenhangskomponente verschmelzen“ beziehungsweise ob die Kante e inzident mit zwei Knoten aus paarweise”verschiedenen Zusammanehangskomponenten ist. Ist dies der Fall so wird die Kante eder Kantenmenge E hinzugef¨gt, andernfalls wird sie verworfen. Es ist einleuchtend das ubeide Bedingungen zu einem ¨quivalenten Auswahlverhalten f¨hren [GD03]. a u Folgender Pseudocode veranschaulicht dies:while(!isConnectedGraph(T)) { edge = getEdgeWithMinimumCost(E); deleteEdgeFromGraph(E, edge); if(!addingEdgeToGraphCreatesCycle(T, edge)) { addEdgeToGraph(T, edge) }}isConnectedGraph(Graph g) pr¨ft ob der Graph g zusammenh¨ngend ist. u agetEdgeWithMinimumCost(EdgeSet set) gibt die Kante mit dem kleinsten Gewicht aus der Kantenmenge set zur¨ck. udelteEdgeFromGraph(EdgeSet set, Edge edge) entfernt aus der Kantenmenge set die Kante edge.addingEdgeToGraphCraesCycle(Graph graph, Edge edge) gibt true zur¨ck genau dann u wenn das Hinzuf¨gen der Kante edge zu dem Graphen g zu einem Zyklus f¨hrt. u uaddEdgeToGraph(Graph graph, Edge edge) f¨gt dem Graphen graph die Kante edge u hinzu. Der minimale Spannbaum aus Abbildung 1.1 resultiert aus der Anwendung des Algo-rithmus mit der Annahme, dass die Kanten in folgender Reihenfolge vorsortiert vorliegen: (4, 5), (1, 2), (3, 6), (1, 4), (2, 4), (2, 3), (5, 6), (4, 3) Abbildung 1.2 skizziert die einzelnen Schritte die der Algortihmus durchl¨uft w¨rend a aer aus dem Graphen in Abbildung 1.1 mit genannter Kantensortierung den zugeh¨rigen ominimalen Spannbaum berechnet. 4
  • 5. 4 3 4 3 4 3 2 2 2 2 2 2 2 6 2 6 2 6 3 5 3 5 3 5 1 4 1 4 1 4 3 1 3 1 3 1 4 5 4 5 4 5 (a) (b) (c) 4 3 4 3 4 3 2 2 2 2 2 2 2 6 2 6 2 6 3 5 3 5 3 5 1 4 1 4 1 4 3 1 3 1 3 1 4 5 4 5 4 5 (d) (e) (f)Abbildung 1.2: Einzelne Phasen bei der Berechnung des minimalen Spannbaums (von links obennach rechts unten) Ein Beweis daf¨r, dass dieser Algortihmus auch tats¨chlich f¨r jeden ungerichteten, u a uzusammenh¨ngenden, gewichteten Graphen einen seiner minimalen Spannb¨ume liefert a awird in dem Buch von G¨ntig und Dierker [GD03] geliefert. u In konkreten Implementierungen wird das Finden der n¨chste Kante mit minimalen aKosten durch eine Priorit¨tswarteschlange (engl.: Priority-Queue) verwirklicht, welche ain aufsteigender Reihenfolge mit den Kanten des Graphen f¨r den wir einen minimalen uSpannbaum suchen initialsiert werden muss. Das Entfernen der Kante aus der Kanten-menge E wird ebenfalls durch die Priority-Queue implementiert. Eine Partition in Formeiner Merge-Find-Struktur wird f¨r das effizente Erkennen von Zyklen genutzt. Also das uErkennen ob die Endknoten der einzuf¨genden Kante in der selben Zusammenhangs- ukomponente des Graphen liegen, so dass das Einf¨gen der Kante zu einem Zyklus f¨hren u uw¨rde. Der Hauptaufwand des Algortihmus resultiert aus der Verwaltung der Kanten uin der Priorit¨tswarteschlange. Insgesamt ergibt sich daraus ein Gesamtaufwand von aO(e log e) wobei e die Anzahl der Kanten in dem Graphen G = (V, E) mit e = |E| ist[Sed02, GD03].1.6 Prims AlgorithmusDieser Algorithmus wurde schon 1957 von Robert C. Prim in Proceedings of the Ame-rican Mathematical Society. 7 vorgestellt [Pri57]. Wie auch Kruskals Algorithmus gehtPrims Algorithmus nach der Greedy Methode vor. Um aus dem Graphen G einen einenminimalen Spannbaum T zu berechnen geht der Algorithmus wie folgt vor. T wird als ein trivialer Graph mit einem beliebigen Knoten aus G initialisiert. Im 5
  • 6. n¨chsten Schritt wird dem Graphen T eine Kante aus G hinzugef¨gt. Diese Kante muss a ueinen neuen Knoten aus G, der nicht schon in T enthalten ist, mit T verbinden. Aus-serdem muss die Kante am niedrigsten gewichtet sein von allen Kanten, die die erstBedingung erf¨llen. Wenn diese Kante zu T hinzugef¨gt wurde, wird auch der Knoten, u uden sie verbindet, zu T hinzugef¨gt. Dieser Vorgang wird wiederholt bis alle Knoten aus uG auch in T enthalten sind. T ist dann ein minimaler Spannbaum von G. Im Pseudocode sieht dann ein Algorithmus, der diese Aufgabe erf¨llt, wie folgt aus: upublic static Graph primMinSpanTree(Graph input) { Graph T = new Graph(); T.addNode(input.getAnyNode()); while(!T.nodesEqual(input)) { Edge edges[] = getEdgesWhichAddNewNode(input, T); edges.sortByWeight(); T.addEdgeWithNode(edges[0]); } return T;}Graph repr¨sentiert einen gewichteten Graphen mit Knoten und Kanten. aEdge h¨lt eine gewichtete Kante in einem Graphen. aaddNode() f¨gt einen Knoten zum Graphen hinzu. ugetAnyNode() liefert einen beliebingen Knoten des Graphen zur¨ck. unodesEqual(Graph) uberpr¨ft ob die Menge der Knoten gleich derer des Arguments ist. ¨ ugetEdgesWhichAddNewNode(Graph1, Graph2) gibt ein Array der Kanten zur¨ck die u einen neuen Knoten aus Graph1 zu Graph2 hinzuf¨gen w¨rden und somit die erste u u Bedingung des Prim Algorithmus erf¨llen. usortByWeight() sortiert ein Array von Kanten nach deren Gewichtung.addEdgeWithNode() f¨gt dem Graphen eine neue Kante, sowie den dazugeh¨rigen u o Knoten der noch nicht in dem Graphen enthalten ist, hinzu. Dieser Algorithmus liegt in der Komplexit¨tsklasse O(n2 ). Dies kann man leicht an- ahand des Pseudocodes erkennen. Die while-Schleife ben¨tigt n − 1 Iterationen, da der oenstehende Spannbaum n − 1 Kanten haben wird und in jeder Iteration eine Kantehinzugef¨gt wird. Die Kanten mit getEdgesWhichAddNewNode zu ermitteln braucht im uMittel n Rechenschritte. Bei dem Sortieren der in Frage kommenden Kanten kann man 2auch von n Rechenschritten im Mittel ausgehen. Insgesamt ergeben sich (n − 1) ∗ ( n + n ) 2 2 2also die Klasse O(n2 ) [HS84]. Abbildung 1.3 zeigt die ersten drei Schritte des Prim Algorithmus angesetzt auf denGraphen aus Kapitel 3. Als Startknoten hat der Algorithmus in diesem Fall den ersten 6
  • 7. 4 3 4 3 4 3 2 2 2 2 2 2 2 6 2 6 2 6 3 5 3 5 3 5 1 4 1 4 1 4 3 1 3 1 3 1 4 5 4 5 4 5 (a) (b) (c) Abbildung 1.3: Drei Iterationen des Prim AlgorithmusKnoten. In dem zweiten Schritt hat der Algorithmus zwei Kanten mit gleicher Gewich-tung zur Auswahl. Welche hier bevorzugt wird kann nicht deterministisch entschiedenwerden.1.7 Res¨mee uWir haben nun in die Thematik der minimalen Spannb¨ume eingef¨hrt und zwei be- a ukannte Algorithmen zur effizienten L¨sung vorgestellt. Wenn man gute Datenstrukturen ound Techniken in diesen Algorithmen verwendet sind sie auch von der Effizenz optimal. Da schon in den f¨nfziger Jahren viel Forschung in dem Bereich betrieben wurde ist udieses Gebiet weitestgehend abgeschlossen und in der Theorie nur noch zur Lehre oderzur L¨sung komplexerer Probleme relevant. In der Praxis hingegen finden die Algorith- omen noch nach wie vor weiten Einsatz. 7
  • 8. Literaturverzeichnis[GD03] Ralf Hartmut G¨lting und Stefan Dieker. Datenstrukturen und Algorithmen. u Teubner, 2003.[HS81] Ellis Horowitz und Sartaj Sahni. Algorithmen, Entwurf und Analyse. Springer Verlag, 1981.[HS84] Ellis Horowitz und Sartaj Sahni. Fundamentals of Computer Algorithms. Com- puter Sci. P, 1984.[Kru56] Joseph Bernard Kruskal. On the shortest spanning subtree and the traveling salesman problem. In: Proceedings of the American Mathematical Society. 7, 1956.[Oxl92] James G. Oxley. Matroid Theory. Oxford Science Publications, 1992.[Pri57] Robert C. Prim Prim. Shortest connection networks and some generalisations. In: Bell System Technical Journal, 36, 1957.[Sed02] Robert Sedgewick. Algorithmen. 2 Ausgabe, 2002.[Sys] Cisco System. Understanding Spanning-Tree Protocol - http://www.cisco.com/univercd/cc/td/doc/product/rtrmgmt/sw ntman/cwsimain /cwsi2/cwsiug2/vlan2/stpapp.htm. 8

×