• Keine Ergebnisse gefunden

Navigationsnetz in Spielen

N/A
N/A
Protected

Academic year: 2022

Aktie "Navigationsnetz in Spielen"

Copied!
72
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

C1. Graphen: Grundlagen und Exploration

Gabriele R¨oger

Universit¨at Basel

(2)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Inhalt dieser Veranstaltung

A&D

Sortieren Komplexit¨ats-

analyse Fundamentale Datenstrukturen

Suchen Graphen

Repr¨asentation Exploration Exploration:

Anwendungen Minimale Spannb¨aume

K¨urzeste Pfade Andere Graphenprobleme Strings

Weiterf¨uhrende Themen

(3)

Motivation

(4)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Strassenkarten

openstreetmap.org

(5)

Liniennetz

tnw.ch

(6)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Navigationsnetz in Spielen

heroengine.com

(7)

Versorgungssystem

dgis.info

(8)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Internet

Barrett Lyon / The Opte Project Visualization of the routing paths of the Internet.

(9)

Soziale Netzwerke

Visualizing Friendships“ von Paul Butler

(10)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Zusammenarbeit

linkedjazz.org

(11)

Protein-Interaktion

Network representation of the p53 protein interactions

Module detection in complex networks using integer optimisation, Xu G, Bennett L, Papageorgiou LG, Tsoka S - Algorithms Mol Biol (2010)

(12)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

M¨ ogliche Fragestellungen

Sind A und B verbunden?

Was ist der k¨urzeste Weg zwischen A und B?

Wie weit sind zwei Elemente h¨ochstens voneinander entfernt?

Wieviel Wasser kann die Kanalisation abf¨uhren?

(13)

Abstrakte Graphen

EinGraph besteht ausKnotenund Kanten zwischen Knoten.

Knoten Kanten

Strassen Kreuzung Strassenabschnitt Internet AS (≈Provider) Route

Facebook Person Freundschaft Proteine Protein Interaktion

(14)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Grundlegende Definition

(15)

Ungerichtete und gerichtete Graphen

A B

C D

E

F ungerichteter Graph

1 2

3 4

5

gerichteter Graph

(16)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Graphen

Ein Graph besteht aus zwei Mengen Vund E V: Menge derKnoten(engl. vertices) E: Menge derKanten(engl. edges) Jede Kante verbindet zwei Knoten u und v

ungerichteter Graph:Menge{u,v}

gerichteter Graph:Paar(u,v)

Bei Multigraphen kann es mehrere, parallele Kanten zwischen den gleichen Knoten geben.

Bei gewichteten Graphen hat jede Kante ein Gewicht (Zahl).

(17)

Graphen

Ein Graph besteht aus zwei Mengen Vund E V: Menge derKnoten(engl. vertices) E: Menge derKanten(engl. edges) Jede Kante verbindet zwei Knoten u und v

ungerichteter Graph:Menge{u,v}

gerichteter Graph:Paar(u,v)

Bei Multigraphenkann es mehrere, parallele Kanten zwischen den gleichen Knoten geben.

Bei gewichtetenGraphen hat jede Kante ein Gewicht (Zahl).

(18)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Ungerichtete Graphen: Terminologie

Nachbarn eines Knotensu: alle Knotenv mit{u,v} ∈E.

degree(v): Grad eines Knotens = Anzahl der Nachbarn.

Ausnahme: Schleife erh¨oht den Grad um 2.

Schleife = Kante, die einen Knoten mit sich selbst verbindet.

3 4

4 1

2

(19)

Ungerichtete Graphen: Terminologie

Nachbarn eines Knotensu: alle Knotenv mit{u,v} ∈E.

degree(v):Grad eines Knotens =Anzahl der Nachbarn.

Ausnahme:Schleifeerh¨oht den Grad um 2.

Schleife = Kante, die einen Knoten mit sich selbst verbindet.

3 4

4 1

2

(20)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Gerichtete Graphen: Terminologie

