1 / 35

CS 332: Algorithms

CS 332: Algorithms. Graph Algorithms . 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

adamdaniel
Télécharger la présentation

CS 332: Algorithms

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS 332: Algorithms Graph Algorithms David Luebke 16/6/2014

  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 David Luebke 26/6/2014

  3. 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; } Review: DFS Code David Luebke 36/6/2014

  4. DFS Example sourcevertex David Luebke 46/6/2014

  5. DFS Example sourcevertex d f 1 | | | | | | | | David Luebke 56/6/2014

  6. DFS Example sourcevertex d f 1 | | | 2 | | | | | David Luebke 66/6/2014

  7. DFS Example sourcevertex d f 1 | | | 2 | | 3 | | | David Luebke 76/6/2014

  8. DFS Example sourcevertex d f 1 | | | 2 | | 3 | 4 | | David Luebke 86/6/2014

  9. DFS Example sourcevertex d f 1 | | | 2 | | 3 | 4 5 | | David Luebke 96/6/2014

  10. DFS Example sourcevertex d f 1 | | | 2 | | 3 | 4 5 | 6 | David Luebke 106/6/2014

  11. DFS Example sourcevertex d f 1 | 8 | | 2 | 7 | 3 | 4 5 | 6 | David Luebke 116/6/2014

  12. DFS Example sourcevertex d f 1 | 8 | | 2 | 7 | 3 | 4 5 | 6 | David Luebke 126/6/2014

  13. DFS Example sourcevertex d f 1 | 8 | | 2 | 7 9 | 3 | 4 5 | 6 | What is the structure of the yellow vertices? What do they represent? David Luebke 136/6/2014

  14. DFS Example sourcevertex d f 1 | 8 | | 2 | 7 9 |10 3 | 4 5 | 6 | David Luebke 146/6/2014

  15. DFS Example sourcevertex d f 1 | 8 |11 | 2 | 7 9 |10 3 | 4 5 | 6 | David Luebke 156/6/2014

  16. DFS Example sourcevertex d f 1 |12 8 |11 | 2 | 7 9 |10 3 | 4 5 | 6 | David Luebke 166/6/2014

  17. DFS Example sourcevertex d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 | David Luebke 176/6/2014

  18. DFS Example sourcevertex d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14| David Luebke 186/6/2014

  19. DFS Example sourcevertex d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14|15 David Luebke 196/6/2014

  20. DFS Example sourcevertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 David Luebke 206/6/2014

  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? David Luebke 216/6/2014

  22. DFS Example sourcevertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Tree edges David Luebke 226/6/2014

  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) David Luebke 236/6/2014

  24. DFS Example sourcevertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Tree edges Back edges David Luebke 246/6/2014

  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 David Luebke 256/6/2014

  26. DFS Example sourcevertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Tree edges Back edges Forward edges David Luebke 266/6/2014

  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 David Luebke 276/6/2014

  28. DFS Example sourcevertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Tree edges Back edges Forward edges Cross edges David Luebke 286/6/2014

  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 David Luebke 296/6/2014

  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? David Luebke 306/6/2014

  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 treevertex, before other vertex is explored • So in fact the picture is wrong…bothlower tree edges cannot in fact betree edges source C? David Luebke 316/6/2014

  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 David Luebke 326/6/2014

  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; } David Luebke 336/6/2014

  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; } David Luebke 346/6/2014

  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 David Luebke 356/6/2014

More Related