14
Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Vorlesung Datenstrukturen Graphen (2) Spannbäume Kürzeste Wege 455

Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Embed Size (px)

Citation preview

Page 1: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Vorlesung DatenstrukturenGraphen (2)

Spannbäume

Kürzeste Wege

455

Page 2: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Wiederholung

456

Traversierung eines Graphen via Tiefendurchlaufs / Breitendurchlauf

1. Wähle einen beliebigen Knoten aus dem Graph

2. Lege diesen Knoten in einem Stapel / einer Schlange ab

3. Solange der Stapel / die Schlange nicht leer ist

• Entnimm einen Knoten v aus dem Stapel / der Schlange

• Wenn v nicht markiert ist, dann

• Markiere v als besucht

• Füge alle zu v adjazenten, nicht markierten Knoten dem Stapel / der Schlange hinzu

Page 3: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

SpannbaumGrundidee

Aufgrund der systematischen Verarbeitung der Knoten eines Graphen sowie des Ignorierens bereits besuchter Knoten kann man aus der Reihenfolge der besuchten Knoten des Graphen einen Baum konstruieren, der alle Graphknoten enthält, die vom Startknoten aus erreichbar sind.

Erzeugung

Man generiert aus dem jeweils im Traversierungsalgorithmus verarbeiteten (noch nicht markierten) Knoten v einen Baum, bei dem v immer die (Teilbaum-)Wurzel seiner (noch nicht markierten) adjazenten Knoten darstellt, folgt dem Weg der Verarbeitung und entfernt gegebenenfalls bei Markierung eines Knotens Duplikate auf schon existierenden Ebenen.

Spannwald

Falls nicht alle Knoten des Graphen im Spannbaum enthalten sind, können wir den Vorgang für die nicht besuchten Knoten wiederholen und erhalten dann einen Wald von Spannbäumen.

457

Page 4: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Gewichtete GraphenVerallgemeinerung von Graphen

Sehr viele Probleme auf Graphen beruhen auf der Auswertung einer Kostenfunktion, die Kanten ein Gewicht zuordnet, z.B. Routenplanung (Distanzen zwischen Städten, Übertragungskosten von Energie im Energieverbund, Informationsweg zwischen Kommunikationspartnern im Internet, ...)

Realisierung

• Adjazenzmatrix: Wir speichern die tatsächlichen Gewichte der Kanten statt der Binärgewichte (Kante vorhanden / keine Kante).

• Adjazenzliste: Wir erweitern die Liste der adjazenten Knoten um eine Strukturkomponente,die das Gewicht der Kante zum aktuellen Knoten aufnimmt.

Einschränkung

Negative Gewichte sind nicht erlaubt. Diese Forderung stellt jedoch keine wirkliche Einschränkung dar, da sich Graphen entsprechend umformen lassen (Gallo, Pallottino, 1986).

458

Page 5: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Kürzester Weg zwischen zwei KnotenAlgorithmus von Dijkstra

Berechnet von einem gegebenen Startknoten aus die kürzesten Wege zu allen Knoten eines Graphen (die von diesem Startknoten aus erreichbar sind).

Allgemeines Funktionsprinzip

Für jeden Knoten u wird zusätzlich festgehalten, zu welchen günstigsten Gesamtkosten und über welchen Vorgängerknoten u vom Startknoten aus am günstigsten erreichbar ist.

Falls ein Knoten v gefunden werden kann, über den man kostengünstiger zu u gelangt, werden die Gesamtkosten aktualisiert und der Vorgängerknoten von u auf v gesetzt.

Startzustand

Initialisiere alle Knoten mit Kosten ∞

Initialisiere Startknoten mit Kosten 0

459

Page 6: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Algorithmus von DijkstraEingabe

• Gewichteter Graph mit Knotenmenge V und Kantenmenge E mit Kantengewicht w(e∈E)

• Startknoten s∈V

Pseudocode

K(v) = ∞ für alle v∈V // Initialisierung der Gesamtkosten eines Knotens

K(s) = 0 // Startknoten hat Kosten 0

R = V // Menge noch zu untersuchender Knoten

Solange R nicht leer ist

Wähle v∈R mit kleinstem K(v) // Verwende immer den „billigsten Knoten“

Entferne v aus R

Für alle zu v adjazenten Knoten u mit u∈R

Wenn K(v) + w(v,u) < K(u) // u ist über v billiger zu erreichen

K(u) = K(v) + w(v,u) // aktualisiere Kosten von u

