CS 332: Algorithms Graph Algorithms
Review: Depth-First Search <ul><li>Depth-first search  is another strategy for exploring a graph </li></ul><ul><ul><li>Exp...
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>...
DFS Example source vertex
DFS Example 1 |  |  |  |  |  |  |  |  source vertex d  f
DFS Example 1 |  |  |  |  |  |  2 |  |  source vertex d  f
DFS Example 1 |  |  |  |  |  3 |  2 |  |  source vertex d  f
DFS Example 1 |  |  |  |  |  3 | 4 2 |  |  source vertex d  f
DFS Example 1 |  |  |  |  5 |  3 | 4 2 |  |  source vertex d  f
DFS Example 1 |  |  |  |  5 | 6 3 | 4 2 |  |  source vertex d  f
DFS Example 1 |  8 |  |  |  5 | 6 3 | 4 2 | 7 |  source vertex d  f
DFS Example 1 |  8 |  |  |  5 | 6 3 | 4 2 | 7 |  source vertex d  f
DFS Example 1 |  8 |  |  |  5 | 6 3 | 4 2 | 7 9 |  source vertex d  f What is the structure of the yellow vertices?  What ...
DFS Example 1 |  8 |  |  |  5 | 6 3 | 4 2 | 7 9 |10 source vertex d  f
DFS Example 1 |  8 |11 |  |  5 | 6 3 | 4 2 | 7 9 |10 source vertex d  f
DFS Example 1 |12 8 |11 |  |  5 | 6 3 | 4 2 | 7 9 |10 source vertex d  f
DFS Example 1 |12 8 |11 13|  |  5 | 6 3 | 4 2 | 7 9 |10 source vertex d  f
DFS Example 1 |12 8 |11 13|  14|  5 | 6 3 | 4 2 | 7 9 |10 source vertex d  f
DFS Example 1 |12 8 |11 13|  14|15 5 | 6 3 | 4 2 | 7 9 |10 source vertex d  f
DFS Example 1 |12 8 |11 13|16 14|15 5 | 6 3 | 4 2 | 7 9 |10 source vertex d  f
DFS: Kinds of edges <ul><li>DFS introduces an important distinction among edges in the original graph: </li></ul><ul><ul><...
DFS Example 1 |12 8 |11 13|16 14|15 5 | 6 3 | 4 2 | 7 9 |10 source vertex d  f Tree edges
DFS: Kinds of edges <ul><li>DFS introduces an important distinction among edges in the original graph: </li></ul><ul><ul><...
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
DFS: Kinds of edges <ul><li>DFS introduces an important distinction among edges in the original graph: </li></ul><ul><ul><...
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
DFS: Kinds of edges <ul><li>DFS introduces an important distinction among edges in the original graph: </li></ul><ul><ul><...
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 e...
DFS: Kinds of edges <ul><li>DFS introduces an important distinction among edges in the original graph: </li></ul><ul><ul><...
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 ...
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 ...
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...
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->...
DFS And Cycles <ul><li>What will be the running time? </li></ul>DFS(G) { for each vertex u    G->V { u->color = WHITE; } ...
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 determ...
Upcoming SlideShare
Loading in …5
×

lecture 19

369
-1

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
369
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×