SlideShare ist ein Scribd-Unternehmen logo
1 von 8
Downloaden Sie, um offline zu lesen
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.
                                                  a


1.1 Einleitung
Oft stellt sich die Frage wie man mit m¨glichst wenigen Verbindungen eine bestimmte
                                        o
Menge von Objekten, zum Beispiel Computer, miteinander verbinden kann. Die L¨sung
                                                                                o
dieses Problems ist in der Graphentheorie ein spannender Baum. In der Praxis kann
man diese Verbindungen jedoch oft bez¨glich ihrer L¨nge, Kosten oder anderer Merkmale
                                      u            a
bewerten. Diese Bewertung bezeichnen wir im folgenden als Gewichtung. Wenn man nun
die bestm¨gliche Verbindung aller Komponenten findet nennt man dies einen minimal
           o
spannenden Baum.
   Im Folgenden werden wir minimale Spannb¨ume noch formal definieren und n¨her auf
                                             a                                a
deren praktische und theoretische Bedeutung eingehen. Im Hauptteil werden wir dann
schliesslich zwei Greedy-Algorithmen zur Berechnung minimaler Spannb¨ume vorstellen.
                                                                       a
Zun¨chst den Algortihmus von Kurskal welcher erstmals 1956 in der Zeitschrift Procee-
    a
dings of the American Mathematical Society von dem US-amerkianischen Mathematiker
und Statistiker Joseph Bernard Kruskal vorgestellt wurde [Kru56]. Daraufhin dann den
Algorithmus 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                    a
ausformuliert.


1.2 Spannb¨ume
          a
In 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
Knoten enth¨lt und ein Baum, also insbesondere zusammenh¨ngend und keine Zyklen
              a                                             a
enth¨lt, ist [HS81].
     a
  Abbildung 1.1 zeigt einen Graphen und einen seiner zugeh¨rigen Spannb¨ume (Dar-
                                                           o             a
stellung in fetten Linien und Knoten). Der vorherige Satz impliziert schon, dass ein
ungerichteter, zusammenh¨ngender Graph durchaus mehrere zugeh¨rige Spannb¨ume
                          a                                       o            a
