Graphs
SFO
LAX
© 2010 Goodrich, Tamassia
Graphs
ORD
DFW
1
Graphs
way of representing relationships that exist between pairs of objects
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
DUB
PSH
LHR
ISB
HNL
© 2010 Goodrich, Tamassia
SHR
KHR
QTA
Edge Types
Directed edge
unordered pair of vertices (u,v)
e.g., a flight route
ISB
849
miles
LHR
all the edges are directed
e.g., route network
Undirected graph
LHR
Directed graph
ISB
flight
AA 1206
Undirected edge
ordered pair of vertices (u,v)
first vertex u is the origin
second vertex v is the destination
e.g., a flight
all the edges are undirected
e.g., flight network
Mixed graph
Combination of directed and undirected graph
© 2010 Goodrich, Tamassia
Graphs
3
Applications
cslab1a
cslab1b
General
math.brown.edu
Social networks
Google map
Electronic Circuits
cs.brown.edu
Transportation networks
Highway network
Flight network
brown.edu
qwest.net
att.net
Computer networks
Local area network
Internet
Web
cox.net
John
Paul
David
Databases
Entity-relationship diagram
Graphs
© 2010 Goodrich, Tamassia
4
Terminology
End vertices (or endpoints) of an edge
Edges incident on a vertex
U
X has degree 5
h and i are parallel edges
d
Graphs
h
X
e
j
Z
i
g
f
j is a self-loop
© 2010 Goodrich, Tamassia
b
W
Self-loop
V
c
Parallel edges
U and V are adjacent
Degree of a vertex
a
a, d, and b are incident on V
Adjacent vertices
U and V are the endpoints of a
Y
5
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
Examples
path such that all its vertices and edges are
a
distinct
U
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
c
not simple
Simple Graph
No parallel edges or self-loops
edges of a simple graph are a et of vertex pairs
(and not just a collection).
© 2010 Goodrich, Tamassia
Graphs
V
b
d
P2
P1
X
e
W
h
g
f
Y
6
Z
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
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
© 2010 Goodrich, Tamassia
U
c
Examples
a
Graphs
V
b
d
C2
X
e
C1
g
W
f
h
Z
Y
7
Properties
Property 1
Notation
Sv deg(v) = 2m
Proof: each edge is counted
twice
Property 2
In an undirected simple graph
m n (n - 1)/2
Proof: each vertex has degree
at most (n - 1)
© 2010 Goodrich, Tamassia
Graphs
n
m
deg(v)
number of vertices
number of edges
degree of vertex v
Example
n = 4
m = 6
deg(v) = 3
8
Main Methods of the Graph ADT
As an ADT, a graph is a collection of elements that are stored at the
graph’s positions—its vertices and edges
Vertic v: *v: reference to element associated with vertex v
Edge e: *e: reference to element associated with edge e
Access methods
e.endVertices():
e.opposite(v):
true if u and v are adjacent
Test whether e is incident on v.
incidentEdges(v):
list of edges incident to v
vertices():
© 2010 Goodrich, Tamassia
remove edge e
Iterable collection methods
Graphs
remove vertex v (and its incident edges)
eraseEdge(e):
e.isIncidentOn(v):
insert an edge (v,w) storing element o
eraseVertex(v):
u.isAdjacentTo(v):
insert a vertex storing element o
insertEdge(v, w, o):
the vertex opposite of v on e
insertVertex(o):
a list of the two endvertices of e
Update methods
list of all vertices in the graph
edges():
list of all edges in the graph
9
Data Structures for graphs
Graph Representation
Edge List
Adjacency List
Adjacency Matrix
© 2010 Goodrich, Tamassia
Graphs
10
Edge List Structure
element
reference to position in
vertex sequence
element
origin vertex object
destination vertex object
reference to position in edge
sequence
Vertex sequence
v
u
Unsorted
Space O(n)
b
d
w
z
z
w
v
a
Edge sequence
c
sequence of vertex objects
a
Edge object
u
Vertex object
b
c
d
sequence of edge objects
Unsorted
Space O(m)
© 2010 Goodrich, Tamassia
Graphs
11
Edge List Structure
Advantages
easy to implement
e.endVertices()
Disadvantages
Have to examine the entire edge sequence O(m) for the
following operations
v.incidentEdges()
v.isAdjacentTo(w)
eraseVertix(v)
© 2010 Goodrich, Tamassia
Graphs
12
How to Improve Edge List
Structure?
The problem with edge list structure
v.incidentEdges() takes O(m)
Each vertex does not know which edges are incident on it
Solution: put p pointers (reference) from each vertex
to the edge object incident on this vertex
Each vertex can have lots of edges incident on it
Thus we need a sequence of incident vertices
this sequence is called Adjacency List, because it’s usually
implemented as a list
u
a
v
c
b
w
© 2010 Goodrich, Tamassia
d
z
Graphs
13
Adjacency List Structure
Edge list structure
Incidence sequence for each
vertex I(u):
sequence of references to
edge objects of incident
edges
Example: I(v) consists of
References to edges a and b
Augmented edge objects:
references to associated
positions in incidence
sequences of end vertices
Example: Edge b has references
to associated positions in I(w)
and I(v)
© 2010 Goodrich, Tamassia
Graphs
14
Adjacency List Structure
Complexity
Space Complexity
Vertex sequence: O(n)
Edge sequence: O(m)
Adjacency lists: O(Σv deg(v) ) = 2m = O(m)
For vertex v, O(deg(v)) for the adjacency list of v.
Thus total space is O(n + m)
© 2010 Goodrich, Tamassia
Graphs
15
Adjacency List Structure
Complexity
Time Complexity
© 2010 Goodrich, Tamassia
Graphs
16
Adjacency List Structure
Advantages:
adjacency list structure provides improved running
times for the following functions:
Method v.incidentEdges() takes time proportional to the
number of incident vertices of v, that is, O(deg(v))
time.
Method v.isAdjacentTo(w) can be performed by inspecting
either the incidence collection of v or that of w.
By choosing the smaller of the two, we get O(min(deg(v),deg(w)))
running time.
Method eraseVertex(v) takes O(deg(v)) time.
Disadvantages:
Implementation complexity
© 2010 Goodrich, Tamassia
Graphs
17
Adjacency Matrix Structure
Edge list structure
Augmented vertex objects (V)
2D-array adjacency array (A)
Integer key (index) associated
with vertex
two-dimensional n × n array A
A[i, j] holds a reference to the
edge (v,w), where v is the vertex
with index i and w is the vertex
with index j. if it exists, If there is
no such edge, then A[i, j] = null.
Cost adjacency matrix
Weighted graphs
Directed graphs
Undirected graphs
© 2010 Goodrich, Tamassia
Graphs
18
Adjacency Matrix Structure
Complexity:
Space: O(n2)
Time:
© 2010 Goodrich, Tamassia
Graphs
19
Graph Data Structures: Performance
n vertices, m edges
no parallel edges
no self-loops
Edge
List
Adjacency
List
Adjacency
Matrix
Space
n+m
n+m
n2
v.incidentEdges()
m
deg(v)
n
u.isAdjacentTo (v)
m
min(deg(v), deg(w))
1
insertVertex(o)
1
1
n2
insertEdge(v, w, o)
1
1
1
eraseVertex(v)
m
deg(v)
eraseEdge(e)
1
1
n2
1
© 2010 Goodrich, Tamassia
Graphs
20
Summary of Graph Data Structures
Edge list structure
To be used only out of laziness
Any lazy Student here ?
It’s a good starting point (as well as part of) for the other data structures
Adjacency list
Why did we study it?
Good performance for any graph
Most complicated to implement
2D adjacency array, to be used when:
Good choice only for dense graphs (m is O(n2), that is it has a lot of edges)
And used only in case when the set of vertices stays fixed (no vertex
insertion or deletion)
In cases when the above 2 conditions hold, adjacency array is the best
choice
© 2010 Goodrich, Tamassia
Graphs
21