Lecture11_DS-Graph
Lecture11_DS-Graph
Introduction to graphs
2024/12/17 BIT-2304 1
Graphs
2024/12/17 CS201 2
What is a graph?
• Graphs represent the relationships among data
items
• A graph G consists of
– a set V of nodes (vertices)
– a set E of edges: each edge connects two nodes
• Each node represents an item
• Each edge represents the relationship between
two items
node
edge
2024/12/17 BIT-2304 3
Examples of graphs
Molecular Structure Computer Network
H Server 1 Terminal 1
H C H
Terminal 2
H Server 2
2024/12/17 BIT-2304 4
Formal Definition of graph
• The set of nodes is denoted as V
• For any nodes u and v, if u and v are
connected by an edge, such edge is denoted
as (u, v) v
(u, v)
u
• The set of edges is denoted as E
• A graph G is defined as a pair (V, E)
2024/12/17 BIT-2304 5
Adjacent
• Two nodes u and v are said to be adjacent
if (u, v) E
v
(u, v)
u w
u and v are adjacent
v and w are not adjacent
2024/12/17 BIT-2304 6
Path and simple path
• A path from v1 to vk is a sequence of
nodes v1, v2, …, vk that are connected by
edges (v1, v2), (v2, v3), …, (vk-1, vk)
• A path is called a simple path if every node
appears at most once.
v2 v
v1 3
v4 v5
This is a connected graph because there exists path
between every pair of nodes
2024/12/17 BIT-2304 9
Example of disconnected graph
v1 v3 v7 v8
v2
v4 v5
v6 v9
2024/12/17 BIT-2304 10
Connected component
• If a graph is disconnect, it can be partitioned into
a number of graphs such that each of them is
connected. Each such graph is called a
connected component.
v2 v7 v8
v1 v3
v4 v5
v6 v9
2024/12/17 BIT-2304 11
Complete graph
• A graph is complete if each pair of distinct
nodes has an edge
2024/12/17 BIT-2304 12
Subgraph
• A subgraph of a graph G =(V, E) is a graph
H = (U, F) such that U V and
F E.
v2 v2
v1 v3 v3
v4 v5 v4 v5
G H
2024/12/17 BIT-2304 13
Weighted graph
• If each edge in G is assigned a weight, it is
called a weighted graph
3500
2000
Houston
2024/12/17 BIT-2304 14
Directed graph (digraph)
• All previous graphs are undirected graph
• If each edge in E has a direction, it is called a directed
edge
• A directed graph is a graph where every edges is a
directed edge
Chicago 1000 New York
Directed edge
2000 3500
Houston
2024/12/17 BIT-2304 15
More on directed graph
x y
2024/12/17 BIT-2304 16
Multigraph
• A graph cannot have duplicate edges.
• Multigraph allows multiple edges and self
edge (or loop).
2024/12/17 BIT-2304 17
Property of graph
• A undirected graph that is connected and
has no cycle is a tree.
• A tree with n nodes have exactly n-1
edges.
• A connected undirected graph with n
nodes must have at least n-1 edges.
2024/12/17 BIT-2304 18
Implementing Graph
• Adjacency matrix
– Represent a graph using a two-dimensional
array
• Adjacency list
– Represent a graph using n linked lists where
n is the number of vertices
2024/12/17 BIT-2304 19
Adjacency matrix for directed graph
Matrix[i][j] = 1 if (vi, vj)E 1 2 3 4 5
0 if (vi, vj)E
v 1 v2 v 3 v4 v5
v2 1 v1 0 1 0 0 0
v1 v3 2 v 0 0 0 1 0
2
3 v3 0 1 0 1 0
v4 v5 4 v 4 0 0 0 0 0
5 v5 0 0 1 1 0
G
2024/12/17 BIT-2304 20
Adjacency matrix for weighted
undirected graph
Matrix[i][j] = w(vi, vj) if (vi, vj)E or (vj, vi)E
∞ otherwise
1 2 3 4 5
v2 v1 v2 v3 v4 v5
v1 2 v3
5 1 v1 ∞ 5 ∞ ∞ ∞
4 3 7 2 v2 5 ∞ 2 4 ∞
v4
8 v5 3 v3 0 2 ∞ 3 7
4 v4 ∞ 4 3 ∞ 8
G
5 v5 ∞ ∞ 7 8 ∞
2024/12/17 BIT-2304 21
Adjacency list for directed graph
1 v1 → v2
v2 2 v2 → v4
v1 v3
3 v3 → v2 → v4
4 v4
v4 v5
5 v5 → v3 → v4
G
2024/12/17 BIT-2304 22
Adjacency list for weighted
undirected graph
v2
v1 2 v3 1 v1 → v2(5)
5
4 2 v2 → v1(5) → v3(2) → v4(4)
3 7
3 v3 → v2(2) → v4(3) → v5(7)
v4
8 v5 4 v4 → v2(4) → v3(3) → v5(8)
5 v5 → v3(7) → v4(8)
G
2024/12/17 BIT-2304 23
Pros and Cons
• Adjacency matrix
– Allows us to determine whether there is an
edge from node i to node j in O(1) time
• Adjacency list
– Allows us to find all nodes adjacent to a given
node j efficiently
– If the graph is sparse, adjacency list requires
less space
2024/12/17 BIT-2304 24
Problems related to Graph
• Graph Traversal
• Topological Sort
• Spanning Tree
• Minimum Spanning Tree
• Shortest Path
2024/12/17 BIT-2304 25
Graph Traversal Algorithm
• To traverse a tree, we use tree traversal
algorithms like pre-order, in-order, and post-
order to visit all the nodes in a tree
• Similarly, graph traversal algorithm tries to visit
all the nodes it can reach.
• If a graph is disconnected, a graph traversal that
begins at a node v will visit only a subset of
nodes, that is, the connected component
containing v.
2024/12/17 BIT-2304 26
Two basic traversal algorithms
• Two basic graph traversal algorithms:
– Depth-first-search (DFS)
• After visit node v, DFS strategy proceeds along a
path from v as deeply into the graph as possible
before backing up
– Breadth-first-search (BFS)
• After visit node v, BFS strategy visits every node
adjacent to v before visiting any other nodes
2024/12/17 BIT-2304 27
Depth-first search (DFS)
• DFS strategy looks similar to pre-order. From a given
node v, it first visits itself. Then, recursively visit its
unvisited neighbours one by one.
• DFS can be defined recursively as follows.
Algorithm dfs(v)
print v; // you can do other things!
mark v as visited;
for (each unvisited node u adjacent to v)
dfs(u);
2024/12/17 BIT-2304 28
DFS example
• Start from v3
1
v3
2
v2 v2
v1 v3
x x x 3 4
v1 v 4
v4
x x v5
5
G v5
2024/12/17 BIT-2304 29
Non-recursive version of DFS
algorithm
Algorithm dfs(v)
s.createStack();
s.push(v);
mark v as visited;
while (!s.isEmpty()) {
let x be the node on the top of the stack s;
if (no unvisited nodes are adjacent to x)
s.pop(); // blacktrack
else {
select an unvisited node u adjacent to x;
s.push(u);
mark u as visited;
}
}
2024/12/17 BIT-2304 30
Non-recursive DFS example
visit stack
v3 v3
v2
v2 v3, v2
v1 v3
v1 v3, v2, v1
x x x
backtrack v3, v2
v4 v3, v2, v4
v4
x x v5
v5 v3, v2, v4 , v5
backtrack v3, v2, v4
backtrack v3, v2
backtrack v3
G
backtrack empty
2024/12/17 BIT-2304 31
Breadth-first search (BFS)
• BFS strategy looks similar to level-order. From a
given node v, it first visits itself. Then, it visits
every node adjacent to v before visiting any
other nodes.
– 1. Visit v
– 2. Visit all v’s neigbours
– 3. Visit all v’s neighbours’ neighbours
– …
• Similar to level-order, BFS is based on a queue.
2024/12/17 BIT-2304 32
Algorithm for BFS
Algorithm bfs(v)
q.createQueue();
q.enqueue(v);
mark v as visited;
while(!q.isEmpty()) {
w = q.dequeue();
for (each unvisited node u adjacent to w) {
q.enqueue(u);
mark u as visited;
}
}
2024/12/17 BIT-2304 33
BFS example
• Start from v5 Visit Queue
(front to
1 back)
v5 v5 v5
v2 v3 empty
v1
x x
2 3 v3 v3
v3 v4
x v4 v3, v4
v4
v4x x
4
v2 v2 v4, v2
v5 v2
G 5
empty
v1 v1 v1
empty
2024/12/17 BIT-2304 34
Topological order
• Consider the prerequisite structure for courses:
b d
a
c e
• Each node x represents a course x
• (x, y) represents that course x is a prerequisite to course y
• Note that this graph should be a directed graph without cycles
(called a directed acyclic graph).
• A linear order to take all 5 courses while satisfying all prerequisites
is called a topological order.
• E.g.
– a, c, b, e, d
– c, a, b, e, d
2024/12/17 BIT-2304 35
Topological sort
• Arranging all nodes in the graph in a topological
order
Algorithm topSort
n = |V|;
for i = 1 to n {
select a node v that has no successor;
aList.add(1, v);
delete node v and its edges from the graph;
}
return aList;
2024/12/17 BIT-2304 36
Example
b d b
a a
c c
e e
1. d has no 2. Both b and e have no
successor! successor! Choose e!
Choose d!
b b
a a
a
c
3. Both b and c have 4. Only b has no 5. Choose a!
no successor! successor! The topological order
Choose c! Choose b! is a,b,c,e,d
2024/12/17 BIT-2304 37
Topological sort algorithm 2
• This algorithm is based on DFS
Algorithm topSort2
s.createStack();
for (all nodes v in the graph) {
if (v has no predecessors) {
s.push(v);
mark v as visited;
}
}
while (!s.isEmpty()) {
let x be the node on the top of the stack s;
if (no unvisited nodes are adjacent to x) { // i.e. x has no unvisited successor
aList.add(1, x);
s.pop(); // blacktrack
} else {
select an unvisited node u adjacent to x;
s.push(u);
mark u as visited;
}
}
return aList;
2024/12/17 BIT-2304 38
Spanning Tree
• Given a connected undirected graph G, a
spanning tree of G is a subgraph of G that
contains all of G’s nodes and enough of its
edges to form a tree.
v2
v1 v3
v4 v5
Spanning
tree Spanning tree is not unique!
2024/12/17 BIT-2304 39
DFS spanning tree
• Generate the spanning tree edge during the
DFS traversal.
Algorithm dfsSpanningTree(v)
mark v as visited;
for (each unvisited node u adjacent to v) {
mark the edge from u to v;
dfsSpanningTree(u);
}
2024/12/17 BIT-2304 42
Formal definition of minimum
spanning tree
• Given a connected undirected graph G.
• Let T be a spanning tree of G.
• cost(T) = eTweight(e)
• The minimum spanning tree is a spanning tree T
which minimizes cost(T)
v2
v1 2 v3
5 Minimum
4 3 spanning
7
tree
v4
8 v5
2024/12/17 BIT-2304 43
Prim’s algorithm (I)
v1 v2 v1 v2 v1 v2
5 2 v3 5 2 v3 5 2 v3
4 3 7 4 3 7 4 3 7
v4 8 v5 v4 8 v5 v4 8 v5
Start from v5, find the Find the minimum edge Find the minimum edge
minimum edge attach to v5 attach to v3 and v5 attach to v2, v3 and v5
v2 v2
v1 v1
2 v3 5 2 v3
5
4 3 7 4 3 7
8 v4 8 v5
v4 v5
Find the minimum edge
attach to v2, v3 , v4 and v5
2024/12/17 BIT-2304 44
Prim’s algorithm (II)
Algorithm PrimAlgorithm(v)
• Mark node v as visited and include it in the
minimum spanning tree;
• while (there are unvisited nodes) {
– find the minimum edge (v, u) between a visited node v
and an unvisited node u;
– mark u as visited;
– add both v and (v, u) to the minimum spanning tree;
}
2024/12/17 BIT-2304 45
Shortest path
• Consider a weighted directed graph
– Each node x represents a city x
– Each edge (x, y) has a number which represent the
cost of traveling from city x to city y
• Problem: find the minimum cost to travel from
city x to city y
• Solution: find the shortest path from x to y
2024/12/17 BIT-2304 46
Formal definition of shortest
path
• Given a weighted directed graph G.
• Let P be a path of G from x to y.
• cost(P) = ePweight(e)
• The shortest path is a path P which minimizes
cost(P)
v2
v1 2 v3
5
4 3 Shortest Path
4
v4
8 v5
2024/12/17 BIT-2304 47
Dijkstra’s algorithm
• Consider a graph G, each edge (u, v) has
a weight w(u, v) > 0.
• Suppose we want to find the shortest path
starting from v1 to any node vi
• Let VS be a subset of nodes in G
• Let cost[vi] be the weight of the shortest
path from v1 to vi that passes through
nodes in VS only.
2024/12/17 BIT-2304 48
Example for Dijkstra’s algorithm
v1 v2 2 v3
5
4 3 4
v4
8 v5
v VS cost[v1] cost[v2] cost[v3] cost[v4] cost[v5]
1 [v1] 0 5 ∞ ∞ ∞
2024/12/17 BIT-2304 49
Example for Dijkstra’s algorithm
v2
v1 2 v3
5
4 3 4
v4
8 v5
v VS cost[v1] cost[v2] cost[v3] cost[v4] cost[v5]
1 [v1] 0 5 ∞ ∞ ∞
2 v2 [v1, v2] 0 5 ∞ 9 ∞
2024/12/17 BIT-2304 50
Example for Dijkstra’s algorithm
v2
v1 2 v3
5
4 3 4
v4
8 v5
v VS cost[v1] cost[v2] cost[v3] cost[v4] cost[v5]
1 [v1] 0 5 ∞ ∞ ∞
2 v2 [v1, v2] 0 5 ∞ 9 ∞
3 v4 [v1, v2, v4] 0 5 12 9 17
2024/12/17 BIT-2304 51
Example for Dijkstra’s algorithm
v2
v1 2 v3
5
4 3 4
v4
8 v5
v VS cost[v1] cost[v2] cost[v3] cost[v4] cost[v5]
1 [v1] 0 5 ∞ ∞ ∞
2 v2 [v1, v2] 0 5 ∞ 9 ∞
3 v4 [v1, v2, v4] 0 5 12 9 17
4 v3 [v1, v2, v4, v3] 0 5 12 9 16
5 v5 [v1, v2, v4, v3, v5] 0 5 12 9 16
2024/12/17 BIT-2304 52
Dijkstra’s algorithm
Algorithm shortestPath()
n = number of nodes in the graph;
for i = 1 to n
cost[vi] = w(v1, vi);
VS = { v1 };
for step = 2 to n {
find the smallest cost[vi] s.t. vi is not in VS;
include vi to VS;
for (all nodes vj not in VS) {
if (cost[vj] > cost[vi] + w(vi, vj))
cost[vj] = cost[vi] + w(vi, vj);
}
}
2024/12/17 BIT-2304 53
Summary
• Graphs can be used to represent many real-life
problems.
• There are numerous important graph algorithms.
• We have studied some basic concepts and
algorithms.
– Graph Traversal
– Topological Sort
– Spanning Tree
– Minimum Spanning Tree
– Shortest Path
2024/12/17 BIT-2304 54