Presentation is loading. Please wait.

Presentation is loading. Please wait.

David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

Similar presentations


Presentation on theme: "David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms."— Presentation transcript:

1 David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms

2 David Luebke 2 5/20/2015 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

3 David Luebke 3 5/20/2015 Review: DFS Code DFS(G) { for each vertex u  G->V { u->color = WHITE; } 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; }

4 David Luebke 4 5/20/2015 DFS Example source vertex

5 David Luebke 5 5/20/2015 DFS Example 1 | | | | | | | | source vertex d f

6 David Luebke 6 5/20/2015 DFS Example 1 | | | | | | 2 | | source vertex d f

7 David Luebke 7 5/20/2015 DFS Example 1 | | | | |3 | 2 | | source vertex d f

8 David Luebke 8 5/20/2015 DFS Example 1 | | | | |3 | 4 2 | | source vertex d f

9 David Luebke 9 5/20/2015 DFS Example 1 | | | |5 |3 | 4 2 | | source vertex d f

10 David Luebke 10 5/20/2015 DFS Example 1 | | | |5 | 63 | 4 2 | | source vertex d f

11 David Luebke 11 5/20/2015 DFS Example 1 |8 | | |5 | 63 | 4 2 | 7 | source vertex d f

12 David Luebke 12 5/20/2015 DFS Example 1 |8 | | |5 | 63 | 4 2 | 7 | source vertex d f

13 David Luebke 13 5/20/2015 DFS Example 1 |8 | | |5 | 63 | 4 2 | 79 | source vertex d f What is the structure of the yellow vertices? What do they represent?

14 David Luebke 14 5/20/2015 DFS Example 1 |8 | | |5 | 63 | 4 2 | 79 |10 source vertex d f

15 David Luebke 15 5/20/2015 DFS Example 1 |8 |11 | |5 | 63 | 4 2 | 79 |10 source vertex d f

16 David Luebke 16 5/20/2015 DFS Example 1 |128 |11 | |5 | 63 | 4 2 | 79 |10 source vertex d f

17 David Luebke 17 5/20/2015 DFS Example 1 |128 |1113| |5 | 63 | 4 2 | 79 |10 source vertex d f

18 David Luebke 18 5/20/2015 DFS Example 1 |128 |1113| 14|5 | 63 | 4 2 | 79 |10 source vertex d f

19 David Luebke 19 5/20/2015 DFS Example 1 |128 |1113| 14|155 | 63 | 4 2 | 79 |10 source vertex d f

20 David Luebke 20 5/20/2015 DFS Example 1 |128 |1113|16 14|155 | 63 | 4 2 | 79 |10 source vertex d f

21 David Luebke 21 5/20/2015 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?

22 David Luebke 22 5/20/2015 DFS Example 1 |128 |1113|16 14|155 | 63 | 4 2 | 79 |10 source vertex d f Tree edges

23 David Luebke 23 5/20/2015 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)

24 David Luebke 24 5/20/2015 DFS Example 1 |128 |1113|16 14|155 | 63 | 4 2 | 79 |10 source vertex d f Tree edgesBack edges

25 David Luebke 25 5/20/2015 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

26 David Luebke 26 5/20/2015 DFS Example 1 |128 |1113|16 14|155 | 63 | 4 2 | 79 |10 source vertex d f Tree edgesBack edgesForward edges

27 David Luebke 27 5/20/2015 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

28 David Luebke 28 5/20/2015 DFS Example 1 |128 |1113|16 14|155 | 63 | 4 2 | 79 |10 source vertex d f Tree edgesBack edgesForward edgesCross edges

29 David Luebke 29 5/20/2015 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

30 David Luebke 30 5/20/2015 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?) source F?

31 David Luebke 31 5/20/2015 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?

32 David Luebke 32 5/20/2015 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

33 David Luebke 33 5/20/2015 DFS And Cycles ● How would you modify the code to detect cycles? DFS(G) { for each vertex u  G->V { u->color = WHITE; } time = 0; for each vertex u  G->V { if (u->color == WHITE) DFS_Visit(u); } 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; }

34 David Luebke 34 5/20/2015 DFS And Cycles ● What will be the running time? DFS(G) { for each vertex u  G->V { u->color = WHITE; } time = 0; for each vertex u  G->V { if (u->color == WHITE) DFS_Visit(u); } 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; }

35 David Luebke 35 5/20/2015 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


Download ppt "David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms."

Similar presentations


Ads by Google