Vorgänger(u) = v // aktualisiere Vorgänger von u

460

Page 7: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Kürzeste Wege zwischen allen KnotenFloyd-Warshal-Algorithmus

Wir testen für alle möglichen Kantenkombinationen (j,k), ob man über irgendeinen dritten Knoten i günstiger (bzw. überhaupt) von j nach k gelangen kann, also ob w(j,i) + w(i,k) < w(j,k).

Wenn ja, aktualisieren wir das Gewicht w(j,k).

Voraussetzung

Darstellung des gewichteten Graphen mittels Adjazenzmatrix.

Ergebnis

Modifizierte Adjazenzmatrix, die die günstigsten Verbindungen zwischen allen Knoten (auch indirekter Art) enthält.

Besonderheit

Negative Gewichte sind direkt möglich.

461

for i = 1 to |V|

for j = 1 to |V|

for k = 1 to |V|

if w(j,i) + w(i,k) < w(j,k)

w(j,k) = w(j,i) + w(i,k)

Page 8: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Floyd-Warshall-Algorithmus

Zyklenerkennung

Der Floyd-Warshall-Algorithmus beinhaltet eine implizite Zyklenerkennung.

Voraussetzung

Die Elemente der Hauptdiagonalen der Adjazenzmatrix müssen mit ∞ initialisiert werden.

Ergebnis

Falls nach der Ausführung des Algorithmus mindestens ein Gewicht auf der

Hauptdiagonalen ungleich ∞ ist, dann existiert (mindestens) ein Zyklus im

Graphen.

462

Page 9: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Bewertung der VerfahrenFloyd-Warshall-Algorithmus

• berechnet die kürzesten Wege zwischen

allen Knoten eines Graphen

• negative Gewichte sind direkt möglich

• sehr hohe Berechnungskomplexität O(|V|3)

463

Dijkstra-Algorithmus

• berechnet die kürzesten Wege / Kosten

zwischen einem Startknoten und allen anderen Knoten

• nur positive Gewichte sind möglich

• hohe Berechnungskomplexität O(|V|2)

Fazit (für Berechnung der kürzesten Wege zwischen allen Knoten)

• für lichte Graphen bietet sich die |V|-malige Berechnung des kürzesten Weges zwischen

jedem v∈V und den anderen Knoten nach der Methode von Dijkstra an

• für dichte Graphen ist die Laufzeit des Floyd-Warshall-Algorithmus akzeptabel

Page 10: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Ein AnwendungsbeispielWeg- bzw. Zielsuche in einem Labyrinth:

464

Page 11: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Modellierung des Labyrinths als GraphJeden Punkt im Labyrinth, an dem sich eine Wahlmöglichkeit für den Weg bietet oder ein Weg endet, modellieren wir als Knoten und alle verbindenden Wege als Kanten eines Graphen.

Da die Wege im Labyrinth in beide Richtungen beschritten werden können, sind die Kanten ungerichtet.

465

Page 12: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Suchen in GraphenSuchen mittels Graphtraversierung

Mit Hilfe der Graphmodellierung des Labyrinths können wir mit Hilfe der bekannten Traversierungsalgorithmen einen Weg durch das Labyrinth von dessen Eingang (dem Startknoten) zum Ausgang (einem Zielknoten) finden.

Im Gegensatz zur Traversierung aller Knoten können wir die Suche abbrechen, sobald wir einen Zielknoten gefunden haben.

Tiefensuche & Breitensuche

Analog zum Tiefen- oder Breitendurchlauf eines Graphen bezeichnen wir das korrespondierende Suchverfahren als Tiefen- oder Breitensuche.

Wegsuche & Zielsuche

Je nach Aufgabenstellung kann sowohl der Zielknoten als auch der Weg dahin (oder auch beides) gefordert sein. Deshalb unterscheiden wir Suchalgorithmen bezüglich Weg- oder Zielsuche:

• Beispiel für Zielsuche: Floyd-Warshall-Algorithmus

• Beispiel für Wegsuche: Navigation eines Roboters durch ein Labyrinth (via Dijkstra-Algorithmus)

466

Page 13: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Weg- und Zielsuche im Labyrinth

www.onlinekunst.de/malbuch/labyrinth.html

467

Page 14: Graphen (2) - Technische Universität Chemnitz · PDF fileDr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie Wiederholung 456 Traversierung eines Graphen via Tiefendurchlaufs

Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie

Ende der Vorlesung

468