0
Upcoming SlideShare
×

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.
Standard text messaging rates apply

# lecture 19

328

Published on

Published in: Education, Technology
0 Likes
Statistics
Notes
• Full Name
Comment goes here.

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

• Be the first to like this

Views
Total Views
328
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
12
0
Likes
0
Embeds 0
No embeds

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
• 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
• 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