Nachfolger eines Knotensu: alle Knoten v mit (u,v)∈E. Vorg¨anger eines Knotensu: alle Knoten v mit (v,u)∈E. outdegree(v): Ausgangsgrad = Anzahl der Nachfolger indegree(v): Eingangsgrad = Anzahl der Vorg¨anger

(21)

Gerichtete Graphen: Terminologie

Nachfolger eines Knotensu: alle Knoten v mit (u,v)∈E. Vorg¨anger eines Knotensu: alle Knoten v mit (v,u)∈E. outdegree(v):Ausgangsgrad= Anzahl derNachfolger indegree(v):Eingangsgrad= Anzahl derVorg¨anger

(22)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Pfade und Zyklen

Pfad der L¨angen: Sequenz (v0, . . . ,vn) von Knoten mit {vi,vi+1} ∈E uri= 0, . . . ,n1 (ungerichteter Graph) (vi,vi+1)E uri = 0, . . . ,n1 (gerichteter Graph) Beispiel: (5,4,1,2)

Zyklus: Pfad mit gleichem Start- und Endknoten, der keine Kante mehrmals verwendet.

(6,7,9,8,6) im ungerichteten und

(5,2,1,3,5) im gerichteten Beispielgraphen existiert kein Zyklus, ist der Graph azyklisch

1 2

4 3

5 6 7

8 9

Pfad der L¨ange 3

Zyklus der L¨ange 4

1 2

3 4

5

Pfad der L¨ange 3

(23)

Pfade und Zyklen

Pfad der L¨angen: Sequenz (v0, . . . ,vn) von Knoten mit {vi,vi+1} ∈E uri= 0, . . . ,n1 (ungerichteter Graph) (vi,vi+1)E uri = 0, . . . ,n1 (gerichteter Graph) Beispiel: (5,4,1,2)

Zyklus: Pfad mit gleichem Start- und Endknoten, der keine Kante mehrmals verwendet.

(6,7,9,8,6) im ungerichteten und

(5,2,1,3,5) im gerichteten Beispielgraphen existiert kein Zyklus, ist der Graphazyklisch

1 2

4 3

5 6 7

8 9

Pfad der L¨ange 3

Zyklus der L¨ange 4

1 2

3 4

5

Pfad der L¨ange 3

(24)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Repr¨asentation

(25)

Inhalt dieser Veranstaltung

A&D

Sortieren Komplexit¨ats-

analyse Fundamentale Datenstrukturen

Suchen Graphen

Repr¨asentation Exploration Exploration:

Anwendungen Minimale Spannb¨aume

K¨urzeste Pfade Andere Graphenprobleme Strings

Weiterf¨uhrende Themen

(26)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Repr¨ asentation der Knoten

Wir verwenden Zahlen von 0 bis |V| −1 f¨ur die Knoten.

Falls in Anwendung nicht gegeben: Verwende Symboltabellen, um zwischen Namen und Zahlen zu konvertieren.

(27)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Graphenrepr¨ asentation mit Adjazenzmatrix

GraphG = ({0, . . . ,|V| −1},E) repr¨asentiert durch

|V| × |V|-Matrixmit Eintr¨agenaik (in Zeilei, Spalte k):

aik =





1 falls (i,k)∈E (gerichteter Graph) bzw.

{i,k} ∈E (ungerichteter Graph) 0 sonst

0 1

2 3

4

A=

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

Graphen symmetrisch

(28)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Graphenrepr¨ asentation mit Adjazenzmatrix

GraphG = ({0, . . . ,|V| −1},E) repr¨asentiert durch

|V| × |V|-Matrixmit Eintr¨agenaik (in Zeilei, Spalte k):

aik =





1 falls (i,k)∈E (gerichteter Graph) bzw.

{i,k} ∈E (ungerichteter Graph) 0 sonst

0 1

2 3

4

A=

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

Bei ungerichteten Graphen symmetrisch

(29)

Graphenrepr¨ asentation mit Adjazenzmatrix

GraphG = ({0, . . . ,|V| −1},E) repr¨asentiert durch

