Previous Contents Next

10   Spannbäume

Literatur: Kapitel 24 aus [CLR90].
Inhalt Kantengewichte ·minimale Spannbäume·nimmersatte Strategien (``greedy'') ·Kruskals Algorithmus ·Prims Algorithmus
Minimaler Spannbaum


Spannbaumalgorithmus
Definition 9   Sei A Teilmenge eines minimalen Spannbaumes für G. Eine Kante (u,v) ist sicher für A, falls A È {(u,v)} Teilmenge eines minimalen Spannbaumes ist.





Generic-MST(G,w) =
  A := 0;
  while A does not form a spanning tree
  do 
    find an edge (u,v) that is safe wrt. A
    A := A $\cup$ {(u,v)}
  done;
  return A





Sichere Kanten
Definition 10   Ein Schnitt (S, V-S) (cut) eines ungerichteten Graphen ist eine Partition von V. Eine Kante kreuzt den Schnitt, falls ein Endpunkt in S ist und der andere in V-S. Ein Schnitt respektiert eine Menge von Kanten, wenn keine Kante den Schnitt kreuzt. Eine Kante, die einen Schnitt kreuzt, ist leicht falls ihr Gewicht von allen kreuzenden Kanten minimal ist.17
Theorem 6  

minimaler-Spannbaum-Algorithmus
Es gilt: Wenn (u,v) eine leichte Kante ist die C mit einer anderen Komponente verbindet, dann ist (u,v) sicher für A.



Kruskals Algorithmus
Kruskal (2)






mst-kruskal(G,w) 
  A := 0;                   // A: Kantenmenge
                            // Invariante: A Teil eines min. S-B
  for all $v \in  V[G]$
  do Make-Set(v) done;      // Wald aus lauter Knoten

  sort the edges of $E$ by non-decreasing weight $w$;
 
   for all edges $(u,v) \in E$ (in order)
   do
     if   Find-Set(u) $\not=$ Find-Set(v) // nicht im selben Baum?
     then 
       A := A $\cup$ {(u,v)};// fuege Kante hinzu
       Union(u,v);           // vergroebere Partition
     fi;
   done;
   return A;

Kruskal (3)


Prims Algorithmus


mst-prim(G,w,r)            // G = Graph, w = Gewichtung,  r: Wurzel
  Q := V(G);               // priority queue von Knoten
                           // Q : Knoten noch nicht im Baum

  for all $u \in  Q$ do key[u] := $\infty$ done;
  key[r] := 0;                 
  p(r)   := nil;           // r ohne parent
  while  Q $\not= \emptyset$
  do
    u := extract_min(Q);   // u dem Baum hinzugefuegt
    for all $v \in Adj(u)$ // bewerte alle Nachbarn
    do
       if   $v \in$ Q and $w(u,v) < key(v)$
       then p(v)   := u;   // parent
            key(v) := w(u,v)   
       fi
    done
  done



Prim (3)


February 5, 2002
Previous Contents Next