vorlesungstermin 4: graphenalgorithmen ii · 2018. 10. 18. · behauptung: falls zu beginn keine...

49

Upload: others

Post on 28-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Vorlesungstermin 4:

Graphenalgorithmen IIMarkus Püschel

David Steurer

talks2.dsteurer.org/graphenalgorithmen2.pdf

Algorithmen und Datenstrukturen, Herbstsemester 2018, ETH Zürich

Page 2: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Plan für heuteallgemeines Thema: Graphen durchlaufen

Page 3: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Plan für heuteallgemeines Thema: Graphen durchlaufen

zwei Ansätze: Tiefensuche und Breitensuche

Page 4: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Plan für heuteallgemeines Thema: Graphen durchlaufen

zwei Ansätze: Tiefensuche und Breitensuche

wichtige Bausteine um Graphenprobleme zu lösen

Page 5: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Plan für heuteallgemeines Thema: Graphen durchlaufen

zwei Ansätze: Tiefensuche und Breitensuche

wichtige Bausteine um Graphenprobleme zu lösen

Beispiele: (heute)

topologische Sortierung (Tiefensuche)kürzeste Wege (Breitensuche)

Page 6: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Übersicht: Vorlesung bis heute

Page 7: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Irrgärten erkunden

mögliche�Strategie:

markiere besuchte Stellen mit Kreideverwende Wollknäuel, um zu Verzweigungen zurück-zufinden, die noch nicht vollständig erkundet sind

als�Graphproblem: gegeben ein Graph (z.B. als Adjazenzliste)und ein Startknoten , welche Knoten sind von erreichbar?v v

Page 8: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Irrgärten erkundenmögliche�Strategie:

markiere besuchte Stellen mit Kreideverwende Wollknäuel, um zu Verzweigungen zurück-zufinden, die noch nicht vollständig erkundet sind

als�Graphproblem: gegeben ein Graph (z.B. als Adjazenzliste)und ein Startknoten , welche Knoten sind von erreichbar?

statt Kreide und Wollknäuel verwenden wir Datenstrukturen

v v

Page 9: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Irrgärten erkundenmögliche�Strategie:

markiere besuchte Stellen mit Kreideverwende Wollknäuel, um zu Verzweigungen zurück-zufinden, die noch nicht vollständig erkundet sind

statt�Kreide: Tabelle (en: array)

der Länge (Anzahl Knoten)

Operationen: (1) einen Knotenmarkieren, (2) testen ob einKnoten markiert istLaufzeiten: jeweils

statt�Wollknäuel: Stapel (en: stack)

Operationen: (1) einen Knoten oben aufStapel legen, (2) auf obersten Knotenzugreifen, (3) obersten Knoten entfernenLaufzeiten: jeweils

n

O(1)

O(1)

Page 10: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

Page 11: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 0

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 12: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 1

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 13: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 2

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 14: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 3

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 15: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 4

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 16: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 5

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 17: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 6

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 18: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 7

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 19: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 8

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 20: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 9

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 21: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 10

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 22: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 11

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 23: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 12

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 24: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 13

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 25: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 14

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 26: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 15

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 27: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

Iteration: 16

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 28: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Tiefensuche: Beispiel

Startknoten:

besuchte Knoten:

A B C D E F G H

Stapel:

A

Page 29: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Graph und Knoten

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

wir verwenden “pseudocode” für kürzere Beschreibung

G = (V ,E) v ∈ V

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

Page 30: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Behauptung: falls zu Beginn keine Knoten als besuchtmarkiert sind, dann besucht genau dieKnoten, die von erreichbar sind

Beweisidee: da wir mit beginnen und dann nur Kantenentlang gehen, ist jeder besuchte Knoten von erreichbar

es bleibt zu zeigen, dass jeder erreichbare besucht wird

Tiefensuche(G, v)v

v

v

u ∈ V

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

Page 31: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Behauptung: falls zu Beginn keine Knoten als besuchtmarkiert sind, dann besucht genau dieKnoten, die von erreichbar sind

Beweisidee:

es bleibt zu zeigen, dass jeder erreichbare besucht wird

betrachte Weg von nach

wird in der ersten Iteration besucht

falls besucht wird, werden auch alle Nachfolger von besucht,insbesondere (wenn )

per Induktion (über ): alle Knoten werden besucht

Tiefensuche(G, v)v

u ∈ V

w ,… ,w0 ℓ w = v0 w = uℓ

w = v0

wi wi

wi+1 0 ⩽ i < ℓ

