Data Structures and Algorithms
Graphs: An Introduction
executive summary
Graphs represent pairwise relationships between entities.
In these slides, we consider three common approaches to representing graphs: adjacency matrices, adjacency lists, and edge lists.
link to companion notes
Graphs
Model relationships between entities.
Graphs
Common graphical representation: points & lines
1
1
2
1
2
3
1
2
3
4
1
2
3
4
5
1
2
3
4
5
6
1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
Work through the exercises in the Mathigon lesson
about the Bridges of Königsberg
Graphs: Terminology
Vertices & Edges
Vertices are adjacent if there is an edge between them;
and they are the endpoints of said edge.
An edge is incident to its endpoints.
The (out)-neighbors of a vertex X are all the vertices Y such that (X,Y) is an edge.
The degree of a vertex is the number of neighbors it has.
Graphs can be...
Directed or Undirected
Vertex- and/or Edge-weighted
Simple or... not*
*graphs that are not simple are usually called multigraphs
Colored, temporal, hyper, etc.
Representing Graphs
1. Adjacency Matrix
2. Adjacency Lists
3. Edge Lists
Three popular styles.
a
c
e
b
d
f
Adjacency Matrix
a
c
e
b
d
f
a
a
b
c
d
e
f
b
c
d
e
f
Adjacency Matrix
a
c
b
f
a
a
b
c
d
f
b
c
e
f
e
d
e
d
Adjacency Matrix
a
a
b
c
d
f
b
c
e
f
e
d
0
a
c
e
b
d
f
Adjacency Matrix
c
e
d
f
a
c
d
e
f
b
c
d
e
f
a
b
0
a
b
Adjacency Matrix
a
c
e
b
d
f
a
c
d
e
f
b
c
d
e
f
a
b
0
1
Adjacency Matrix
a
c
e
b
d
f
a
c
d
e
f
b
c
d
e
f
a
b
1
1
1
1
1
1
1
1
1
1
Adjacency Matrix
a
c
e
b
d
f
a
c
d
e
f
b
c
d
e
f
a
b
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Adjacency Matrix
a
c
e
b
d
f
a
c
d
e
f
b
c
d
e
f
a
b
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Adjacency Matrix
a
c
e
b
d
f
a
c
d
e
f
b
c
d
e
f
a
b
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Adjacency List
a
c
e
b
d
f
Adjacency List
a
c
e
b
d
f
a
c
d
e
f
b
Adjacency List
e
d
f
c
d
e
f
b
c
b
b
c
a
a
Adjacency List
a
e
d
f
a
c
d
e
f
b
c
b
b
c
a
Adjacency List
a
d
e
f
b
c
b
b
c
a
a
a
d
e
e
d
f
c
Adjacency List
a
c
e
f
b
c
b
b
c
a
a
a
d
e
e
d
f
c
d
Adjacency List
a
c
d
f
b
c
b
b
c
a
a
a
d
e
e
d
f
c
c
f
e
Adjacency List
a
c
d
b
c
b
b
c
a
a
a
d
e
e
d
f
c
c
f
e
e
f
Adjacency List
a
c
d
b
c
b
b
c
a
a
a
d
e
e
d
f
c
c
f
e
e
f
Edge List
a
e
d
f
c
b
Edge List
a
e
d
f
c
b
a
b
1.
Edge List
a
e
d
f
c
b
a
b
1.
c
d
2.
Edge List
a
e
d
f
c
b
a
b
1.
c
d
2.
e
f
3.
Edge List
a
e
d
f
c
b
a
b
1.
c
d
2.
e
f
3.
a
c
4.
Edge List
a
e
d
f
c
b
a
b
1.
c
d
2.
e
f
3.
a
c
4.
c
e
5.
Edge List
a
e
d
f
c
b
a
b
1.
c
d
2.
e
f
3.
a
c
4.
c
e
5.
Official Running Times
Brilliant.
When the procedure only needs constant time.
Decent.
When the procedure always wraps up in, and sometimes needs,
time proportional to the maximum degree of the graph.
(n/m)-tolerable.
When the procedure always wraps up in, and sometimes needs,
time proportional to the number of vertices/edges in the graph.
(n/m)-painful.
When the procedure always wraps up in, and sometimes needs,
time proportional to the number of vertices/edges in the graph squared.
Adj. Matrix | Adj. List | Edge List | |
---|---|---|---|
Adding a vertex | |||
Deleting a vertex | |||
Adding an edge | |||
Deleting an edge | |||
Finding degree(v) | |||
Check if (u,v) is an edge |
Adj. Matrix | Adj. List | Edge List | |
---|---|---|---|
Adding a vertex | Painful | ||
Deleting a vertex | Painful | ||
Adding an edge | Brilliant | ||
Deleting an edge | Brilliant | ||
Finding degree(v) | Tolerable | ||
Check if (u,v) is an edge | Brilliant |
Adj. Matrix | Adj. List | Edge List | |
---|---|---|---|
Adding a vertex | Painful | Tolerable | |
Deleting a vertex | Painful | Tolerable | |
Adding an edge | Brilliant | Brilliant | |
Deleting an edge | Brilliant | Decent | |
Finding degree(v) | Tolerable | Decent | |
Check if (u,v) is an edge | Brilliant | Decent |
Adj. Matrix | Adj. List | Edge List | |
---|---|---|---|
Adding a vertex | Painful | Tolerable | Decent |
Deleting a vertex | Painful | Tolerable | Tolerable |
Adding an edge | Brilliant | Brilliant | Brilliant |
Deleting an edge | Brilliant | Decent | Tolerable |
Finding degree(v) | Tolerable | Decent | Tolerable |
Check if (u,v) is an edge | Brilliant | Decent | Tolerable |