|V| × |V|-Matrixmit Eintr¨agenaik (in Zeilei, Spalte k):

aik =





1 falls (i,k)∈E (gerichteter Graph) bzw.

{i,k} ∈E (ungerichteter Graph) 0 sonst

0 1

2 3

4

A=

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

Bei ungerichteten Graphen symmetrisch

(30)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Graphenrepr¨ asentation mit Adjazenzliste

Speichere f¨ur jeden Knoten die Liste aller Nachfolger / Nachbarn

0 1

2 3

4

0 1 2 3 4

1 2

0 4

0 2 3

3 2

(31)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Repr¨ asentation: Komplexit¨ at

Adj.matrix Adj.liste Platzbedarf |V|2 |E|+|V|

Kante hinzuf¨ugen 1 1

Kante zwischen u und v? 1 (out)degree(v) Iterieren ¨uber ausgeh. Kanten |V| (out)degree(v)

Praxis:Welche Repr¨asentation?

(32)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Repr¨ asentation: Komplexit¨ at

Adj.matrix Adj.liste Platzbedarf |V|2 |E|+|V|

Kante hinzuf¨ugen 1 1

Kante zwischen u und v? 1 (out)degree(v) Iterieren ¨uber ausgeh. Kanten |V| (out)degree(v) Praxis: oft d¨unneGraphen (geringer durchschnittlicher Grad) Praxis:Welche Repr¨asentation?

(33)

Graphenexploration

(34)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Graphen: ¨ Ubersicht

Graphen

Repr¨asentation Exploration

Tiefensuche Breitensuche Induzierter Suchbaum Exploration:

Anwendungen Minimale Spannb¨aume

K¨urzeste Pfade Andere Graphenprobleme

(35)

Graphenexploration

Aufgabe: Gegeben einen Knotenv, besuche alle Knoten, die von v aus erreichbar sind.

Wird oft als Teil anderer Graphenalgorithmen ben¨otigt.

Tiefensuche: erst einmal m¨oglichst tief in den Graphen (weit weg von v)

Breitensuche: erst alle Nachbarn, dann Nachbarn der Nachbarn, . . .

(36)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Tiefensuche

Markiere erreichte Knoten Markiere v

Iteriere ¨uber die Nachfolger/Nachbarn w von v.

Fallsw nicht markiert, starte rekursiv vonw. Englisch:Depth-first search, DFS

(37)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Tiefensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Tiefensuche mit Startknoten 0 markiert Knoten in Reihenfolge

(38)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Tiefensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Tiefensuche mit Startknoten 0 markiert Knoten in Reihenfolge 0

- 1 - 2 - 4 - 5 - 3

(39)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Tiefensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Tiefensuche mit Startknoten 0 markiert Knoten in Reihenfolge 0 - 1

(40)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Tiefensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Tiefensuche mit Startknoten 0 markiert Knoten in Reihenfolge 0 - 1 - 2

- 4 - 5 - 3

(41)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Tiefensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Tiefensuche mit Startknoten 0 markiert Knoten in Reihenfolge 0 - 1 - 2 - 4

(42)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Tiefensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Tiefensuche mit Startknoten 0 markiert Knoten in Reihenfolge 0 - 1 - 2 - 4 - 5

- 3

(43)

Tiefensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Tiefensuche mit Startknoten 0 markiert Knoten in Reihenfolge 0 - 1 - 2 - 4 - 5 - 3

(44)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Tiefensuche: Algorithmus (rekursiv)

1 def depth_first_exploration(graph, node, visited=None):

2 if visited is None:

3 visited = set()

4 if node in visited:

5 return

6 visited.add(node)

7 for s in graph.successors(node):

8 depth_first_exploration(graph, s, visited)

Falls zu erwarten ist, dass ein Grossteil der Knoten besucht wird: bool-Array statt Menge f¨ur visited

(45)

Tiefensuche: Algorithmus (rekursiv)

1 def depth_first_exploration(graph, node, visited=None):

2 if visited is None:

