Your SlideShare is downloading. ×
0
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
lecture 19
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

lecture 19

328

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
328
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. CS 332: Algorithms Graph Algorithms
  • 2. 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. 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. DFS Example source vertex
  • 5. DFS Example 1 | | | | | | | | source vertex d f
  • 6. DFS Example 1 | | | | | | 2 | | source vertex d f
  • 7. DFS Example 1 | | | | | 3 | 2 | | source vertex d f
  • 8. DFS Example 1 | | | | | 3 | 4 2 | | source vertex d f
  • 9. DFS Example 1 | | | | 5 | 3 | 4 2 | | source vertex d f
  • 10. DFS Example 1 | | | | 5 | 6 3 | 4 2 | | source vertex d f
  • 11. DFS Example 1 | 8 | | | 5 | 6 3 | 4 2 | 7 | source vertex d f
  • 12. DFS Example 1 | 8 | | | 5 | 6 3 | 4 2 | 7 | source vertex d f
  • 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. DFS Example 1 | 8 | | | 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f
  • 15. DFS Example 1 | 8 |11 | | 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f
  • 16. DFS Example 1 |12 8 |11 | | 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f
  • 17. DFS Example 1 |12 8 |11 13| | 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f
  • 18. DFS Example 1 |12 8 |11 13| 14| 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f
  • 19. DFS Example 1 |12 8 |11 13| 14|15 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f
  • 20. DFS Example 1 |12 8 |11 13|16 14|15 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f
  • 21. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×