i w ,… ,w0 ℓ

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

Page 32: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Korollar: falls schon eine Knotenmenge als besuchtmarkiert ist, dann besucht genau dieKnoten, die noch von erreichbar sind mittels Wegen, die vermeidenAnwendung: Zusammenhangskomponenten ( ungerichtet)

führe Tiefensuche solange für noch unbesuchte Knoten ausbis alle Knoten besucht sind

jede Tiefensuche besucht dabei genau eine Z.-komponente

X ⊆ V

Tiefensuche(G, v)v X

G

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

Page 33: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Anwendung: Zusammenhangskomponenten ( ungerichtet)

führe Tiefensuche solange für noch unbesuchte Knoten ausbis alle Knoten besucht sind

jede Tiefensuche besucht dabei genau eine Z.-komponente

:

markiere alle Knoten als nicht besucht�. for do

if noch nicht besucht then�. �.

G

Tiefensuche(G)

v ∈ V

v ∈ V

v Tiefensuche(G, v)

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

Page 34: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Laufzeit

wobei: Anzahl von Operationen

es gilt und

daher:

sei besuchte Knoten während

dann gilt und Laufzeit für

N )markier

N =bla bla

N = 1 + Npop push N = N + Ntop pop markier

N + N + N + N ⩽ O(N + N )push pop top markier markier push

W = Tiefensuche(G, v)

N = ∣W ∣markier N ⩽ deg (w)push ∑w∈W G+

⇝ ⩽ O(∣W ∣ + deg (w))∑w∈W G+ Tiefensuche(G, v)

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