3 visited = set()

4 if node in visited:

5 return

6 visited.add(node)

7 for s in graph.successors(node):

8 depth_first_exploration(graph, s, visited)

Falls zu erwarten ist, dass ein Grossteil der Knoten besucht wird:

bool-Array statt Menge f¨ur visited

(46)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Depth-First-Knotenreihenfolgen

Preorder: Knoten wird erfasst, bevor seine Kinder betrachtet werden.

Postorder:Knoten wird erfasst, wenn die (rekursive) Tiefensuche mit allen seinen Kindern fertig ist.

Umgekehrte Postorder:Wie Postorder, aber in umgekehrter Reihenfolge (sp¨atere Knoten vorne)

1 def depth_first_exploration(graph, node):

2 if node in visited:

3 return

4 preorder.append(node)

5 visited.add(node)

6 for s in graph.successors(node):

7 depth_first_exploration(graph, s, visited)

8 postorder.append(node)

9 reverse postorder.appendleft(node)

(Repr¨asentation der Knotenreihenfolgen als Deque)

(47)

Tiefensuche: Algorithmus (iterativ)

1 def depth_first_exploration(graph, node):

2 visited = set()

3 stack = deque()

4 stack.append(node)

5 while stack:

6 v = stack.pop() # LIFO

7 if v not in visited:

8 visited.add(v)

9 for s in graph.successors(v):

10 stack.append(s)

(48)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Tiefensuche in der Praxis

https://xkcd.com/761/

(49)

Breitensuche

Erst alle Nachbarn, dann Nachbarn der Nachbarn, . . . Markiere v

→ Abstand 0

Markiere alle unmarkierten Nachfolger/Nachbarn von v

→ Abstand 1

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-1-Knoten

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-2-Knoten

. . .

Bis Abstand-i-Knoten keine unmarkierten Nachfolger/Nachbarn haben

Englisch: Breadth-first search, BFS

(50)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche

Erst alle Nachbarn, dann Nachbarn der Nachbarn, . . . Markiere v

→ Abstand 0

Markiere alle unmarkierten Nachfolger/Nachbarn von v

→ Abstand 1

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-1-Knoten

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-2-Knoten

. . .

Bis Abstand-i-Knoten keine unmarkierten Nachfolger/Nachbarn haben

Englisch:Breadth-first search, BFS

(51)

Breitensuche

Erst alle Nachbarn, dann Nachbarn der Nachbarn, . . . Markiere v

→ Abstand 0

Markiere alle unmarkierten Nachfolger/Nachbarn von v

→ Abstand 1

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-1-Knoten

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-2-Knoten

. . .

Bis Abstand-i-Knoten keine unmarkierten Nachfolger/Nachbarn haben

Englisch:Breadth-first search, BFS

(52)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche

Erst alle Nachbarn, dann Nachbarn der Nachbarn, . . . Markiere v

→ Abstand 0

Markiere alle unmarkierten Nachfolger/Nachbarn von v

→ Abstand 1

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-1-Knoten

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-2-Knoten

. . .

Bis Abstand-i-Knoten keine unmarkierten Nachfolger/Nachbarn haben

Englisch:Breadth-first search, BFS

(53)

Breitensuche

Erst alle Nachbarn, dann Nachbarn der Nachbarn, . . . Markiere v

→ Abstand 0

Markiere alle unmarkierten Nachfolger/Nachbarn von v

→ Abstand 1

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-1-Knoten

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-2-Knoten

. . .

Bis Abstand-i-Knoten keine unmarkierten Nachfolger/Nachbarn haben

Englisch:Breadth-first search, BFS

(54)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche

Erst alle Nachbarn, dann Nachbarn der Nachbarn, . . . Markiere v

→ Abstand 0

Markiere alle unmarkierten Nachfolger/Nachbarn von v

→ Abstand 1

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-1-Knoten

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-2-Knoten

. . .

Bis Abstand-i-Knoten keine unmarkierten Nachfolger/Nachbarn haben

