lecture 19
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

lecture 19

on

  • 552 views

 

Statistics

Views

Total Views
552
Views on SlideShare
552
Embed Views
0

Actions

Likes
0
Downloads
12
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

lecture 19 Presentation 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