Minimal spannende Bäume - Technische Universität Braunschweig

Werbung
Minimal spannende Bäume
Gesucht: ein minimal spannender Baum zu G, d.h. eine minimale
Teilmenge Emin ⊆ E der Kanten, so dass Gmin = (V,Emin,d)
zusammenhängend und die Summe der Kantengewichte minimal ist.
In einer Lösung sind keine Zyklen enthalten, da sonst noch eine Kante
herausgenommen werden könnte. Die Lösung ist also ein Baum.
Beispiel:
4
3
3
3
2
8
Die Kosten des
minimalen spannenden
Baumes sind:
5
6
6
5
4
Institut für Medizinische Informatik
7
2
6
2+2+3+3+4+5+5 = 24
Die Lösung ist nicht
eindeutig!
Technische Universität
Braunschweig
Generische Algorithmen
Idee: Entwicklung algorithmischer Muster für eine Klasse von
Problemen zwecks Wiederverwendung.
Anwendung:
1. Wiedererkennen der generischen Problemstruktur in einem
konkreten Problem.
2. Anwenden des Algorithmenmusters auf konkretes Problem
durch Anpassung.
Behandelt werden:
a. Gierige Algorithmen
b. „Teile und Herrsche“-Algorithmen
c. Backtracking
Institut für Medizinische Informatik
Technische Universität
Braunschweig
Gierige (Greedy-) Algorithmen
Ziel: Lösen einer Optimierungsaufgabe
•
Problemstellung:
1. es gibt eine endliche Menge von Eingabewerten
2. es gibt eine Menge von (Teil-)Lösungen, die aus
Eingabewerten aufgebaut sind
3. es gibt eine Bewertungsfunktion für (Teil-)Lösungen
4. die Lösungen lassen sich schrittweise aus Teillösungen,
beginnend bei der leeren Lösung, durch Hinzunahme von
Eingabewerten aufbauen
5. gesucht wird eine (die) optimale Lösung
•
Vorgehensweise:
nimm (gierig) immer das best bewertete Stück
→ lokales Optimum wird gewählt.
Institut für Medizinische Informatik
Technische Universität
Braunschweig
Gierige (Greedy-) Algorithmen
Beispiel 3: Minimal spannende Bäume (3/4)
Kruskals gieriger Algorithmus zur Ermittlung eines minimal spannenden
Baumes (1956): selektiere fortwährend eine verbleibende Kante mit geringstem Gewicht, die keinen Zyklus erzeugt, bis alle Knoten verbunden sind
Beispiel:
Die Kosten (dieses) minimalen spannenden
Baumes sind: 2+2+3+3+4+5+5 = 24
4
3
3
3
5
2
8
Anmerkungen:
6
6
4
5
7
2
6
• Nach Wahl der Kanten 2,2,3 und 3 durfte
die verbleibende 3 nicht gewählt werden,
da ansonsten ein Zyklus entstehen würde.
• Eine eindeutige Lösung ist immer dann
vorhanden, wenn alle Gewichte
verschieden sind.
Institut für Medizinische Informatik
Technische Universität
Braunschweig
Gierige (Greedy-) Algorithmen
Algorithmus von Prim
Ansatzpunkt: Verbesserung der Größe der pro
Durchlauf betrachteten Kantenmenge E bzw.
von findeKanteMitGeringstemGewicht(E)
Idee: Beschränkung der Suche auf
Teilmenge Q von E, wobei
1.
2.
3.
Q enthält immer die billigste aus R
(=bisher berechneter Teilgraph) ausgehende Kante
Q sollte möglichst klein sein
Q sollte einfach zu ändern sein
(Forderung 1 ist zu garantieren !)
Institut für Medizinische Informatik
4
3
4,5
2
8
9
V/Q
3,5
2,5
6,5 5
6
7
10
= Q (Kandidaten)
Technische Universität
Braunschweig
11
Gierige (Greedy-) Algorithmen
Algorithmus von Prim
• Beim Alg. von Prim bildet die Kantenmenge A stets einen Baum.
• Der Baum startet bei einem beliebigen Wurzelknoten und wächst,
bis er V aufspannt.
• In jedem Schritt wird eine Kante hinzugefügt, die A mit einem
isolierten Knoten von GA = (V,A) verbindet und die bezüglich dieser
Eigenschaft minimal ist.
• Der Algorithmus verwendet zur Verwaltung der Knoten eine MinPrioritätswarteschlange Q, die auf einem Attribut schlüssel basiert.
Für jeden Knoten v ist schlüssel(v) das kleinste Gewicht aller
Kanten, die v mit einem Knoten des Baums verbinden.
• p(v) bezeichnet den Vater von v.
Institut für Medizinische Informatik
Technische Universität
Braunschweig
Kürzeste Wege
Ausgangspunkt:
gewichteter Graph
Beispiel: Bestimme den kürzesten
Weg von Frankfurt nach Celle
• Ausgehend von Startknoten a
und Zielknoten z ist
8
i =0
2
4
2
8
Erfurt
length ( P ) −1
i +1
Braunschweig
3
D.h. zu finden ist der kürzeste Pfad
P=[p0, p1, ..., pn] von a=p0 nach z=pn
in einem Graphen G= (V,E,w), mit
w(P)=min{ w(Q) | Q ist Pfad von p0
nach pn in G} und
i
2
5
Frankfurt
• der Pfad mit dem geringsten
Gewicht zu bestimmen.
∑ w(( p , p
2
6
• unter allen möglichen Wegen
von a nach z,
w( P) =
Augsburg
))
Institut für Medizinische Informatik
Celle
3
6
Darmstadt
Kürzester Weg:
[Frankfurt, Augsburg, Braunschweig,
Celle] mit Gewicht/Distanz 6
Aber fahren Sie bitte nicht so ;-)
Technische Universität
Braunschweig
Dijkstras Algorithmus (1/11)
E.W. Dijkstra (1930-...): Berühmter niederländischer
Informatiker/Mathematiker (Semaphoren, Banker's
Alg., THE Operating System etc.)
Zitate:
"I mean, if 10 years from now,
when you are doing something
quick and dirty,
you suddenly visualize
that I am looking over your shoulders
and say to yourself,
„Dijkstra would not have liked this“,
well that would be enough immortality for me."
"If you need more than five lines
to prove something,
then you‘re on the wrong track."
Institut für Medizinische Informatik
Technische Universität
Braunschweig
Dijkstras Algorithmus (2/11)
Dijkstras Algorithmus (1959):
• Iterative Erweiterung einer Menge von "billig" erreichbaren Kanten
• auf dem Greedy-Prinzip (immer das nächstbeste Stück nehmen)
basierende Weiterentwicklung der Breitensuche:
1. Beginne mit Startknoten s als aktuellen
Knoten (ak)
2. Bestimme die Distanzen der nur eine
Kante entfernten Knoten als Minimum ihrer
bisherigen Distanz (anfänglich ∞) und der
Distanz von ak plus dem Gewicht der
Kante von ak zu dem Knoten.
3. Betrachte ak nicht weiter und wähle den
Knoten mit dem niedrigsten Distanzwert
für die nächste Iteration (weiter Schritt 2)
Institut für Medizinische Informatik
c
1
3
a
2
3
e
2
b
4
f
d
5
1
2
Startknoten
3. Iteration
Startknoten u.s.w.
g
Startknoten
2. Iteration:
1. Iteration:
d(e)=3
d(e)=4
d(b)=2 minimal
d(b)=2
d(f)=1 minimal
Technische Universität
Braunschweig
Dijkstras Algorithmus
Beispiel (Saake/Sattler bzw. Cormen et al.):
t
∞
s 10
2
0
x
1
∞
s
9
3
4
6
7
5
∞
2
x
1
10
10
0
z
0
6
7
2
y
Iteration 1
14
9
3
4
6
7
5
∞
2
x
1
8
s 10
9
3
5
t
∞
4
5
∞
2
y
t
*Zustand vor Iteration
5
z
7
2
y
z
q=[ (y→5),(t→10),(x→∞), (z→∞) ]
Graph nach Initialisierung
q=[ (s→0),(t→∞),(x→∞),(y→∞),(z→∞) ]*
Iteration 2
Startknoten: s
t
s
8
10
2
0
x
1
3
13
6
7
5
y
2
7
0
3
6
5
y
2
7
z
q=[ (t→8), (x→13) ]
Iteration 4
Institut für Medizinische Informatik
2
0
x
1
8
s 10
9
7
5
t
9
4
z
q=[ (z→7), (t→8), (x→14) ]
Iteration 3
2
x
1
8
s 10
9
4
5
t
3
9
9
4
5
6
7
5
y
2
7
z
q=[ (x→9) ]
Iteration 5
Technische Universität
Braunschweig
Dijkstras Algorithmus
Anmerkung
Dijkstras Algorithmus ermittelt zunächst nur die Distanz. Um tatsächlich die
Kantenfolge zu ermitteln, die einen kürzesten Pfad von Knoten a zu Knoten b
bildet, ist
1. ein Verzeichnis v für die Vorgänger zu verwenden
2. der Vorgänger eines Knotens immer dann zu aktualisieren, wenn das
Gewicht des Knotens (Verzeichnis) d verkleinert wird. Änderung Relaxation:
if d(v) > d(u)+w(u,v) then
d(v)←d(u)+w(u,v);
v(v)←u;
fi;
3. Ein kürzester Pfad ist dann im durch v aufgespannten Baum durch Verfolgen
t
x
der Kanten von b nach a zu ermitteln.
1
Der durch Dijkstra (implizit über
das Verzeichnis v) erzeugte
aufspannende Baum hat
folgende Gestalt:
8
s 10
2
0
3
9
4
5
6
7
5
y
Institut für Medizinische Informatik
9
2
7
z
Technische Universität
Braunschweig
Herunterladen