⩽ O(N + N + N +push pop top

(wenn Graph als Adjazenzliste gegeben ist)

Page 35: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Laufzeit für

Theorem: hat Laufzeit

jeder Knoten wird nur einmal besucht;

Tiefensuche(G, v)

Tiefensuche(G) ⩽ O(∣V ∣ + ∣E∣)

deg (w) = ∣E∣∑w∈V G+

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

⇝ ⩽ O(∣W ∣ + deg (w))∑w∈W G+

Page 36: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

tieferes�Verständnis: zu jedem Knoten können wir einIntervall zuordnen

Intervall wobei Iteration, inder als besucht markiert wird und Iteration, in der

zum ersten Mal vom Stapel entfernt wird

Lemma: und sind disjunkt oder ein Intervalist im anderen komplett enthalten

v ∈ V

I ⊆ {1,… , 2n}v

I = {pre ,… , post }v v v pre =v

v post =v

v

∀u, v ∈ V . Iu Iv

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

Page 37: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Intervall wobei Iteration, inder als besucht markiert wird und Iteration, in der

zum ersten Mal vom Stapel entfernt wird

Lemma: und sind disjunkt oder ein Intervalist im anderen komplett enthalten

Beweisidee: falls , befindet sich über im Stapel wenn besucht wird, so dass

Typ einer Kante : vorwärts falls , rückwärtsfalls , quer falls

pre =v

v post =v

v

∀u, v ∈ V . Iu Iv

pre < pre < postu v u v u

v post < postv u

(u, v) ∈ E I ⊇ Iu v

I ⊆ Iu v I ∩ I = ∅u v

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

I = {pre ,… , post }v v v

Page 38: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Intervall wobei Iteration, inder als besucht markiert wird und Iteration, in der

zum ersten Mal vom Stapel entfernt wird

Lemma: und sind disjunkt oder ein Intervalist im anderen komplett enthalten

Typ einer Kante : vorwärts falls , rückwärtsfalls , quer falls

Lemma: für jede Querkante liegt vor

diese Intervalle bilden einen Wald, genannt Tiefensuchwald

pre =v

v post =v

v

∀u, v ∈ V . Iu Iv

(u, v) ∈ E I ⊇ Iu v

I ⊆ Iu v I ∩ I = ∅u v

(u, v) ∈ E Iv Iu

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

I = {pre ,… , post }v v v

Page 39: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

topologische Sortierung durch Tiefensuche

Beobachtung: für einen azyklischen Graph kann es keineRückwärtskante bei der Tiefensuche geben

Theorem: wir erhalten eine topologische Sortierung, wennwir die Knoten nach den Zahlen absteigend sortierenpostv

:

Stapel mit Knoten �. while nicht leer do

�. if schon besucht then�. if noch nicht besucht then markiere als besuchtund

�.

�.

Tiefensuche(G, v) (en. depth-first search)

S ← v

S

w ← top(S)w pop(S)w w

push(S, {u ∈ N (w) ∣ u noch nicht besucht})G+

Page 40: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Kürzeste Wege

oft: nicht nur irgendeinen Weg von nach

sondern: einen kürzesten Weg

Anwendung: Routenplanung und mehr

Länge eines Wegs = Anzahl der Kanten

Distanz = Länge des kürzesten Wegs von nach

später: Kanten können unterschiedliche Längen haben

u v

(z.B. Google Maps)

d(u, v) u v

Page 41: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Kürzeste Wege

Länge eines Wegs = Anzahl der Kanten

Distanz = Länge des kürzesten Wegs von nach

später: Kanten können unterschiedliche Längen haben

Beobachtungen: Falls ,dann gilt

Tiefensuche findet Pfad aber nichtunbedingt den kürzesten

es kann exponentiell viele Pfade von nach geben

d(u, v) u v

d(u, v) < ∞d(u, v) ⩽ n − 1

u v

Page 42: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Datenstrukturen für Graphtraversierungum kürzeste Wege zu finden müssen wir nur den Stapel beider Tiefensuche mit einer anderen Datenstruktur ersetzen

Stapel: “LIFO = last in, first out”push: Objekt oben auf den Stapel legenpop: oberstes Element vom Stapel entfernen

Schlange: “FIFO = first in, first out”enqueue: Objekt am Ende der Schlange hinzufügendequeue: Element am Anfang der Schlange entfernen

(en. stack)

(en. queue)

Page 43: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

�. Schlange mit Knoten �.

while nicht leer do�. for do

if nicht markiert thenmarkiere und

�.

�.

Breitensuche(G, s) : (en. breadth-first search)

Q ← s

Q

u ← dequeue(Q)(u, v) ∈ E

v

v enqueue(Q, v)

Page 44: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

�. Schlange mit Knoten �.

while nicht leer do�. for do

if nicht markiert thenmarkiere und

�.

�.

Breitensuche(G, s) : (en. breadth-first search)

Q ← s

Q

u ← dequeue(Q)(u, v) ∈ E

v

v enqueue(Q, v)

Page 45: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

für alle und �. Schlange mit Knoten �.

while nicht leer do�. for do

if then

und

�.

�.

Breitensuche(G, s) : (en. breadth-first search)

dist[u] ← ∞ u ∈ V ∖ {s} dist[s] ← 0Q ← s

Q

u ← dequeue(Q)(u, v) ∈ E

dist[v] = ∞dist[v] ← dist[u] + 1 enqueue(Q, v)

Page 46: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Behauptung: Für alle , gibt es einen Moment, sodass die folgenden Aussagen gelten

für alle Knoten mit gilt �. für alle anderen Knoten gilt �. die Schlange enthält genau die Knoten mit �.

t ∈ N ∪ {0}

v ∈ V d(s, v) ⩽ t dist[v] = d(s, v)v ∈ V dist[v] = ∞

d(s, v) = t

für alle und �. Schlange mit Knoten �.

while nicht leer do�. for do

if then

und

�.

�.

Breitensuche(G, s) : (en. breadth-first search)

dist[u] ← ∞ u ∈ V ∖ {s} dist[s] ← 0Q ← s

Q

u ← dequeue(Q)(u, v) ∈ E

dist[v] = ∞dist[v] ← dist[u] + 1 enqueue(Q, v)

Page 47: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Behauptung: Für alle , gibt es einen Moment, sodass die folgenden Aussagen gelten

für alle Knoten mit gilt �. für alle anderen Knoten gilt �. die Schlange enthält genau die Knoten mit �.

Beweis: per Induktion über

t ∈ N ∪ {0}

v ∈ V d(s, v) ⩽ t dist[v] = d(s, v)v ∈ V dist[v] = ∞

d(s, v) = t

t

für alle und �. Schlange mit Knoten �.

while nicht leer do�. for do

if then

und

�.

�.

Breitensuche(G, s) : (en. breadth-first search)

dist[u] ← ∞ u ∈ V ∖ {s} dist[s] ← 0Q ← s

Q

u ← dequeue(Q)(u, v) ∈ E

dist[v] = ∞dist[v] ← dist[u] + 1 enqueue(Q, v)

Page 48: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar

Ende

Page 49: Vorlesungstermin 4: Graphenalgorithmen II · 2018. 10. 18. · Behauptung: falls zu Beginn keine Knoten als besucht markiert sind, dann besucht genau die Knoten, die von erreichbar