• Keine Ergebnisse gefunden

Graphen und Graphenalgorithmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Graphen und Graphenalgorithmen"

Copied!
10
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

.

Graphen und Graphenalgorithmen

Steffen Reith

Steffen.Reith@hs-rm.de

Hochschule RheinMain

28. Juni 2012

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 1 / 20

Graphen

.Definition ..

...

Ein gerichteter Graph G = (V,E) ist ein Paar, das aus einer Menge von Knoten V und einer Menge E V ×V von Kanten

(Kantenrelation) besteht.

Eine Kante k = (u,v) E kann als Verbindung zwischen den Knoten u,v V aufgefasst werden. Aus diesem Grund nennt man u auch Startknoten und v Endknoten.

Zwei Knoten, die durch eine Kante verbunden sind, heißen auch benachbart oder adjazent.

Ist die Kantenrelation E symmetrisch, dann heißt der Graph ungerichtet.

Ein Graph (V,E) heißt endlich genau dann, wenn die Menge der Knoten V endlich ist.

Wir besch ¨aftigen uns hier nur mit endlichen Graphen

(2)

.

Darstellung von Graphen

Eine Kante (u,v) kann als Verbindung zwischen den Knoten u und v interpretieren werden.

stelle Graphen durch Diagramme dar

1

2

3 4

5

(a) Ein gerichteter Graph mit 5 Knoten

1

2

3 4

5

(b) Ein planarer gerichteter Graph mit 5 Knoten

0 1 2 3

4 5 6 7 8

(c) Ein gerichteter bipartiter Graph

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 3 / 20

Datenstrukturen f ¨ur Graphen

Man kann Graphen in dynamischen Datenstrukturen speichern.

Die Eintr ¨age einer Liste repr ¨asentieren alle Knoten eines Graphen.

Jeder Eintrag enth ¨alt wieder eine Liste, die alle Knoten enth ¨alt die adjazent sind. Adjazenzlistendarstellung

Relativ ineffizienter Zugriff auf Kanten, aber speichereffizient bei Graphen mit wenigen Kanten.Es geht schneller:

.Definition ..

...

Sei G = ({v1, . . . ,vn},E) ein gerichteter Graph und AG eine n ×n Matrix AG = (ai,j)1i,j,n mit

ai,j =

