itcs 6114 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
ITCS 6114 PowerPoint Presentation
Download Presentation
ITCS 6114

Loading in 2 Seconds...

play fullscreen
1 / 44

ITCS 6114 - PowerPoint PPT Presentation


  • 147 Views
  • Uploaded on

ITCS 6114. Graph Algorithms . 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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'ITCS 6114' - dallon


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
itcs 6114

ITCS 6114

Graph Algorithms

16/7/2014

depth first search
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

26/7/2014

depth first search1
Depth-First Search
  • Vertices initially colored white
  • Then colored gray when discovered
  • Then black when finished

36/7/2014

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;

}

Depth-First Search: The Code

46/7/2014

depth first search the code1
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;

}

Depth-First Search: The Code

What does u->d represent?

56/7/2014

depth first search the code2
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;

}

Depth-First Search: The Code

What does u->f represent?

66/7/2014

depth first search the code3
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;

}

Depth-First Search: The Code

Will all vertices eventually be colored black?

76/7/2014

depth first search the code4
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;

}

Depth-First Search: The Code

What will be the running time?

86/7/2014

depth first search the code5
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;

}

Depth-First Search: The Code

Running time: O(n2) because call DFS_Visit on each vertex, and the loop over Adj[] can run as many as |V| times

96/7/2014

depth first search the code6
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;

}

Depth-First Search: The Code

BUT, there is actually a tighter bound. How many times will DFS_Visit() actually be called?

106/7/2014

depth first search the code7
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;

}

Depth-First Search: The Code

So, running time of DFS = O(V+E)

116/7/2014

depth first sort analysis
Depth-First Sort Analysis
  • This running time argument is an informal example of amortized analysis
    • “Charge” the exploration of edge to the edge:
      • Each loop in DFS_Visit can be attributed to an edge in the graph
      • Runs once/edge if directed graph, twice if undirected
      • Thus loop will run in O(E) time, algorithm O(V+E)
        • Considered linear for graph, b/c adj list requires O(V+E) storage
    • Important to be comfortable with this kind of reasoning and analysis

126/7/2014

dfs example
DFS Example

sourcevertex

136/7/2014

dfs example1
DFS Example

sourcevertex

d f

1 |

|

|

|

|

|

|

|

146/7/2014

dfs example2
DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

|

|

|

156/7/2014

dfs example3
DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

3 |

|

|

166/7/2014

dfs example4
DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

3 | 4

|

|

176/7/2014

dfs example5
DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

3 | 4

5 |

|

186/7/2014

dfs example6
DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

3 | 4

5 | 6

|

196/7/2014

dfs example7
DFS Example

sourcevertex

d f

1 |

8 |

|

2 | 7

|

3 | 4

5 | 6

|

206/7/2014

dfs example8
DFS Example

sourcevertex

d f

1 |

8 |

|

2 | 7

|

3 | 4

5 | 6

|

216/7/2014

dfs example9
DFS Example

sourcevertex

d f

1 |

8 |

|

2 | 7

9 |

3 | 4

5 | 6

|

What is the structure of the grey vertices? What do they represent?

226/7/2014

dfs example10
DFS Example

sourcevertex

d f

1 |

8 |

|

2 | 7

9 |10

3 | 4

5 | 6

|

236/7/2014

dfs example11
DFS Example

sourcevertex

d f

1 |

8 |11

|

2 | 7

9 |10

3 | 4

5 | 6

|

246/7/2014

dfs example12
DFS Example

sourcevertex

d f

1 |12

8 |11

|

2 | 7

9 |10

3 | 4

5 | 6

|

256/7/2014

dfs example13
DFS Example

sourcevertex

d f

1 |12

8 |11

13|

2 | 7

9 |10

3 | 4

5 | 6

|

266/7/2014

dfs example14
DFS Example

sourcevertex

d f

1 |12

8 |11

13|

2 | 7

9 |10

3 | 4

5 | 6

14|

276/7/2014

dfs example15
DFS Example

sourcevertex

d f

1 |12

8 |11

13|

2 | 7

9 |10

3 | 4

5 | 6

14|15

286/7/2014

dfs example16
DFS Example

sourcevertex

d f

1 |12

8 |11

13|16

2 | 7

9 |10

3 | 4

5 | 6

14|15

296/7/2014

dfs kinds of edges
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?

306/7/2014

dfs example17
DFS Example

sourcevertex

d f

1 |12

8 |11

13|16

2 | 7

9 |10

3 | 4

5 | 6

14|15

Tree edges

316/7/2014

dfs kinds of edges1
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)

326/7/2014

dfs example18
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

336/7/2014

dfs kinds of edges2
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 grey node to black node

346/7/2014

dfs example19
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

356/7/2014

dfs kinds of edges3
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 grey node to a black node

366/7/2014

dfs example20
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

376/7/2014

dfs kinds of edges4
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

386/7/2014

dfs kinds of edges5
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?

396/7/2014

dfs kinds of edges6
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?

406/7/2014

dfs and graph cycles
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

416/7/2014

dfs and cycles
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;

}

426/7/2014

dfs and cycles1
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;

}

436/7/2014

dfs and cycles2
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

446/7/2014