Englisch:Breadth-first search, BFS

(55)

Breitensuche

Erst alle Nachbarn, dann Nachbarn der Nachbarn, . . . Markiere v

→ Abstand 0

Markiere alle unmarkierten Nachfolger/Nachbarn von v

→ Abstand 1

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-1-Knoten

Markiere alle unmarkierten Nachfolger/Nachbarn von Abstand-2-Knoten

. . .

Bis Abstand-i-Knoten keine unmarkierten Nachfolger/Nachbarn haben

Englisch:Breadth-first search, BFS

(56)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Breitensuche mit Startknoten 0 markiert Knoten in

Reihenfolge

0 - 1 - 3 - 2 - 4 - 5

(57)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Breitensuche mit Startknoten 0 markiert Knoten in

Reihenfolge 0

(58)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Breitensuche mit Startknoten 0 markiert Knoten in

Reihenfolge 0 - 1

- 3 - 2 - 4 - 5

(59)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Breitensuche mit Startknoten 0 markiert Knoten in

Reihenfolge 0 - 1 - 3

(60)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Breitensuche mit Startknoten 0 markiert Knoten in

Reihenfolge 0 - 1 - 3 - 2

- 4 - 5

(61)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Breitensuche mit Startknoten 0 markiert Knoten in

Reihenfolge 0 - 1 - 3 - 2 - 4

(62)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche: Beispiel

Hier:Besuche Nachfolger mit aufsteigender Knotennummer

0 1

3

2 5 4

Breitensuche mit Startknoten 0 markiert Knoten in

Reihenfolge

0 - 1 - 3 - 2 - 4 - 5

(63)

Breitensuche: Algorithmus (konzeptionell)

Einziger Unterschied zu iterativem Tiefensuchalgorithmus:

First-in-first-out-Behandlung der Knoten (statt last-in-first-out)

1 def breadth_first_exploration(graph, node):

2 visited = set()

3 queue = deque()

4 queue.append(node)

5 while queue:

6 v = queue.popleft() # FIFO

7 if v not in visited:

8 visited.add(v)

9 for s in graph.successors(v):

10 queue.append(s)

(64)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Breitensuche: Algorithmus (etwas effizienter)

Nur erstes Antreffen eines Knotens wird weiterbetrachtet.

Wir k¨onnen den Knoten direkt markieren und ihn bei einem weiteren Antreffen sofort verwerfen.

1 def breadth_first_exploration(graph, node):

2 visited = set()

3 queue = deque()

4 visited.add(node)

5 queue.append(node)

6 while queue:

7 v = queue.popleft()

8 for s in graph.successors(v):

9 if s not in visited:

10 visited.add(s)

11 queue.append(s)

(65)

Laufzeit

Bei allen Algorithmenvarianten:

Jeder erreichbare Knoten wird markiert.

Man folgt jeder erreichbaren Kante einmal.

Laufzeit O(|V|+|E|)

kann man auf erreichbare Knoten und Kanten einschr¨anken

(66)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Induzierter Suchbaum

Derinduzierte Suchbaumeiner Graphenexploration enth¨alt zu jedem besuchten Knoten (ausser dem Startknoten) eine Kante von dessen Vorg¨anger in der Exploration.

0 1

3 2

5 4 Tiefensuche

0 1

3 2

5 4 Breitensuche

(induzierter Suchbaum6= bin¨arer Suchbaum)

(67)

Induzierter Suchbaum

Derinduzierte Suchbaumeiner Graphenexploration enth¨alt zu jedem besuchten Knoten (ausser dem Startknoten) eine Kante von dessen Vorg¨anger in der Exploration.

0 1

3 2

5 4 Tiefensuche

0 1

3 2

5 4 Breitensuche (induzierter Suchbaum6= bin¨arer Suchbaum)

(68)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Induzierter Suchbaum: Beispiel Breitensuche

Jeder Knoten hat h¨ochstens einen Vorg¨anger im Baum.