besitzen 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 Graphen
w(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
                                                                         a
bilden so das Gewicht des Graphen. Ein Spannbaum T = (V, E ) ist nun genau dann
minimal 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,
                                                                            a
gewichteten Graphen G = (V, E) also derjenige Baum welcher alle Knoten aus V so
verbindet, 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
      a
Relevanz minimale Spannb¨ume in der Praxis besitzen. So tritt das Spannbaumproblem
                            a
zum Beispiel in Computernetzen in Form der Frage nach der k¨rzeste Verdrahtung al-
                                                              u
ler zu verbindenden Rechner auf [HS84]. Interpretiert man zum Beispiel die Kanten in
Abbildung 1.1 als Verdrahtung und die Knoten als Computer so wird schnell klar, dass
der minimale Spannbaum es immer noch erlaubt jeden Computer zu erreichen jedoch
die Verdrahtungsl¨nge drastisch sinkt und somit wahrscheinlich auch die Kosten f¨r ein
                    a                                                           u
solches 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
1.3 Praktische und Theoretische Bedeutung Minimaler
    Spannb¨ume
           a
Das Minimale Spannbaum Problem ist oft repr¨sentativ f¨r viele andere Probleme im
                                                a         u
Zusammenhang mit Graphen. So k¨nnen die bekannten L¨sungsstrategien f¨r minima-
                                    o                     o                 u
le 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
                                                                             o
auf Bereiche ausserhalb der Theorie kann man das Problem ubertragen. So kann man sich
                                                          ¨
zum Beispiel vorstellen, dass die Knoten eines Graphen elektrische Komponenten sind
und die Kanten der Draht zum Verbinden. Die Gewichtung der Kanten w¨re dann der
                                                                          a
Preis oder die L¨nge des Drahtes. Ein minimaler Spannbaum ist die optimale Verdrah-
                a
tung 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
                                                                               a
dem n¨tigen Zeitaufwand zum Bearbeiten dar. In besseren Routern werden Spannb¨u-
      o                                                                            a
me verwendet um das Routing zu verbessern und Zyklenfreiheit zu gew¨hrleisten. Die
                                                                        a
Gewichtung der Kanten kann hierbei Kosten und Geschwindigkeit sein [Sys, Sed02].


1.4 Greedy Algorithmen
Die vorgestellten Algorithmen zur Konstruktion minimaler Spannb¨ume sind jeweils
                                                                      a
gierige Algorithmen (engl.: greedy algorithms) die infolge ihres Zustandes die zu einem
Zeitpunkt bestm¨gliche Entscheidung zur Erreichung ihres Zieles auf Grund einer Bewer-
                o
tungsfunktion treffen. Solche Algorithmen sind im Vergleich zu backtrackenden Algorith-
men vergleichsweise effizent. Gierige Algorithmen neigen ausserdem dazu schnell zu einer
guten L¨sung zu f¨hren die jedoch nicht immer ein Optimum darstellt [HS81, HS84]. Eine
        o        u
Besonderheit sind jedoch L¨sungen von Problemen welche die Struktur eines Matroiden
                           o
aufweisen [Oxl92]. F¨r diese sind gierige Algorithmen in der Lage optimale L¨sungen zu
                    u                                                        o
finden. Das Spannbaumproblem besitzt die Struktur eines Matroiden und somit finden
die Algorithmen von Kruskal und Prim jeweils optimale L¨sungen.
                                                           o


1.5 Algorithmus von Kruskal
Der Algorithmus von Kruskal konstruiert einen minimalen Spannbaum T = (V, E ) aus
einem ungerichteten, zusammenh¨ngenden, gewichteten Graphen G = (v, E). Dazu wird
                                  a
wie folgt beschrieben vorgegangen:
   Zu Beginn enth¨lt T genau die Knoten aus G. Seine Kantenmenge ist jedoch gleich
                   a
der leeren Menge E = ∅. Nun werden sukzessiv die Kanten e ∈ E aus dem Graphen
G in die Kantenmenge E des Baumes T eingef¨gt. Dabei werden alle Kanten e ∈ E
                                                u
in aufsteigender Reihenfolge ihrer Gewichte durchlaufen und in Abh¨ngigkeit einer Aus-
                                                                  a
wahlbedingung entweder verworfen oder aber zu E hinzugef¨gt. Die Auswahlbedingung
                                                           u
pr¨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
T zu Zyklen so wird die Kante e verworfen und mit der n¨chsten Kante fortgefahren. An-
                                                        a
sonsten wird die Kante in die Kantenmenge E aus T eingef¨gt. Sind alle Kanten von T
                                                            u
in aufsteigender Reihenfolge ihrer Gewichte durchlaufen so terminiert dieser Algorithmus
und der minimale Spannbaum T ist gefunden [GD03, HS84, Kru56].
   Eine alternative Auswahlbedingung besteht darin zu pr¨fen ob das Einf¨gen einer
                                                            u                 u
Kante e ∈ E in die Kantenmenge E des Graphen T dazu f¨hrt, dass paarweise disjunk-
                                                           u
te 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 e
der Kantenmenge E hinzugef¨gt, andernfalls wird sie verworfen. Es ist einleuchtend das
                              u
beide 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                           a

getEdgeWithMinimumCost(EdgeSet set) gibt die Kante mit dem kleinsten Gewicht
     aus der Kantenmenge set zur¨ck.
                                u

delteEdgeFromGraph(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                                                     u

addEdgeToGraph(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     a
er aus dem Graphen in Abbildung 1.1 mit genannter Kantensortierung den zugeh¨rigen
                                                                                 o
minimalen Spannbaum berechnet.




                                                 4
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 oben
nach rechts unten)


  Ein Beweis daf¨r, dass dieser Algortihmus auch tats¨chlich f¨r jeden ungerichteten,
                  u                                    a      u
zusammenh¨ngenden, gewichteten Graphen einen seiner minimalen Spannb¨ume liefert
            a                                                             a
wird in dem Buch von G¨ntig und Dierker [GD03] geliefert.
                         u
  In konkreten Implementierungen wird das Finden der n¨chste Kante mit minimalen
                                                          a
Kosten durch eine Priorit¨tswarteschlange (engl.: Priority-Queue) verwirklicht, welche
                          a
in aufsteigender Reihenfolge mit den Kanten des Graphen f¨r den wir einen minimalen
                                                           u
Spannbaum suchen initialsiert werden muss. Das Entfernen der Kante aus der Kanten-
menge E wird ebenfalls durch die Priority-Queue implementiert. Eine Partition in Form
einer Merge-Find-Struktur wird f¨r das effizente Erkennen von Zyklen genutzt. Also das
                                 u
Erkennen ob die Endknoten der einzuf¨genden Kante in der selben Zusammenhangs-
                                       u
komponente des Graphen liegen, so dass das Einf¨gen der Kante zu einem Zyklus f¨hren
                                               u                                u
w¨rde. Der Hauptaufwand des Algortihmus resultiert aus der Verwaltung der Kanten
  u
in der Priorit¨tswarteschlange. Insgesamt ergibt sich daraus ein Gesamtaufwand von
              a
O(e log e) wobei e die Anzahl der Kanten in dem Graphen G = (V, E) mit e = |E| ist
[Sed02, GD03].


1.6 Prims Algorithmus
Dieser Algorithmus wurde schon 1957 von Robert C. Prim in Proceedings of the Ame-
rican Mathematical Society. 7 vorgestellt [Pri57]. Wie auch Kruskals Algorithmus geht
Prims Algorithmus nach der Greedy Methode vor. Um aus dem Graphen G einen einen
minimalen 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
n¨chsten Schritt wird dem Graphen T eine Kante aus G hinzugef¨gt. Diese Kante muss
 a                                                              u
einen 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 erst
Bedingung erf¨llen. Wenn diese Kante zu T hinzugef¨gt wurde, wird auch der Knoten,
              u                                      u
den sie verbindet, zu T hinzugef¨gt. Dieser Vorgang wird wiederholt bis alle Knoten aus
                                u
G 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:
                                                                   u

public 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.
          a

Edge h¨lt eine gewichtete Kante in einem Graphen.
      a

addNode() f¨gt einen Knoten zum Graphen hinzu.
           u

getAnyNode() liefert einen beliebingen Knoten des Graphen zur¨ck.
                                                             u

nodesEqual(Graph) uberpr¨ft ob die Menge der Knoten gleich derer des Arguments ist.
                  ¨     u

getEdgesWhichAddNewNode(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.
                                       u

sortByWeight() 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-
                                              a
hand des Pseudocodes erkennen. Die while-Schleife ben¨tigt n − 1 Iterationen, da der
                                                         o
enstehende Spannbaum n − 1 Kanten haben wird und in jeder Iteration eine Kante
hinzugef¨gt wird. Die Kanten mit getEdgesWhichAddNewNode zu ermitteln braucht im
          u
Mittel n Rechenschritte. Bei dem Sortieren der in Frage kommenden Kanten kann man
        2
auch von n Rechenschritten im Mittel ausgehen. Insgesamt ergeben sich (n − 1) ∗ ( n + n )
            2                                                                     2   2
also die Klasse O(n2 ) [HS84].
   Abbildung 1.3 zeigt die ersten drei Schritte des Prim Algorithmus angesetzt auf den
Graphen aus Kapitel 3. Als Startknoten hat der Algorithmus in diesem Fall den ersten



                                           6
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 Algorithmus


Knoten. In dem zweiten Schritt hat der Algorithmus zwei Kanten mit gleicher Gewich-
tung zur Auswahl. Welche hier bevorzugt wird kann nicht deterministisch entschieden
werden.


1.7 Res¨mee
       u
Wir haben nun in die Thematik der minimalen Spannb¨ume eingef¨hrt und zwei be-
                                                       a           u
kannte Algorithmen zur effizienten L¨sung vorgestellt. Wenn man gute Datenstrukturen
                                   o
und 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
                    u
dieses Gebiet weitestgehend abgeschlossen und in der Theorie nur noch zur Lehre oder
zur L¨sung komplexerer Probleme relevant. In der Praxis hingegen finden die Algorith-
      o
men noch nach wie vor weiten Einsatz.




                                                              7
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

Weitere ähnliche Inhalte

Mehr von Johannes Diemke

2010-JOGL-11-Toon-Shading
2010-JOGL-11-Toon-Shading2010-JOGL-11-Toon-Shading
2010-JOGL-11-Toon-ShadingJohannes Diemke
 
2010-JOGL-10-Wavefront-OBJ
2010-JOGL-10-Wavefront-OBJ2010-JOGL-10-Wavefront-OBJ
2010-JOGL-10-Wavefront-OBJJohannes Diemke
 
2010-JOGL-09-Texture-Mapping
2010-JOGL-09-Texture-Mapping2010-JOGL-09-Texture-Mapping
2010-JOGL-09-Texture-MappingJohannes Diemke
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-KnotenJohannes Diemke
 
2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05Johannes Diemke
 
2010-JOGL-06-Licht-und-Material
2010-JOGL-06-Licht-und-Material2010-JOGL-06-Licht-und-Material
2010-JOGL-06-Licht-und-MaterialJohannes Diemke
 
2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen2010-JOGL-05-Transformationen
2010-JOGL-05-TransformationenJohannes Diemke
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-RemovalJohannes Diemke
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-EinfuehrungJohannes Diemke
 
2010-JOGL-01-Organisation
2010-JOGL-01-Organisation2010-JOGL-01-Organisation
2010-JOGL-01-OrganisationJohannes Diemke
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Johannes Diemke
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Johannes Diemke
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Johannes Diemke
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Johannes Diemke
 
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010Johannes Diemke
 
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Johannes Diemke
 
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumAgile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumJohannes Diemke
 
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Johannes Diemke
 

Mehr von Johannes Diemke (19)

2010-JOGL-11-Toon-Shading
2010-JOGL-11-Toon-Shading2010-JOGL-11-Toon-Shading
2010-JOGL-11-Toon-Shading
 
2010-JOGL-10-Wavefront-OBJ
2010-JOGL-10-Wavefront-OBJ2010-JOGL-10-Wavefront-OBJ
2010-JOGL-10-Wavefront-OBJ
 
2010-JOGL-09-Texture-Mapping
2010-JOGL-09-Texture-Mapping2010-JOGL-09-Texture-Mapping
2010-JOGL-09-Texture-Mapping
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten
 
2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05
 
2010-JOGL-06-Licht-und-Material
2010-JOGL-06-Licht-und-Material2010-JOGL-06-Licht-und-Material
2010-JOGL-06-Licht-und-Material
 
2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung
 
2010-JOGL-01-Organisation
2010-JOGL-01-Organisation2010-JOGL-01-Organisation
2010-JOGL-01-Organisation
 
Boost C++ Libraries
Boost C++ LibrariesBoost C++ Libraries
Boost C++ Libraries
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)
 
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
 
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
 
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumAgile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
 
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
 

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

  • 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. a 1.1 Einleitung Oft stellt sich die Frage wie man mit m¨glichst wenigen Verbindungen eine bestimmte o Menge von Objekten, zum Beispiel Computer, miteinander verbinden kann. Die L¨sung o dieses Problems ist in der Graphentheorie ein spannender Baum. In der Praxis kann man diese Verbindungen jedoch oft bez¨glich ihrer L¨nge, Kosten oder anderer Merkmale u a bewerten. Diese Bewertung bezeichnen wir im folgenden als Gewichtung. Wenn man nun die bestm¨gliche Verbindung aller Komponenten findet nennt man dies einen minimal o spannenden Baum. Im Folgenden werden wir minimale Spannb¨ume noch formal definieren und n¨her auf a a deren praktische und theoretische Bedeutung eingehen. Im Hauptteil werden wir dann schliesslich zwei Greedy-Algorithmen zur Berechnung minimaler Spannb¨ume vorstellen. a Zun¨chst den Algortihmus von Kurskal welcher erstmals 1956 in der Zeitschrift Procee- a dings of the American Mathematical Society von dem US-amerkianischen Mathematiker und Statistiker Joseph Bernard Kruskal vorgestellt wurde [Kru56]. Daraufhin dann den Algorithmus 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 a ausformuliert. 1.2 Spannb¨ume a In 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 a enth¨lt, ist [HS81]. a Abbildung 1.1 zeigt einen Graphen und einen seiner zugeh¨rigen Spannb¨ume (Dar- o a stellung in fetten Linien und Knoten). Der vorherige Satz impliziert schon, dass ein ungerichteter, zusammenh¨ngender Graph durchaus mehrere zugeh¨rige Spannb¨ume a o a besitzen 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 Graphen w(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 a bilden so das Gewicht des Graphen. Ein Spannbaum T = (V, E ) ist nun genau dann minimal 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, a gewichteten Graphen G = (V, E) also derjenige Baum welcher alle Knoten aus V so verbindet, 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 a Relevanz minimale Spannb¨ume in der Praxis besitzen. So tritt das Spannbaumproblem a zum Beispiel in Computernetzen in Form der Frage nach der k¨rzeste Verdrahtung al- u ler zu verbindenden Rechner auf [HS84]. Interpretiert man zum Beispiel die Kanten in Abbildung 1.1 als Verdrahtung und die Knoten als Computer so wird schnell klar, dass der minimale Spannbaum es immer noch erlaubt jeden Computer zu erreichen jedoch die Verdrahtungsl¨nge drastisch sinkt und somit wahrscheinlich auch die Kosten f¨r ein a u solches 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 a Das Minimale Spannbaum Problem ist oft repr¨sentativ f¨r viele andere Probleme im a u Zusammenhang mit Graphen. So k¨nnen die bekannten L¨sungsstrategien f¨r minima- o o u le 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 o auf Bereiche ausserhalb der Theorie kann man das Problem ubertragen. So kann man sich ¨ zum Beispiel vorstellen, dass die Knoten eines Graphen elektrische Komponenten sind und die Kanten der Draht zum Verbinden. Die Gewichtung der Kanten w¨re dann der a Preis oder die L¨nge des Drahtes. Ein minimaler Spannbaum ist die optimale Verdrah- a tung 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 a dem n¨tigen Zeitaufwand zum Bearbeiten dar. In besseren Routern werden Spannb¨u- o a me verwendet um das Routing zu verbessern und Zyklenfreiheit zu gew¨hrleisten. Die a Gewichtung der Kanten kann hierbei Kosten und Geschwindigkeit sein [Sys, Sed02]. 1.4 Greedy Algorithmen Die vorgestellten Algorithmen zur Konstruktion minimaler Spannb¨ume sind jeweils a gierige Algorithmen (engl.: greedy algorithms) die infolge ihres Zustandes die zu einem Zeitpunkt bestm¨gliche Entscheidung zur Erreichung ihres Zieles auf Grund einer Bewer- o tungsfunktion treffen. Solche Algorithmen sind im Vergleich zu backtrackenden Algorith- men vergleichsweise effizent. Gierige Algorithmen neigen ausserdem dazu schnell zu einer guten L¨sung zu f¨hren die jedoch nicht immer ein Optimum darstellt [HS81, HS84]. Eine o u Besonderheit sind jedoch L¨sungen von Problemen welche die Struktur eines Matroiden o aufweisen [Oxl92]. F¨r diese sind gierige Algorithmen in der Lage optimale L¨sungen zu u o finden. Das Spannbaumproblem besitzt die Struktur eines Matroiden und somit finden die Algorithmen von Kruskal und Prim jeweils optimale L¨sungen. o 1.5 Algorithmus von Kruskal Der Algorithmus von Kruskal konstruiert einen minimalen Spannbaum T = (V, E ) aus einem ungerichteten, zusammenh¨ngenden, gewichteten Graphen G = (v, E). Dazu wird a wie folgt beschrieben vorgegangen: Zu Beginn enth¨lt T genau die Knoten aus G. Seine Kantenmenge ist jedoch gleich a der leeren Menge E = ∅. Nun werden sukzessiv die Kanten e ∈ E aus dem Graphen G in die Kantenmenge E des Baumes T eingef¨gt. Dabei werden alle Kanten e ∈ E u in aufsteigender Reihenfolge ihrer Gewichte durchlaufen und in Abh¨ngigkeit einer Aus- a wahlbedingung entweder verworfen oder aber zu E hinzugef¨gt. Die Auswahlbedingung u pr¨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- a sonsten wird die Kante in die Kantenmenge E aus T eingef¨gt. Sind alle Kanten von T u in aufsteigender Reihenfolge ihrer Gewichte durchlaufen so terminiert dieser Algorithmus und der minimale Spannbaum T ist gefunden [GD03, HS84, Kru56]. Eine alternative Auswahlbedingung besteht darin zu pr¨fen ob das Einf¨gen einer u u Kante e ∈ E in die Kantenmenge E des Graphen T dazu f¨hrt, dass paarweise disjunk- u te 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 e der Kantenmenge E hinzugef¨gt, andernfalls wird sie verworfen. Es ist einleuchtend das u beide 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 a getEdgeWithMinimumCost(EdgeSet set) gibt die Kante mit dem kleinsten Gewicht aus der Kantenmenge set zur¨ck. u delteEdgeFromGraph(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 u addEdgeToGraph(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 a er aus dem Graphen in Abbildung 1.1 mit genannter Kantensortierung den zugeh¨rigen o minimalen 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 oben nach rechts unten) Ein Beweis daf¨r, dass dieser Algortihmus auch tats¨chlich f¨r jeden ungerichteten, u a u zusammenh¨ngenden, gewichteten Graphen einen seiner minimalen Spannb¨ume liefert a a wird in dem Buch von G¨ntig und Dierker [GD03] geliefert. u In konkreten Implementierungen wird das Finden der n¨chste Kante mit minimalen a Kosten durch eine Priorit¨tswarteschlange (engl.: Priority-Queue) verwirklicht, welche a in aufsteigender Reihenfolge mit den Kanten des Graphen f¨r den wir einen minimalen u Spannbaum suchen initialsiert werden muss. Das Entfernen der Kante aus der Kanten- menge E wird ebenfalls durch die Priority-Queue implementiert. Eine Partition in Form einer Merge-Find-Struktur wird f¨r das effizente Erkennen von Zyklen genutzt. Also das u Erkennen ob die Endknoten der einzuf¨genden Kante in der selben Zusammenhangs- u komponente des Graphen liegen, so dass das Einf¨gen der Kante zu einem Zyklus f¨hren u u w¨rde. Der Hauptaufwand des Algortihmus resultiert aus der Verwaltung der Kanten u in der Priorit¨tswarteschlange. Insgesamt ergibt sich daraus ein Gesamtaufwand von a O(e log e) wobei e die Anzahl der Kanten in dem Graphen G = (V, E) mit e = |E| ist [Sed02, GD03]. 1.6 Prims Algorithmus Dieser Algorithmus wurde schon 1957 von Robert C. Prim in Proceedings of the Ame- rican Mathematical Society. 7 vorgestellt [Pri57]. Wie auch Kruskals Algorithmus geht Prims Algorithmus nach der Greedy Methode vor. Um aus dem Graphen G einen einen minimalen 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 u einen 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 erst Bedingung erf¨llen. Wenn diese Kante zu T hinzugef¨gt wurde, wird auch der Knoten, u u den sie verbindet, zu T hinzugef¨gt. Dieser Vorgang wird wiederholt bis alle Knoten aus u G 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: u public 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. a Edge h¨lt eine gewichtete Kante in einem Graphen. a addNode() f¨gt einen Knoten zum Graphen hinzu. u getAnyNode() liefert einen beliebingen Knoten des Graphen zur¨ck. u nodesEqual(Graph) uberpr¨ft ob die Menge der Knoten gleich derer des Arguments ist. ¨ u getEdgesWhichAddNewNode(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. u sortByWeight() 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- a hand des Pseudocodes erkennen. Die while-Schleife ben¨tigt n − 1 Iterationen, da der o enstehende Spannbaum n − 1 Kanten haben wird und in jeder Iteration eine Kante hinzugef¨gt wird. Die Kanten mit getEdgesWhichAddNewNode zu ermitteln braucht im u Mittel n Rechenschritte. Bei dem Sortieren der in Frage kommenden Kanten kann man 2 auch von n Rechenschritten im Mittel ausgehen. Insgesamt ergeben sich (n − 1) ∗ ( n + n ) 2 2 2 also die Klasse O(n2 ) [HS84]. Abbildung 1.3 zeigt die ersten drei Schritte des Prim Algorithmus angesetzt auf den Graphen 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 Algorithmus Knoten. In dem zweiten Schritt hat der Algorithmus zwei Kanten mit gleicher Gewich- tung zur Auswahl. Welche hier bevorzugt wird kann nicht deterministisch entschieden werden. 1.7 Res¨mee u Wir haben nun in die Thematik der minimalen Spannb¨ume eingef¨hrt und zwei be- a u kannte Algorithmen zur effizienten L¨sung vorgestellt. Wenn man gute Datenstrukturen o und 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 u dieses Gebiet weitestgehend abgeschlossen und in der Theorie nur noch zur Lehre oder zur L¨sung komplexerer Probleme relevant. In der Praxis hingegen finden die Algorith- o men 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