David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

35
David Luebke 1 10/27/22 CS 332: Algorithms Graph Algorithms

Transcript of David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

Page 1: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 1 04/18/23

CS 332: Algorithms

Graph Algorithms

Page 2: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 2 04/18/23

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

Page 3: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 3 04/18/23

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;

}

Page 4: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 4 04/18/23

DFS Example

sourcevertex

Page 5: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 5 04/18/23

DFS Example

1 | | |

| | |

| |

sourcevertex

d f

Page 6: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 6 04/18/23

DFS Example

1 | | |

| | |

2 | |

sourcevertex

d f

Page 7: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 7 04/18/23

DFS Example

1 | | |

| | 3 |

2 | |

sourcevertex

d f

Page 8: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 8 04/18/23

DFS Example

1 | | |

| | 3 | 4

2 | |

sourcevertex

d f

Page 9: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 9 04/18/23

DFS Example

1 | | |

| 5 | 3 | 4

2 | |

sourcevertex

d f

Page 10: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 10 04/18/23

DFS Example

1 | | |

| 5 | 63 | 4

2 | |

sourcevertex

d f

Page 11: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 11 04/18/23

DFS Example

1 | 8 | |

| 5 | 63 | 4

2 | 7 |

sourcevertex

d f

Page 12: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 12 04/18/23

DFS Example

1 | 8 | |

| 5 | 63 | 4

2 | 7 |

sourcevertex

d f

Page 13: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 13 04/18/23

DFS Example

1 | 8 | |

| 5 | 63 | 4

2 | 7 9 |

sourcevertex

d f

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

Page 14: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 14 04/18/23

DFS Example

1 | 8 | |

| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 15: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 15 04/18/23

DFS Example

1 | 8 |11 |

| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 16: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 16 04/18/23

DFS Example

1 |12 8 |11 |

| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 17: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 17 04/18/23

DFS Example

1 |12 8 |11 13|

| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 18: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 18 04/18/23

DFS Example

1 |12 8 |11 13|

14| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 19: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 19 04/18/23

DFS Example

1 |12 8 |11 13|

14|155 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 20: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 20 04/18/23

DFS Example

1 |12 8 |11 13|16

14|155 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 21: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 21 04/18/23

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 22: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 22 04/18/23

DFS Example

1 |12 8 |11 13|16

14|155 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Tree edges

Page 23: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 23 04/18/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)

Page 24: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 24 04/18/23

DFS Example

1 |12 8 |11 13|16

14|155 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Tree edges Back edges

Page 25: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 25 04/18/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■ Forward edge: from ancestor to descendent

○ Not a tree edge, though○ From yellow node to black node

Page 26: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 26 04/18/23

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 27: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 27 04/18/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■ Forward edge: from ancestor to descendent■ Cross edge: between a tree or subtrees

○ From a yellow node to a black node

Page 28: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 28 04/18/23

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 29: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 29 04/18/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■ 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 30: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 30 04/18/23

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

sourceF?

Page 31: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 31 04/18/23

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?

Page 32: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 32 04/18/23

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

Page 33: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 33 04/18/23

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;

}

Page 34: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 34 04/18/23

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 35: David Luebke 1 5/20/2015 CS 332: Algorithms Graph Algorithms.

David Luebke 35 04/18/23

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