Repr¨asentiere induzierten Suchbaum durch Vorg¨angerrelation Besuchte Knoten sind genau die, f¨ur die Vorg¨anger gesetzt ist:

Verzichte auf visited.

1 def bfs_with_predecessors(graph, node):

2 predecessor = [None] * graph.no_nodes()

3 queue = deque()

4 # use self-loop for start node

5 predecessor[node] = node

6 queue.append(node)

7 while queue:

8 v = queue.popleft()

9 for s in graph.successors(v):

10 if predecessor[s] is None:

11 predecessor[s] = v

12 queue.append(s)

(69)

Induzierter Suchbaum: Beispiel Breitensuche

Jeder Knoten hat h¨ochstens einen Vorg¨anger im Baum.

Repr¨asentiere induzierten Suchbaum durch Vorg¨angerrelation Besuchte Knoten sind genau die, f¨ur die Vorg¨anger gesetzt ist:

Verzichte auf visited.

1 def bfs_with_predecessors(graph, node):

2 predecessor = [None] * graph.no_nodes()

3 queue = deque()

4 # use self-loop for start node

5 predecessor[node] = node

6 queue.append(node)

7 while queue:

8 v = queue.popleft()

9 for s in graph.successors(v):

10 if predecessor[s] is None:

11 predecessor[s] = v

12 queue.append(s)

(70)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Induzierter Suchbaum: Beispiel Breitensuche

Jeder Knoten hat h¨ochstens einen Vorg¨anger im Baum.

Repr¨asentiere induzierten Suchbaum durch Vorg¨angerrelation Besuchte Knoten sind genau die, f¨ur die Vorg¨anger gesetzt ist:

Verzichte auf visited.

1 def bfs_with_predecessors(graph, node):

2 predecessor = [None] * graph.no_nodes()

3 queue = deque()

4 # use self-loop for start node

5 predecessor[node] = node

6 queue.append(node)

7 while queue:

8 v = queue.popleft()

9 for s in graph.successors(v):

10 if predecessor[s] is None:

11 predecessor[s] = v

12 queue.append(s)

(71)

Zusammenfassung

(72)

Motivation Grundlegende Definition Repr¨asentation Graphenexploration Zusammenfassung

Graphen bestehen aus Knotenund Kanten Kanten k¨onnengerichtet oderungerichtetsein.

Graphenexploration besucht systematisch alle Knoten, die von einem bestimmten Knoten erreichbar sind.

Tiefensuchegeht zuerst in die

Tiefe“.

Breitensuchebesucht zuerst die Knoten, die n¨aher am Startknoten sind.

Referenzen

ÄHNLICHE DOKUMENTE

1.. die Summe von zwei linearen Abbildungen ist wieder linear und das skalare Vielfache einer linearen Abbildung ist wieder linear.. Beweis. 5) Isomorphe Vektorr¨ aume

Als Folgerung: Tangente senkrecht auf dem Berührradius; Grundlage für viele Konstruktionen der Geometrie wie Tangente an einen Kreis von einem Punkt außerhalb des Kreises,

Eine Figur soll achsensymmetrisch (drehsymmetrisch) heißen, wenn sie mindestens eine Symmetrieachse (eine nicht triviale Deckdrehung)

Wie viel ist das jeweils, schreibe die Zahl dazu.. Kannst du die Aufgabe schon

b) Gegeben ein ungerichteter Graph G = (V, E) mit n Knoten (n geradzahlig), ent- scheide, ob es eine Clique der Gr¨ oße n/2 gibt. Hinweis: Verwenden Sie f¨ ur den Beweis der NP-H¨

b) Es gibt eine erkennbare Sprache, f¨ur die es keinen ¨aquivalenten NEA mit genau einem Endzustand gibt. Wenden Sie auf folgenden NEA die Potenzmengenkonstruktion an und berechnen

• < ist linear, d.h. zwischen zwei beliebigen Elemente existiert immer noch ein weiteres.. a) Welche der S¨ atze sind erf¨ ullt in den Strukturen R < bzw.. Welche der S¨

[r]