csc 413/513: intro to algorithms graph algorithms dfs
TRANSCRIPT
![Page 1: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/1.jpg)
CSC 413/513: Intro to Algorithms
Graph Algorithms
DFS
![Page 2: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/2.jpg)
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
![Page 3: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/3.jpg)
Depth-First Search
● Vertices initially colored white● Then colored gray when discovered● Then black when finished
![Page 4: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/4.jpg)
Depth-First Search: The 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 = 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;
}
![Page 5: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/5.jpg)
Depth-First Search: The 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 = 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;
}
What does u->d represent?
![Page 6: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/6.jpg)
Depth-First Search: The 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 = 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;
}
What does u->f represent?
![Page 7: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/7.jpg)
Depth-First Search: The 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 = 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;
}
Will all vertices eventually be colored black?
![Page 8: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/8.jpg)
DFS Example
sourcevertex
![Page 9: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/9.jpg)
DFS Example
1 | | |
| | |
| |
sourcevertex
d f
![Page 10: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/10.jpg)
DFS Example
1 | | |
| | |
2 | |
sourcevertex
d f
![Page 11: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/11.jpg)
DFS Example
1 | | |
| | 3 |
2 | |
sourcevertex
d f
![Page 12: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/12.jpg)
DFS Example
1 | | |
| | 3 | 4
2 | |
sourcevertex
d f
![Page 13: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/13.jpg)
DFS Example
1 | | |
| 5 | 3 | 4
2 | |
sourcevertex
d f
![Page 14: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/14.jpg)
DFS Example
1 | | |
| 5 | 63 | 4
2 | |
sourcevertex
d f
![Page 15: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/15.jpg)
DFS Example
1 | 8 | |
| 5 | 63 | 4
2 | 7 |
sourcevertex
d f
![Page 16: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/16.jpg)
DFS Example
1 | 8 | |
| 5 | 63 | 4
2 | 7 |
sourcevertex
d f
![Page 17: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/17.jpg)
DFS Example
1 | 8 | |
| 5 | 63 | 4
2 | 7 9 |
sourcevertex
d f
What is the structure of the grey vertices? What do they represent?
![Page 18: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/18.jpg)
DFS Example
1 | 8 | |
| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
![Page 19: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/19.jpg)
DFS Example
1 | 8 |11 |
| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
![Page 20: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/20.jpg)
DFS Example
1 |12 8 |11 |
| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
![Page 21: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/21.jpg)
DFS Example
1 |12 8 |11 13|
| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
![Page 22: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/22.jpg)
DFS Example
1 |12 8 |11 13|
14| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
![Page 23: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/23.jpg)
DFS Example
1 |12 8 |11 13|
14|155 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
![Page 24: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/24.jpg)
DFS Example
1 |12 8 |11 13|16
14|155 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
![Page 25: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/25.jpg)
Depth-First Search: The 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 = 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;
}
What will be the running time?
![Page 26: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/26.jpg)
Depth-First Search: The 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 = 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;
}Running time: O(n2) because call DFS_Visit on each vertex,
and the loop over Adj[] can run as many as |V| times
![Page 27: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/27.jpg)
Depth-First Search: The 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 = 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;
}BUT, there is actually a tighter bound.
How many times will DFS_Visit() actually be called?
![Page 28: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/28.jpg)
Depth-First Search Analysis
● For a node u■ DFS_Visit(u) cannot be called more than once■ DFS_Visit(u) cannot be called less than once■ Therefore, exactly once
● DFS_Visit(u) requires c + ϴ(|Adj(u)|) time■ The fact that recursive calls are made to v’s is accounted for by
DFS_Visit(v)
● Total= ∑u ( c + ϴ(|Adj(u)|) ) = ϴ(V+E)■ Considered linear in input size, since adjacency list is a ϴ(V+E)
representation
![Page 29: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/29.jpg)
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?
![Page 30: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/30.jpg)
DFS Example
1 |12 8 |11 13|16
14|155 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
Tree edges
![Page 31: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/31.jpg)
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 grey vertex (grey to grey)
![Page 32: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/32.jpg)
DFS Example
1 |12 8 |11 13|16
14|155 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
Tree edges Back edges
![Page 33: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/33.jpg)
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○ If forward edge, then grey node to black node
Converse not true; could be a cross edge (see next)
![Page 34: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/34.jpg)
DFS Example
1 |12 8 |11 13|16
14|155 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
Tree edges Back edges Forward edges
![Page 35: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/35.jpg)
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 or within trees
○ (Also) from a grey node to a black node○ No ancestor-descendent relation, if in the same DFS tree
![Page 36: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/36.jpg)
DFS Example
1 |12 8 |11 13|16
14|155 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
Tree edges Back edges Forward edges Cross edges
![Page 37: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/37.jpg)
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
![Page 38: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/38.jpg)
DFS: Kinds Of Edges
● Thm 22.10: 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?)
sourceF?
![Page 39: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/39.jpg)
DFS: Kinds Of Edges
● Thm 22.10: 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?
![Page 40: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/40.jpg)
DFS And Graph Cycles
● Thm: An undirected graph is acyclic iff a DFS yields no back edges■ If acyclic, then no back edges (because a back edge
implies a cycle)■ If no back edges, then 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
![Page 41: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/41.jpg)
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;
}If v->color == GREY and Pred(u)≠v, …
![Page 42: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/42.jpg)
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;
}
![Page 43: CSC 413/513: Intro to Algorithms Graph Algorithms DFS](https://reader035.vdocument.in/reader035/viewer/2022062517/56649f225503460f94c3aa09/html5/thumbnails/43.jpg)
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 if no
cycle, then O(V+E) is O(V)■ If cycle, count the edges: if ever see |V| distinct edges,
must have seen a back edge along the way○ Can halt and output “cycle exists”○ O(V) time