Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Graphs
ORD
SFO
Graphs
LAX
DFW
2
Graphs
Applications
Terminology
Properties
ADT
Graphs
3
Graphs
Graph
A graph is a pair (V, E), where
V is a set of nodes, called vertices
E is a collection of pairs of vertices, called edges
Vertices and edges are positions and store elements
Example:
A vertex represents an airport and stores the three-letter airport code
An edge represents a flight route between two airports and stores the
mileage of the route
SFO
PVD
ORD
LGA
HNL
LAX
DFW
MIA
Edge Types
Graphs
(u,v)
Directed edge
u
ORD
flight
AA 1206 DFW
802 miles
ORD
flight
DFW
route
802 miles
Undirected edge
Weighted edge
Directed graph (Digraph)
all the edges are directed
e.g., route network
Undirected graph
Weighted graph
Graphs
5
Graphs
Applications
cslab1a
cslab1b
Electronic circuits
math.brown.edu
Transportation networks
cs.brown.edu
Highway network
Flight network
Computer networks
brown.edu
qwest.net
att.net
cox.net
John
Databases
Entity-relationship diagram
Paul
David
6
Graphs
Terminology
End vertices (or endpoints) of
an edge
U and V are the endpoints of a
Adjacent vertices
U and V are adjacent
Degree of a vertex
X has degree 5
Parallel edges
h and i are parallel edges
Self-loop
j is a self-loop
e
W
j
Z
g
f
Graphs
7
Graphs
Terminology (cont.)
Outgoing edges of a
vertex
Incoming edges of a
vertex
X
e
In-degree of a vertex
X has in-degree 3
g
f
Out-degree of a vertex
X has out-degree 2
8
Graphs
Terminology (cont.)
Path
sequence of alternating vertices
and edges
begins with a vertex
ends with a vertex
each edge is preceded and
followed by its endpoints
Simple path
path such that all its vertices
and edges are distinct
Examples
P1=(V,b,X,h,Z) is a simple path
P2=(U,c,W,e,X,g,Y,f,W,d,V) is a
path that is not simple
a
U
c
d
P2
P1
X
g
f
Graphs
9
Graphs
Terminology (cont.)
Cycle
circular sequence of alternating
vertices and edges
each edge is preceded and
followed by its endpoints
Simple cycle
cycle such that all its vertices
and edges are distinct
Examples
d
C2
U
c
X
e
f
C1
g
C1=(V,b,X,g,Y,f,W,c,U,a,) is a
simple cycle
C2=(U,c,W,e,X,g,Y,f,W,d,V,a,)
is a cycle that is not simple
10
Graphs
Exercise on Terminology
# of vertices?
# of edges?
What type of the graph is it? ANS: undirected weighted graph
Show the end vertices of the edge with largest weight
Show the vertices of smallest degree and largest degree
Show the edges incident to the vertices in the above question
Enumerate pairs of adjacent vertices
Identify the shortest simple path from HNL to PVD
Identify the simple cycle with the most edges
SFO
PVD
ORD
LGA
HNL
LAX
DFW
MIA
Graphs
11
Graphs
Notation
Sv deg(v) = ?
Property 2 Total number
of edges
n
m
deg(v)
number of vertices
number of edges
degree of vertex v
Example
n = ?
m = ?
deg(v) = ?
A graph with given number of
vertices (4) and maximum
number of edges
12
Graphs
Notation
Sv deg(v) = 2m
n
m
deg(v)
number of vertices
number of edges
degree of vertex v
Example
n = 4
m = 6
deg(v) = 3
Graphs
13
Graphs
Notation
n
m
deg(v)
Sv in-deg(v) = ?
Sv out-deg(v) = ?
Property 2 Total number
of edges
number of vertices
number of edges
degree of vertex v
Example
n = ?
m = ?
deg(v) = ?
14
Graphs
Sv in-deg(v) = m
Sv out-deg(v) = m
Property 2 Total
number of edges
In an directed graph with
no self-loops and no
multiple edges
m n (n - 1)
Notation
n
m
deg(v)
number of vertices
number of edges
degree of vertex v
Example
n = 4
m = 12
deg(v) = 6
A graph with given number of
vertices (4) and maximum
number of edges
Graphs
15
Update methods
are positions
store elements
Accessor methods
aVertex()
incidentEdges(v)
adjacentVertices(v)
degree(v)
endVertices(e)
opposite(v, e)
areAdjacent(v, w)
isDirected(e)
origin(e)
destination(e)
insertVertex(o)
insertEdge(v, w, o)
insertDirectedEdge(v, w, o)
removeVertex(v)
removeEdge(e)
numVertices()
numEdges()
vertices()
edges()
Generic methods
Specific to
directed
edges
16
Graphs
Exercise on ADT
aVertex()
incidentEdges(ORD)
adjacentVertices(ORD)
degree(ORD)
endVertices((LGA,MIA))
opposite(DFW, (DFW,LGA))
areAdjacent(DFW, SFO)
insertVertex(IAH)
insertEdge(MIA, PVD, 1200)
removeVertex(ORD)
removeEdge((DFW,ORD))
isDirected((DFW,LGA))
origin ((DFW,LGA))
destination((DFW,LGA)))
SFO
PVD
ORD
LGA
HNL
LAX
DFW
MIA
Graphs
17
Graphs
Vertex Sequence
ORD
LGA
(LGA, PVD)
142
PVD
DFW
MIA
ORD
LGA
DFW
MIA
18
Asymptotic Performance
Graphs
Accessor methods
Accessing vertex sequence
aVertex() O(1)
degree(v) O(1)
Generic methods
numVertices() O(1)
numEdges() O(1)
vertices() O(n)
edges() O(m)
Edge List
Vertex Sequence
Weight Directed
endVertices(e) O(1)
opposite(v, e) O(1)
849
False
ORD
False
LGA
isDirected(e) O(1)
(LGA, PVD)
142
False
PVD
(LGA, MIA)
1099 False
DFW
MIA
(ORD, PVD)
Degree
Graphs
Asymptotic Performance of
Edge List Structure
n vertices, m edges
no parallel edges
no self-loops
Bounds are big-Oh
Edge
List
Space
n+m
incidentEdges(v)
adjacentVertices(v)
areAdjacent (v, w)
insertVertex(o)
insertEdge(v, w, o)
removeVertex(v)
m
1
Vertex Sequence
Weight Directed
(ORD, PVD)
m
m
1
removeEdge(e)
Edge List
Degree
849
False
ORD
False
LGA
(LGA, PVD)
142
False
PVD
(LGA, MIA)
1099 False
DFW
MIA
Graphs
19
20
Graphs
Vertex object
a
element
reference to position in
vertex sequence
Edge object
element
origin vertex object
destination vertex object
reference to position in
edge sequence
c
b
Vertex sequence
sequence of vertex objects
Edge sequence
10
Graphs
21
PVD
ORD
Edge List
LGA
DFW
Adjacency List
MIA
1099 (LGA, MIA) DFW (DFW, ORD) (DFW, LGA) (DFW, MIA)
1387 (DFW, LGA) MIA
Asymptotic Performance of
Adjacency List Structure
n vertices, m edges
no parallel edges
no self-loops
Bounds are big-Oh
Space
incidentEdges(v)
adjacentVertices(v)
areAdjacent (v, w)
insertVertex(o)
insertEdge(v, w, o)
removeVertex(v)
removeEdge(e)
Adjacency
List
Edge List
849 (ORD, PVD)
802 (ORD, DFW)
n+m
deg(v)
min(deg(v), deg(w))
1
ORD
1
deg(v)*
1*
22
11
Graphs
23
sequence of
references to edge
objects of incident
edges
Augmented edge
objects
references to
associated positions
in incidence
sequences of end
vertices
2:PVD24
0:ORD
1:LGA
Graphs
Adjacency Matrix
Structure
Edge List
3:DFW
Vertex Sequence
4:MIA
0 ORD
LGA
PVD
3 DFW
MIA
12
Graphs
Asymptotic Performance of
Adjacency Matrix Structure
n vertices, m edges
no parallel edges
no self-loops
Bounds are big-Oh
Space
Adjacency
Matrix
n2
incidentEdges(v)
adjacentVertices(v)
areAdjacent (v, w)
Edge List
849 (ORD, PVD)
Adjacency Matrix
0 1 2 3 4
Vertex
Sequence
0 ORD 0
1 LGA
insertVertex(o)
1
n2
insertEdge(v, w, o)
2 PVD
removeVertex(v)
n2
1
3 DFW 3
removeEdge(e)
4 MIA
Graphs
25
26
2D-array adjacency
array
Reference to edge
object for adjacent
vertices
Null for non
nonadjacent vertices
0
0
2
1
a
13
Graphs
Asymptotic Performance
n vertices, m edges
no parallel edges
no self-loops
Bounds are big-Oh
Edge
List
Adjacency
List
Adjacency
Matrix
n+m
n+m
n2
deg(v)
insertVertex(o)
m
1
min(deg(v), deg(w))
1
1
n2
insertEdge(v, w, o)
removeVertex(v)
m
1
deg(v)
1
n2
1
Space
incidentEdges(v)
adjacentVertices(v)
areAdjacent (v, w)
removeEdge(e)
Graphs
27
28
Depth-First Search
A
B
Graphs
14
Graphs
29
Graphs
Algorithm
Example
Properties
Analysis
Applications of DFS
Path finding
Cycle finding
30
Graphs
Subgraphs
A subgraph S of a graph
G is a graph such that
The vertices of S are a
subset of the vertices of G
The edges of S are a subset
of the edges of G
Subgraph
A spanning subgraph of
G is a subgraph that
contains all the vertices
of G
Spanning subgraph
15
Graphs
31
Graphs
Connectivity
A graph is connected if there is
a path between every pair of
vertices
A connected component of a
graph G is a maximal
connected subgraph of G
Connected graph
32
Graphs
A forest is an undirected
graph without cycles
The connected
components of a forest
are trees
Tree
Forest
16
Graphs
33
Graphs
Graph
Spanning tree
34
Graphs
Depth-First Search
Depth-first search (DFS)
is a general technique
for traversing a graph
A DFS traversal of a
graph G
Visits all the vertices and
edges of G
Determines whether G is
connected
Computes the connected
components of G
Computes a spanning
forest of G
Depth-first search is to
graphs what Euler tour
is to binary trees
17
Graphs
35
Graphs
Example
A(B) = {A, C, F}
A(B) = {A, C, F}
unexplored vertex
visited vertex
unexplored edge
discovery edge
back edge
A
A
B
F
D
C
A(A) = {B, C, D, E}
A(C) = {A, B, D, E}
E
G
A(C) = {A, B, D, E}
A(C) = {A, B, D, E}
36
Example (cont.)
A(C) = {A, B, D, E}
A
B
F
A
B
F
A(D) = {A, C}
D
Graphs
A(D) = {A, C}
A(D) = {A, C}
A(E) = {A, C}
D
E
G
A(C) = {A, B, D, E}
E
G
A(E) = {A, C}
A(E) = {A, C}
18
Graphs
37
Graphs
Example (cont.)
A
A(C) = {A, B, D, E}
A(B) = {A, C, F}
A
B
F
D
C
E
G
A(F) = {B}
D
A(G) =
E
G
A(B) = {A, C, F}
A(A) = {A, B, C, D}
38
Graphs
19
Graphs
39
Graphs
DFS Algorithm
The algorithm uses a mechanism
for setting and getting labels of
vertices and edges
Algorithm DFS(G)
Input graph G
Output labeling of the edges of G
as discovery edges and
back edges
for all u G.vertices()
setLabel(u, UNEXPLORED)
for all e G.edges()
setLabel(e, UNEXPLORED)
for all v G.vertices()
if getLabel(v) = UNEXPLORED
DFS(G, v)
Algorithm DFS(G, v)
Input graph G and a start vertex v of G
Output labeling of the edges of G
in the connected component of v
as discovery edges and back edges
setLabel(v, VISITED)
for all e G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
DFS(G, w)
else
setLabel(e, BACK)
40
Graphs
C
E
D
F
20
Graphs
41
Graphs
Properties of DFS
Property 1
v1
A
Property 2
v2
42
Analysis of DFS
Graphs
D
C
E
G
21
Graphs
43
Analysis of DFS
DFS runs in O(n + m) time
provided the graph is
represented by the adjacency
list structure
Recall that v deg(v) = 2m
Algorithm DFS(G)
Input graph G
Output labeling of the edges of G
as discovery edges and
back edges
for all u G.vertices()
O(n)
setLabel(u, UNEXPLORED)
for all e G.edges()
O(m)
setLabel(e, UNEXPLORED)
for all v G.vertices() O(n +m)
if getLabel(v) = UNEXPLORED
DFS(G, v)
Graphs
Algorithm DFS(G, v)
Input graph G and a start vertex v of G
Output labeling of the edges of G
in the connected component of v
as discovery edges and back edges
setLabel(v, VISITED)
for all e G.incidentEdges(v) O(deg(v))
if getLabel(e) = UNEXPLORED
w opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
DFS(G, w)
else
setLabel(e, BACK)
44
Graphs
Path Finding
We can specialize the DFS
algorithm to find a path
between two given
vertices u and z using the
template method pattern
We call DFS(G, u) with u
as the start vertex
We use a stack S to keep
track of the path between
the start vertex and the
current vertex
As soon as destination
vertex z is encountered,
we return the path as the
contents of the stack
Algorithm pathDFS(G, v, z)
setLabel(v, VISITED)
S.push(v)
if v = z
return S.elements()
for all e G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
S.push(e)
pathDFS(G, w, z)
S.pop(e)
else
setLabel(e, BACK)
S.pop(v)
22
Graphs
45
Graphs
Cycle Finding
Algorithm cycleDFS(G, v, z)
setLabel(v, VISITED)
S.push(v)
for all e G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w opposite(v,e)
S.push(e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
pathDFS(G, w, z)
S.pop(e)
else
T new empty stack
repeat
o S.pop()
T.push(o)
until o = w
return T.elements()
S.pop(v)
46
Breadth-First Search
L0
L1
L2
CGraphs
E
D
F
23
Graphs
47
Graphs
Example
Properties
Analysis
Applications
48
Graphs
Breadth-First Search
Breadth-first search
(BFS) is a general
technique for traversing
a graph
A BFS traversal of a
graph G
Visits all the vertices and
edges of G
Determines whether G is
connected
Computes the connected
components of G
Computes a spanning
forest of G
24
Graphs
49
Graphs
Example
L0
unexplored vertex
visited vertex
unexplored edge
discovery edge
cross edge
A
A
L0
L1
L1
L0
C
E
L1
L1
A
A
L0
C
E
L0
L1
L2
L1
L0
C
E
D
F
L1
50
unexplored edge
discovery edge
cross edge
A
C
E
D
F
L2
unexplored vertex
visited vertex
L2
Example (cont.)
Graphs
L0
C
E
C
E
D
F
25
Graphs
A
A
Graphs
Example (cont.)
L0
L1
L2
L0
L1
C
E
L1
L2
unexplored edge
discovery edge
cross edge
C
E
D
F
L2
L0
51
unexplored vertex
visited vertex
C
E
D
F
52
BFS Algorithm
The algorithm uses a
mechanism for setting and
getting labels of vertices
and edges
Algorithm BFS(G)
Input graph G
Output labeling of the edges
and partition of the
vertices of G
for all u G.vertices()
setLabel(u, UNEXPLORED)
for all e G.edges()
setLabel(e, UNEXPLORED)
for all v G.vertices()
if getLabel(v) = UNEXPLORED
BFS(G, v)
Graphs
Algorithm BFS(G, s)
L0 new empty sequence
L0.insertLast(s)
setLabel(s, VISITED)
i0
while Li.isEmpty()
Li +1 new empty sequence
for all v Li.elements()
for all e G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
setLabel(w, VISITED)
Li +1.insertLast(w)
else
setLabel(e, CROSS)
i i +1
26
Graphs
53
Graphs
Properties
Notation
Property 1
Property 2
Property 3
L0
L1
C
F
L2
C
E
D
F
54
Analysis
Graphs
27
Graphs
55
Graphs
Applications
Using the template method pattern, we can
specialize the BFS traversal of a graph G to
solve the following problems in O(n + m) time
56
Graphs
DFS
BFS
Shortest paths
Biconnected components
L0
A
B
C
E
D
F
DFS
L1
L2
C
E
D
F
BFS
28
Graphs
57
Graphs
w is an ancestor of v in the
tree of discovery edges
L0
A
B
C
E
D
F
DFS
L1
L2
C
E
D
F
BFS
29