{ 1, falls (vi,vj) E 0, sonst

Diese Matrix heißt Adjazenzmatrix.

(3)

.

Datenstrukturen f ¨ur Graphen (II)

.Beispiel ..

...

F ¨ur den gerichteten Graphen (g) der vorletzten Folie ergibt sich die Adjazenzmatrix:

AG5 =





0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0





Ungerichtete Graphen haben Adjazenzmatrizen, die symmetrisch zur Diagonale von links oben nach rechts unten sind.

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 5 / 20

Erreichbarkeit in Graphen

Folgender Algorithmus berechnet ob v von u erreicht werden kann.

Data : Ein Graph G = (V,E) und zwei Knoten u,v V

Result : true wenn es einen Weg von u nach v gibt, false sonst markiert = true;

markiere Startknoten u V; while (markiert) do

markiert = false;

for (alle markierten Knoten w V ) do

if (w V ist adjazent zu einem unmarkierten Knoten w V ) then

markiere Knoten w; markiert = true;

end end end

(4)

.

Erreichbarkeit in Graphen und Zusammenhang

if (v ist markiert) then return true;

else

return false;

end

.Definition ..

...

Sei G = (V,E) ein Graph, dann heißt die Menge

EG(u) = {v V | man kann v von u erreichen} Zusammenhangskomponente von u.

.Bemerkung ..

...

Die bin ¨are Relation ≈⊆ V × V mit u v genau dann, wenn u und v sind in der gleichen Zusammenhangskomponente ist eine

Aquivalenzrelation.¨

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 7 / 20

Traversierung von Graphen

Ahnlich wie bei B ¨aumen brauchen wir M ¨oglichkeiten alle Knoten eines¨ Graphens systematisch zu besuchen.

Breitensuche (engl. breath-first-search):

Durchlaufe alle Knoten in Abh ¨angigkeit der Distanz zu einem ausgezeichneten Startknoten.

Beginne am Startknoten

Besuche alle Knoten die mit einer Kante direkt mit dem Startknoten verbunden sind (Distanz 1).

Besuche alle Knoten die mit Knoten verbunden Sie die Distanz 1 zum Startknoten haben.

. . .

Tiefensuche (engl. depth-first-search): Untersucht einen gew ¨ahlten Pfad immer erst so tief wie m ¨oglich.

(5)

.

Markierungen f ¨ur Breiten- und Tiefensuche

Im folgenden verwenden wir die Farben

”weiß“ f ¨ur

”unbesucht“,

”grau“ f ¨ur

”besucht und Entfernung bestimmt“

”schwarz“ f ¨ur

”vollst ¨andig bearbeitet“.

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 9 / 20

Breitensuche in G = (V , E ) mit Startknoten s

for (alle v V \ {s}) do

/* Knoten v unbearbeitet */

farbe[v] = weiss;

/* Abstand undefiniert */

d[v] = ;

/* v hat kein Vorg¨anger */

π[v] = null;

end

/* Informationen f¨ur den Startknoten eintragen */

farbe[s] = grau;

d[s] = 0;

π[s] = null;

erzeuge Warteschlange Q;

/* Startknoten in die Warteschlange eintragen */

Q.append(s);

(6)

.

Breitensuche in G = (V , E ) mit Startknoten s (Teil II)

while (!isEmpty(Q)) do u = Q.get();

/* Alle direkten Nachfolger von u bearbeiten */

for (alle Knoten v mit (u,v) E) do

/* Knoten v schon besucht? */

if (farbe[v] = weiss) then

/* Informationen f¨ur v eintragen */

farbe[v] = grau;

d[v] = d[u] +1;

π[v] = u;

/* v noch sp¨ater bearbeitet */

Q.append(v);

end end

farbe[u] = schwarz;

end

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 11 / 20

Breitensuche - Ein Beispiel

r

s

t

❙t ❛rt✭◗ ✉❡ ✉❡◗❀s✮

r

s

t

✁ ✳❉ ✉r❝❤❧❛✉❢✭◗ ✉❡✉❡◗ ❀✇✱ r✮

r

s

t

✂✳❉ ✉r❝❤ ❧❛✉❢✭◗ ✉❡ ✉❡◗❀r✱t ✱ ①✮

r

s

t

✸ ✳❉ ✉r❝❤❧❛✉❢✭◗ ✉❡✉❡◗ ❀t✱① ✱✈✮

r

s

t

✹✳❉ ✉r❝❤ ❧❛✉❢✭◗ ✉❡ ✉❡◗❀①✱✈✱✉✮

r

s

t

✺✳❉ ✉r❝❤ ❧❛✉❢✭◗ ✉❡ ✉❡◗❀✈✱ ✉✱ ②✮

r

s

t

r

s

t

r

s

t

(7)

.

Tiefensuche in G = (V , E )

for (alle v V) do

/* Knoten v unbearbeitet */

farbe[v] = weiss;

/* v hat kein Vorg¨anger */

π[v] = null;

end

/* Die Variable zeit ist global */

zeit = 0;

/* Alle Knoten ansehen */

for (alle u V) do

/* Knoten u unbearbeitet? */

if (farbe[u] == weiss) then

/* Siehe Algorithmus II */

DFS-Visit(G,u);

end end

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 13 / 20

Tiefensuche - DFS-Visit(G,u)

/* u besucht, Zeit erh¨ohen und Startzeit merken */

farbe[u] = grau;

zeit++;

d[u] = zeit;

/* Alle direkten Nachfolger von u bearbeiten */

for (alle Knoten v mit (u,v) E) do if (farbe[u] == weiss) then

/* Vorg¨anger merken */

π[v] = u;

DFS Visit(G,v);

end end

/* u vollst¨andig bearbeitet, Endzeit merken */

farbe[u] = schwarz;

zeit++;

f[u] = zeit;

(8)

.

Tiefensuche - Ein Beispiel

❙t ❛r t

✶✴✲

❉✉r❝❤❧❛ ✉❢

✶✴✲

✷✴✲

✁✳❉✉r❝❤❧❛ ✉❢

✶✴✲

✸ ✴✲

✷✴✲

✂ ✳❉✉r❝❤❧❛✉❢

✹✴✲

✶✴✲

✸ ✴✲

✷✴✲

✄ ✳❉✉r❝❤❧❛ ✉❢

✹✴✲

✶✴✲

✸ ✴✲

✷✴✲

✺ ✳❉✉r❝❤❧❛ ✉❢

✹✴☎

✶✴✲

✸ ✴✲

✷✴✲

✻✳❉✉r❝❤❧❛ ✉❢

✹✴☎

✶✴✲

✸ ✴✆

✷✴✲

✼✳❉✉r❝❤❧❛✉❢

✹✴☎

✶✴✲

✸ ✴✆

✷✴✝

✽ ✳❉✉r❝❤❧❛ ✉❢

✹✴☎

✶✴✲

✸ ✴✆

✷✴✝

✾ ✳❉✉r❝❤❧❛ ✉❢

✹✴☎

✶✴✞

✸ ✴✆

✷✴✝

✵✳ ❉✉r❝❤❧❛ ✉❢

✹✴☎

✶✴✞

✸ ✴✆

✷✴✝

✟✴✲

❉✉r❝❤❧❛ ✉❢

✹✴☎

✶✴✞

✸ ✴✆

✷✴✝

✟✴✲

✁✳❉✉r❝❤❧❛✉❢

✹✴☎

✶✴✞

✸ ✴✆

✷✴✝

✶✠✴✲

✟✴✲

✂✳❉✉r❝❤❧❛ ✉❢

✹✴☎

✶✴✞

✸ ✴✆

✷✴✝

✶✠✴✲

✟✴✲

✄ ✳❉✉r❝❤❧❛ ✉❢

✹✴☎

✶✴✞

✸ ✴✆

✷✴✝

✶✠✴✶✶

✟✴✲

✺✳❉✉r❝❤❧❛ ✉❢

✹✴☎

✶✴✞

✸ ✴✆

✷✴✝

✶✠✴✶✶

✟✴✶✷

✻✳❉✉r❝❤❧❛✉❢

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 15 / 20

Eine Anwendung: Routenplaner

Oft muss ein optimaler Weg zwischen einem Start- und einem Endknoten in einem gegebenen Graphen gefunden werden.

Beispiel: Routenplaner

Gegeben sei eine erweiterte Adjazenzmatrix, die Entfernung zwischen zwei Knoten angibt, d.h. die Kanten des Graphen sind mit einer

positiven Zahl markiert.

.Bemerkung ..

...

Die Kantenmarkierung m ¨ussen nicht zwangsweise Entfernungen sein. Auch Mautgeb ¨uhren oder Fahrzeiten sind denkbar.

Die Kantenmarkierungen m ¨ussen f ¨ur unsere Anwendung positive Zahlen sein.

Eine optimale Route wird mit Dijkstras Algorithmus gefunden.

(9)

.

Einige Bemerkungen

In Dijkstras Algorithmus wird eine so genannte Priorit ¨atswarteschlange verwendet:

speichere alle eingef ¨ugten Elemente immer sortiert

erm ¨ogliche das Herauslesen des jeweils kleinsten Elements .Bemerkung

..

...

Der Algorithmus ben ¨otigt positive Kantengewichte. Ist das nicht gegeben (z.B. Erstattung von Mautgeb ¨uhren), dann verwendet man den Bellman-Ford Algorithmus.

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 17 / 20

Dijkstras Algorithmus

Data : Graph G = (V,E) mit Kantengewichten γ((u,v)) f ¨ur eine Kante (u,v) und Startknoten s

Result : Feld D[], das f ¨ur jeden Knoten die (geringsten) Entfernung zum Startknoten enth ¨alt

/* Alle Knoten außer dem Startknoten abarbeiten */

for (alle Knoten u V \ {s}) do

/* Distanz von u maximal setzen */

D[u] = ; end

/* Abstand des Startknoten zum Startknoten ist 0 */

D[s] = 0;

PriorityQueue Q;

/* Alle Paare von Knoten und Abstand in Q */

for (alle Knoten u V) do Q.offer((D,D[u]));

end

(10)

.

Dijkstras Algorithmus (II)

while (!Q.isEmpty()) do

/* Hole Knoten u mit kleinster Distanz d */

(u,d) = Q.poll();

/* bearbeite direkte Nachbarn */

for (f ¨ur alle v V mit (u,v) E und f ¨ur die v Q gilt) do

/* K¨urzeren Weg nach v gefunden? */

if (D[u] + γ((u,v)) < D[v]) then

/* neue Distanz merken */

D[v] = D[u] + γ((u,v));

passe die neue Distanz des Knotens v in Q an;

end end end

/* Ergebnisarray zur¨uckgeben */

return D;

Steffen Reith Graphen und Graphenalgorithmen 28. Juni 2012 19 / 20

Edsger Wybe Dijkstra

11. May 1930, Rotterdam, Holland - 6. August 2002, Nuenen, Holland

Quelle: Wikimedia Commons

Testing shows the presence, not the absence of bugs.

Ende der Vorlesung

Referenzen

ÄHNLICHE DOKUMENTE

  Felder mit einem Namen zzz, die den Access-Type exposedField haben, haben implizit den Namen zzz_changed, wenn sie als Ausgabe-Feld verwendet werden, und den Namen set_zzz,

Hierbei ist eine Karte ein planarer Graph, wobei jedes Land ein Knoten ist, und zwei L¨ ander genau dann verbunden sind, wenn sie benachbart sind.. (a) Formalisieren Sie, dass ein

Wenn wir annehmen, dass χ(K n ) &lt; n ist, dann m¨ ussen zwei Knoten dieselbe Farbe haben.. Dies ist aber nicht zul¨ assig, da alle Knoten miteinander

Konstruieren Sie daraus einen planaren Graphen mit 69 Knoten, der nicht 4-listenf¨arbbar ist (auf der rechten Seite finden Sie einen kleinen Hinweis, wie Sie einen solchen Graphen

Die Autoren sind die Knoten des Graphen und zwischen zwei Knoten besteht eine Kante, wenn zwei Autoren miteinander publiziert haben.. Der Graph kann also aus einer

Entwerfen Sie einen Algorithmus, der entscheiden kann, ob ein gegebener gerichteter Graph G = ( V, E ) einen Zyklus beinhaltet oder nicht. a) Schreiben Sie Ihren Algorithmus

(a) Die Klasse aller ungerichteten Graphen mit einer gültigen Drei-Färbung, d.h.: Jeder Knoten hat genau eine der Farben R, G, B, und wenn zwei Knoten durch eine Kante verbunden

(a) die Klasse aller gerichteten vollständigen Graphen mit mindestens  Knoten (ein gericheteter Graph ist vollständig, wenn es von jedem Knoten eine Kante zu jedem Knoten