0% found this document useful (0 votes)
70 views43 pages

CS 332: Algorithms: All00/lecture18

The document summarizes concepts related to graph algorithms including representations of graphs using adjacency matrices, breadth-first search (BFS), and depth-first search (DFS). It provides pseudocode for BFS and DFS algorithms and examples of running BFS on a sample graph. Key points covered include running time analysis of BFS as O(V+E), properties of BFS such as calculating shortest path distances, and using vertex colors to guide BFS and DFS traversal.

Uploaded by

pooja
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
70 views43 pages

CS 332: Algorithms: All00/lecture18

The document summarizes concepts related to graph algorithms including representations of graphs using adjacency matrices, breadth-first search (BFS), and depth-first search (DFS). It provides pseudocode for BFS and DFS algorithms and examples of running BFS on a sample graph. Key points covered include running time analysis of BFS as O(V+E), properties of BFS such as calculating shortest path distances, and using vertex colors to guide BFS and DFS traversal.

Uploaded by

pooja
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 43

CS 332: Algorithms

Graph Algorithms
https://www.cs.virginia.edu/~luebke/cs332.f
all00/lecture18.ppt

David Luebke 1 10/14/18


Review: Graphs
● A graph G = (V, E)
■ V = set of vertices, E = set of edges
■ Dense graph: |E|  |V|2; Sparse graph: |E|  |V|
■ Undirected graph:
○ Edge (u,v) = edge (v,u)
○ No self-loops
■ Directed graph:
○ Edge (u,v) goes from vertex u to vertex v, notated uv
■ A weighted graph associates weights with either the edges
or the vertices

David Luebke 2 10/14/18


Review: Representing Graphs
● Assume V = {1, 2, …, n}
● An adjacency matrix represents the graph as a n x n
matrix A:
■ A[i, j] = 1 if edge (i, j)  E (or weight of edge)
= 0 if edge (i, j)  E
■ Storage requirements: O(V2)
○ A dense representation
■ But, can be very efficient for small graphs
○ Especially if store just one bit/edge
○ Undirected graph: only need one diagonal of matrix

David Luebke 3 10/14/18


Universal Sink
● Show how to determine whether a directed
graph G contains a universal sink - a vertex
with in-degree (V-1) (V is the number of
vertices) and out-degree 0, given an adjacency
matrix for G. Can be done in O(V)

David Luebke 4 10/14/18


Review: Breadth-First Search
● “Explore” a graph, turning it into a tree
■ One vertex at a time
■ Expand frontier of explored vertices across the
breadth of the frontier
● Builds a tree over the graph
■ Pick a source vertex to be the root
■ Find (“discover”) its children, then their children,
etc.

David Luebke 5 10/14/18


Review: Breadth-First Search
● Again will associate vertex “colors” to guide the
algorithm
■ White vertices have not been discovered
○ All vertices start out white
■ Grey vertices are discovered but not fully explored
○ They may be adjacent to white vertices
■ Black vertices are discovered and fully explored
○ They are adjacent only to black and gray vertices

● Explore vertices by scanning adjacency list of grey


vertices

David Luebke 6 10/14/18


Review: Breadth-First Search
BFS(G, s) {
initialize vertices;
Q = {s}; // Q is a queue (duh); initialize to s
while (Q not empty) {
u = RemoveTop(Q);
for each v  u->adj {
if (v->color == WHITE)
v->color = GREY;
v->d = u->d + 1;
v->p = u;
v->d represents level of v
Enqueue(Q, v);
} v->p represents the parent of v
u->color = BLACK;
}
}

David Luebke 7 10/14/18


Breadth-First Search: Example

r s t u

   

   
v w x y

David Luebke 8 10/14/18


Breadth-First Search: Example

r s t u

 0  

   
v w x y

Q: s
David Luebke 9 10/14/18
Breadth-First Search: Example

r s t u

1 0  

 1  
v w x y

Q: w r

David Luebke 10 10/14/18


Breadth-First Search: Example

r s t u

1 0 2 

 1 2 
v w x y

Q: r t x

David Luebke 11 10/14/18


Breadth-First Search: Example

r s t u

1 0 2 

2 1 2 
v w x y

Q: t x v

David Luebke 12 10/14/18


Breadth-First Search: Example

r s t u

1 0 2 3

2 1 2 
v w x y

Q: x v u

David Luebke 13 10/14/18


Breadth-First Search: Example

r s t u

1 0 2 3

2 1 2 3
v w x y

Q: v u y

David Luebke 14 10/14/18


Breadth-First Search: Example

r s t u

1 0 2 3

2 1 2 3
v w x y

Q: u y

David Luebke 15 10/14/18


Breadth-First Search: Example

r s t u

1 0 2 3

2 1 2 3
v w x y

Q: y
David Luebke 16 10/14/18
Breadth-First Search: Example

r s t u

1 0 2 3

2 1 2 3
v w x y

Q: Ø
David Luebke 17 10/14/18
BFS: The Code Again
BFS(G, s) {
initialize vertices; Touch every vertex: O(V)
Q = {s};
while (Q not empty) {
u = RemoveTop(Q);
for each v  u->adj { u = every vertex, but only once
if (v->color == WHITE) (Why?)
v->color = GREY;
So v = every vertexv->d = u->d + 1;
that appears in v->p = u;
Enqueue(Q, v);
some other} vert’s
adjacencyu->color
list = BLACK;
}
} What will be the running time?
Total running time: O(V+E)

David Luebke 18 10/14/18


