CS 332: Algorithms Graph Algorithms David Luebke 11/6/2015 Review: Depth-First Search ● Depth-first search is another strategy for exploring a graph ■ Explore “deeper” in the.
Download ReportTranscript CS 332: Algorithms Graph Algorithms David Luebke 11/6/2015 Review: Depth-First Search ● Depth-first search is another strategy for exploring a graph ■ Explore “deeper” in the.
David Luebke
CS 332: Algorithms
Graph Algorithms
1 4/23/2020
Review: Depth-First Search
●
Depth-first search
is another strategy for exploring a graph ■ Explore “deeper” in the graph whenever possible ■ Edges are explored out of the most recently discovered vertex
v
that still has unexplored edges ■ When all of
v
’s edges have been explored, backtrack to the vertex from which
v
was discovered
David Luebke 2 4/23/2020
Review: DFS Code
DFS(G) { for each vertex u
{ u->color = WHITE; G->V } time = 0; for each vertex u
{ G->V if (u->color == WHITE) DFS_Visit(u); } } DFS_Visit(u) { u->color = YELLOW; time = time+1; u->d = time; for each v
{ u->Adj[] if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; time = time+1; u->f = time; } David Luebke 3 4/23/2020
source vertex
DFS Example
David Luebke 4 4/23/2020
source vertex d f
1 | | |
DFS Example
| | | | | David Luebke 5 4/23/2020
source vertex d f
1 | 2 | |
DFS Example
| | | | | David Luebke 6 4/23/2020
source vertex d f
1 | 2 | 3 |
DFS Example
| | | | | David Luebke 7 4/23/2020
source vertex d f
1 | 2 | 3 | 4
DFS Example
| | | | | David Luebke 8 4/23/2020
source vertex d f
1 | 2 | 3 | 4
DFS Example
| 5 | | | | David Luebke 9 4/23/2020
source vertex d f
1 | 2 | 3 | 4
DFS Example
| 5 | 6 | | | David Luebke 10 4/23/2020
source vertex d f
1 | 2 | 7 3 | 4
DFS Example
8 | 5 | 6 | | | David Luebke 11 4/23/2020
source vertex d f
1 | 2 | 7 3 | 4
DFS Example
8 | 5 | 6 | | | David Luebke 12 4/23/2020
DFS Example
source vertex d f
1 | 2 | 7 8 | | 9 | David Luebke 3 | 4 5 | 6 |
What is the structure of the yellow vertices? What do they represent?
13 4/23/2020
source vertex d f
1 | 2 | 7 3 | 4
DFS Example
8 | 5 | 6 9 |10 | | David Luebke 14 4/23/2020
source vertex d f
1 | 2 | 7 3 | 4
DFS Example
8 |11 5 | 6 9 |10 | | David Luebke 15 4/23/2020
source vertex d f
1 |12 2 | 7 3 | 4
DFS Example
8 |11 5 | 6 9 |10 | | David Luebke 16 4/23/2020
source vertex d f
1 |12 2 | 7 3 | 4
DFS Example
8 |11 5 | 6 9 |10 13| | David Luebke 17 4/23/2020
source vertex d f
1 |12 2 | 7 3 | 4
DFS Example
8 |11 5 | 6 9 |10 13| 14| David Luebke 18 4/23/2020
source vertex d f
1 |12 2 | 7 3 | 4
DFS Example
8 |11 5 | 6 9 |10 13| 14|15 David Luebke 19 4/23/2020
source vertex d f
1 |12 2 | 7 3 | 4
DFS Example
8 |11 5 | 6 9 |10 13|16 14|15 David Luebke 20 4/23/2020
DFS: Kinds of edges
● DFS introduces an important distinction among edges in the original graph: ■
Tree edge
: encounter new (white) vertex ○ The tree edges form a spanning forest ○
Can tree edges form cycles? Why or why not?
David Luebke 21 4/23/2020
source vertex d f
1 |12 2 | 7
Tree edges
David Luebke 3 | 4
DFS Example
8 |11 5 | 6 22 9 |10 13|16 14|15 4/23/2020
DFS: Kinds of edges
● DFS introduces an important distinction among edges in the original graph: ■
Tree edge
: encounter new (white) vertex ■
Back edge
: from descendent to ancestor ○ Encounter a yellow vertex (yellow to yellow)
David Luebke 23 4/23/2020
DFS Example
source vertex d f
1 |12 2 | 7 3 | 4
Tree edges Back edges
David Luebke 8 |11 5 | 6 24 9 |10 13|16 14|15 4/23/2020
DFS: Kinds of edges
● DFS introduces an important distinction among edges in the original graph: ■
Tree edge
: encounter new (white) vertex ■
Back edge
: from descendent to ancestor ■
Forward edge
: from ancestor to descendent ○ Not a tree edge, though ○ From yellow node to black node
David Luebke 25 4/23/2020
DFS Example
source vertex d f
1 |12 2 | 7 8 |11 3 | 4 5 | 6
Tree edges Back edges Forward edges
David Luebke 26 9 |10 13|16 14|15 4/23/2020
DFS: Kinds of edges
● DFS introduces an important distinction among edges in the original graph: ■
Tree edge
: encounter new (white) vertex ■
Back edge
: from descendent to ancestor ■
Forward edge
: from ancestor to descendent ■
Cross edge
: between a tree or subtrees ○ From a yellow node to a black node
David Luebke 27 4/23/2020
DFS Example
source vertex d f
1 |12 2 | 7 8 |11 13|16 9 |10 3 | 4 5 | 6 14|15
Tree edges Back edges Forward edges Cross edges
David Luebke 28 4/23/2020
DFS: Kinds of edges
● DFS introduces an important distinction among edges in the original graph: ■
Tree edge
: encounter new (white) vertex ■
Back edge
: from descendent to ancestor ■
Forward edge
: from ancestor to descendent ■
Cross edge
: between a tree or subtrees ● Note: tree & back edges are important; most algorithms don’t distinguish forward & cross
David Luebke 29 4/23/2020
DFS: Kinds Of Edges
● Thm 23.9: If G is undirected, a DFS produces only tree and back edges ● Proof by contradiction: ■ Assume there’s a forward edge ○ But F? edge must actually be a back edge (
why?
)
F?
source
David Luebke 30 4/23/2020
DFS: Kinds Of Edges
● Thm 23.9: If G is undirected, a DFS produces only tree and back edges ● Proof by contradiction: ■ Assume there’s a cross edge ○ But C? edge cannot be cross: ○ must be explored from one of the vertices it connects, becoming a tree vertex, before other vertex is explored ○ So in fact the picture is wrong…both lower tree edges cannot in fact be tree edges
source C?
David Luebke 31 4/23/2020
DFS And Graph Cycles
● Thm: An undirected graph is
acyclic
iff a DFS yields no back edges ■ If acyclic, no back edges (because a back edge implies a cycle ■ If no back edges, acyclic ○ No back edges implies only tree edges (
Why?
) ○ Only tree edges implies we have a tree or a forest ○ Which by definition is acyclic ● Thus, can run DFS to find whether a graph has a cycle
David Luebke 32 4/23/2020
DFS And Cycles
●
How would you modify the code to detect cycles?
DFS(G) { for each vertex u
{ u->color = WHITE; G->V } time = 0; for each vertex u
{ G->V if (u->color == WHITE) DFS_Visit(u); } } David Luebke 33 DFS_Visit(u) { u->color = GREY; time = time+1; u->d = time; for each v
{ u->Adj[] if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; time = time+1; u->f = time; } 4/23/2020
DFS And Cycles
●
What will be the running time?
DFS(G) { for each vertex u
{ u->color = WHITE; G->V } time = 0; for each vertex u
{ G->V if (u->color == WHITE) DFS_Visit(u); } } David Luebke 34 DFS_Visit(u) { u->color = GREY; time = time+1; u->d = time; for each v
{ u->Adj[] if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; time = time+1; u->f = time; } 4/23/2020
DFS And Cycles
●
What will be the running time?
● A: O(V+E) ● We can actually determine if cycles exist in O(V) time: ■ In an undirected acyclic forest, |E| |V| - 1 ■ So count the edges: if ever see |V| distinct edges, must have seen a back edge along the way
David Luebke 35 4/23/2020