CS 332: Algorithms

1 / 35

# CS 332: Algorithms - PowerPoint PPT Presentation

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

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

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

### CS 332: Algorithms

Graph Algorithms

David Luebke 16/6/2014

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

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;

{

if (v->color == WHITE)

DFS_Visit(v);

}

u->color = BLACK;

time = time+1;

u->f = time;

}

Review: DFS Code

David Luebke 36/6/2014

DFS Example

sourcevertex

David Luebke 46/6/2014

DFS Example

sourcevertex

d f

1 |

|

|

|

|

|

|

|

David Luebke 56/6/2014

DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

|

|

|

David Luebke 66/6/2014

DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

3 |

|

|

David Luebke 76/6/2014

DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

3 | 4

|

|

David Luebke 86/6/2014

DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

3 | 4

5 |

|

David Luebke 96/6/2014

DFS Example

sourcevertex

d f

1 |

|

|

2 |

|

3 | 4

5 | 6

|

David Luebke 106/6/2014

DFS Example

sourcevertex

d f

1 |

8 |

|

2 | 7

|

3 | 4

5 | 6

|

David Luebke 116/6/2014

DFS Example

sourcevertex

d f

1 |

8 |

|

2 | 7

|

3 | 4

5 | 6

|

David Luebke 126/6/2014

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

DFS Example

sourcevertex

d f

1 |

8 |

|

2 | 7

9 |10

3 | 4

5 | 6

|

David Luebke 146/6/2014

DFS Example

sourcevertex

d f

1 |

8 |11

|

2 | 7

9 |10

3 | 4

5 | 6

|

David Luebke 156/6/2014

DFS Example

sourcevertex

d f

1 |12

8 |11

|

2 | 7

9 |10

3 | 4

5 | 6

|

David Luebke 166/6/2014

DFS Example

sourcevertex

d f

1 |12

8 |11

13|

2 | 7

9 |10

3 | 4

5 | 6

|

David Luebke 176/6/2014

DFS Example

sourcevertex

d f

1 |12

8 |11

13|

2 | 7

9 |10

3 | 4

5 | 6

14|

David Luebke 186/6/2014

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

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

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

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

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

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

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

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

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

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

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

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?

David Luebke 306/6/2014

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

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

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;

{

if (v->color == WHITE)

DFS_Visit(v);

}

u->color = BLACK;

time = time+1;

u->f = time;

}

David Luebke 336/6/2014

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;

{

if (v->color == WHITE)

DFS_Visit(v);

}

u->color = BLACK;

time = time+1;

u->f = time;

}

David Luebke 346/6/2014

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