Breadth-First Search: Properties
● BFS calculates the shortest-path distance to
the source node
● Since BFS gives a path from root to node,
d[v]>=sd[v] (cant be shorter than shortest
path)
● To prove that d[v]!> sd[v]

David Luebke 19 10/14/18


Proof sketch
● Let v be node closest to s that has d[v]!=sd[v].
● Let u be vertex just before v on shortest path from s to v which
means d[u]=sd[u] but d[v]>d[u]+1
● Lets look at what could have happened during the bfs when u
was being explored. Note u is grey.
-either v was white or black or grey. All show contradiction
If v was white: then d[v]=d[u]+1
If v was black: then v was enqueued before u so d[v] <=d[u]
If v was grey: so v was discovered through say w. Hence d[w]
was enqueued before u and hence d[w]<=d[u]. Hence, d[w]
+1<=d[u]+1. Hence d[v]=d[w]+1<=d[u]+1.

David Luebke 20 10/14/18


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 21 10/14/18


Depth-First Search
● Vertices initially colored white
● Then colored gray when discovered
● Then black when finished

David Luebke 22 10/14/18


Depth-First Search: The Code
DFS(G) DFS_Visit(u)
{ {
u->color = GREY;
for each vertex u  G->V
time = time+1;
{
u->d = time;
u->color = WHITE; for each v  u->Adj[]
} {
time = 0; if (v->color == WHITE)
for each vertex u  G->V DFS_Visit(v);
{ }
if (u->color == WHITE) u->color = BLACK;
DFS_Visit(u); time = time+1;
} u->f = time;
} }

David Luebke 23 10/14/18


Depth-First Search: The Code
DFS(G) DFS_Visit(u)
{ {
u->color = GREY;
for each vertex u  G->V
time = time+1;
{
u->d = time;
u->color = WHITE; for each v  u->Adj[]
} {
time = 0; if (v->color == WHITE)
for each vertex u  G->V DFS_Visit(v);
{ }
if (u->color == WHITE) u->color = BLACK;
DFS_Visit(u); time = time+1;
} u->f = time;
} }

What does u->d represent?


David Luebke 24 10/14/18
Depth-First Search: The Code
DFS(G) DFS_Visit(u)
{ {
u->color = GREY;
for each vertex u  G->V
time = time+1;
{
u->d = time;
u->color = WHITE; for each v  u->Adj[]
} {
time = 0; if (v->color == WHITE)
for each vertex u  G->V DFS_Visit(v);
{ }
if (u->color == WHITE) u->color = BLACK;
DFS_Visit(u); time = time+1;
} u->f = time;
} }

u->f represents finishing time of u


David Luebke 25 10/14/18
DFS Example
source
vertex

David Luebke 26 10/14/18


DFS Example
source
vertex
d f
1 | | |

| |

| | |

David Luebke 27 10/14/18


DFS Example
source
vertex
d f
1 | | |

2 | |

| | |

David Luebke 28 10/14/18


DFS Example
source
vertex
d f
1 | | |

2 | |

3 | | |

David Luebke 29 10/14/18


DFS Example
source
vertex
d f
1 | | |

2 | |

3 | 4 | |

David Luebke 30 10/14/18


DFS Example
source
vertex
d f
1 | | |

2 | |

3 | 4 5 | |

David Luebke 31 10/14/18


DFS Example
source
vertex
d f
1 | | |

2 | |

3 | 4 5 | 6 |

David Luebke 32 10/14/18


DFS Example
source
vertex
d f
1 | 8 | |

2 | 7 |

3 | 4 5 | 6 |

David Luebke 33 10/14/18


DFS Example
source
vertex
d f
1 | 8 | |

2 | 7 |

3 | 4 5 | 6 |

David Luebke 34 10/14/18


DFS Example
source
vertex
d f
1 | 8 | |

2 | 7 9 |

3 | 4 5 | 6 |

What is the structure of the grey vertices?


What do they represent?
David Luebke 35 10/14/18
DFS Example
source
vertex
d f
1 | 8 | |

2 | 7 9 |10

3 | 4 5 | 6 |

David Luebke 36 10/14/18


DFS Example
source
vertex
d f
1 | 8 |11 |

2 | 7 9 |10

3 | 4 5 | 6 |

David Luebke 37 10/14/18


DFS Example
source
vertex
d f
1 |12 8 |11 |

2 | 7 9 |10

3 | 4 5 | 6 |

David Luebke 38 10/14/18


DFS Example
source
vertex
d f
1 |12 8 |11 13|

2 | 7 9 |10

3 | 4 5 | 6 |

David Luebke 39 10/14/18


DFS Example
source
vertex
d f
1 |12 8 |11 13|

2 | 7 9 |10

3 | 4 5 | 6 14|

David Luebke 40 10/14/18


DFS Example
source
vertex
d f
1 |12 8 |11 13|

2 | 7 9 |10

3 | 4 5 | 6 14|15

David Luebke 41 10/14/18


DFS Example
source
vertex
d f
1 |12 8 |11 13|16

2 | 7 9 |10

3 | 4 5 | 6 14|15

David Luebke 42 10/14/18


Paranthesis theorem
For any two vertices u and v in the graph only one of the
below hold true
D[u] < f[u] <d[v] < f[v]
D[v] < f[v] <d[u] < f[u]
D[u] < d[v] <f[v] < f[u]
D[v] < d[u] <f[u] < f[v]

● Corollary: Vertex v is a proper descendant of vertex u in the


depth-first forest for a (directed or undirected) graph G iff d[u]
< d[v] <f[v] < f[u]

David Luebke 43 10/14/18

You might also like