Successfully reported this slideshow.
Upcoming SlideShare
×

# lecture 19

546 views

Published on

Published in: Education, Technology
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

• Be the first to like this

### lecture 19

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