Data Structure
MCIS 6214 - Data Structure and Algorithms Graph
MCIS 2018
Program Design Including Data Structures, Seventh Edition
1
Objectives
In this chapter, you will:
Learn about graphs
Become familiar with the basic terminology of graph theory
Discover how to represent graphs in computer memory
Explore graphs as ADTs
Examine and implement various graph traversal algorithms
Learn how to implement the shortest path algorithm
Examine and implement the minimal spanning tree algorithm
Program Design Including Data Structures, Seventh Edition
2
Introduction
Königsberg bridge problem:
The river Pregel flows around the island Kneiphof and then divides into two branches
Program Design Including Data Structures, Seventh Edition
3
Introduction (cont’d.)
Starting at one land area, can you cross all bridges exactly once and return to the start?
In 1736, Euler represented the problem as a graph and answered the question: No
Program Design Including Data Structures, Seventh Edition
4
Introduction (cont’d.)
Over the past 200 years, graph theory has been applied to a variety of problems, including:
Model electrical circuits, chemical compounds, highway maps, etc.
Analysis of electrical circuits, finding the shortest route, project planning, linguistics, genetics, social science, etc.
Program Design Including Data Structures, Seventh Edition
5
Graph Definitions and Notations
a X: a is an element of the set X
Subset (Y X): every element of Y is also an element of X
Intersection (A B): contains all the elements in A and B
A B = x | x A and x B
Union (A B): set of all the elements that are in A or in B
A B = x | x A or x B
6
Graph Definitions and Notations (cont’d.)
A B: set of all the ordered pairs of elements of A and B
A B = (a, b) | a A, b B
Graph G: G = (V, E)
V is a finite nonempty set of vertices of G
E V V
Elements in E are the pairs of elements of V
E is called set of edges
Program Design Including Data Structures, Seventh Edition
7
Graph Definitions and Notations (cont’d.)
Directed graph or digraph: elements of E(G) are ordered pairs
Undirected graph: elements not ordered pairs
If (u, v) is an edge in a directed graph
Origin: u
Destination: v
Subgraph H of G: if V(H) V(G) and E(H) E(G)
Every vertex and edge of V is in G
Program Design Including Data Structures, Seventh Edition
8
Program Design Including Data Structures, Seventh Edition
https://algs4.cs.princeton.edu/lectures/42DirectedGraphs.pdf
In mathematics, and more specifically in graph theory, a directed graph (or digraph) is a graph that is a set of vertices connected by edges, where the edges have a direction associated with them.
9
Graph Definitions and Notations (cont’d.)
Program Design Including Data Structures, Seventh Edition
10
Graph Definitions and Notations (cont’d.)
Program Design Including Data Structures, Seventh Edition
11
Graph Definitions and Notations (cont’d.)
Adjacent: there is an edge from one vertex to the other; i.e., (u, v) E(G)
Incident: if edge e = (u, v) then e is incident on u and v
Loop: edge incident on a single vertex
Parallel edges: associated with the same pair of vertices
Simple graph: has no loops or parallel edges
Program Design Including Data Structures, Seventh Edition
12
Graph Definitions and Notations (cont’d.)
Path: sequence of vertices u1, u2, ..., un such that u = u1, un = v, and (ui, ui + 1) is an edge for all i = 1, 2, ..., n − 1
Connected vertices: there is a path from u to v
Simple path: path in which all vertices, except possibly the first and last, are distinct
Cycle: simple path in which the first and last vertices are the same
Program Design Including Data Structures, Seventh Edition
13
Graph Definitions and Notations (cont’d.)
Connected: path exists from any vertex to any other vertex
Component: maximal subset of connected vertices
In a connected graph G, if there is an edge from u to v, i.e., (u, v) E(G), then u is adjacent to v and v is adjacent from u
Strongly connected: any two vertices in G are connected
Program Design Including Data Structures, Seventh Edition
14
Graph Representation
To write programs that process and manipulate graphs
Must store graphs in computer memory
A graph can be represented in several ways:
Adjacency matrices
Adjacency lists
Program Design Including Data Structures, Seventh Edition
15
Adjacency Matrix
G: graph with n vertices (n 0)
V(G) = v1, v2, ..., vn
Adjacency matrix (AG of G): two-dimensional n n matrix such that:
Adjacency matrix of an undirected graph is symmetric
Program Design Including Data Structures, Seventh Edition
16
Adjacency Lists
G: graph with n vertices (n 0)
V(G) = v1, v2, ..., vn
Linked list corresponding to each vertex, v,
Each node of linked list contains the vertex, u, such that (u,v) E(G)
Each node has two components, such as vertex and link
Program Design Including Data Structures, Seventh Edition
17
Program Design Including Data Structures, Seventh Edition
18
Adjacency Lists (cont’d.)
Program Design Including Data Structures, Seventh Edition
19
Operations on Graphs
Operations commonly performed on a graph:
Create the graph
Clear the graph
Makes the graph empty
Determine whether the graph is empty
Traverse the graph
Print the graph
Program Design Including Data Structures, Seventh Edition
20
Operations on Graphs (cont’d.)
The adjacency list (linked list) representation:
For each vertex, v, vertices adjacent to v are stored in linked list associated with v
In a directed graph, vertices adjacent to v are called immediate successors
To manage data in a linked list, use class unorderedLinkedList
Program Design Including Data Structures, Seventh Edition
21
Graphs as ADTs
We implement graphs as an abstract data type (ADT), including functions to:
Create/clear the graph
Print the graph
Traverse the graph
Determine the graph’s size
Program Design Including Data Structures, Seventh Edition
22
Graph Traversals
Traversing a graph is similar to traversing a binary tree, except that:
A graph might have cycles
Might not be able to traverse the entire graph from a single vertex
Most common graph traversal algorithms:
Depth first traversal
Breadth first traversal
Program Design Including Data Structures, Seventh Edition
23
Depth First Traversal
Depth first traversal at a given node, v:
Mark node v as visited
Visit the node
for each vertex u adjacent to v
if u is not visited
start the depth first traversal at u
This is a recursive algorithm
Program Design Including Data Structures, Seventh Edition
24
Depth First Traversal (cont’d.)
Depth-first ordering of vertices:
0, 1, 4, 3, 2, 5, 7, 8, 6, 9
Breadth-first ordering of vertices:
0, 1, 3, 4, 2, 5, 7, 8, 6, 9
Program Design Including Data Structures, Seventh Edition
25
Breadth First Traversal
Breadth first traversal of a graph
Similar to traversing a binary tree level by level
Nodes at each level are visited from left to right
Starting at the first vertex, the graph is traversed as much as possible
Then go to next vertex not yet visited
Use a queue to implement the breadth first search algorithm
Program Design Including Data Structures, Seventh Edition
26
Shortest Path Algorithm
Weight of the edge: nonnegative real number assigned to the edges connecting two vertices
Weighted graph: every edge has a nonnegative weight
Weight of the path P
Sum of the weights of all edges on the path P
Also called the weight of v from u via P
Source: starting vertex in the path
Program Design Including Data Structures, Seventh Edition
27
Shortest Path Algorithm (cont’d.)
Shortest path: path with the smallest weight
Shortest path algorithm
Called the greedy algorithm, developed by Dijkstra
G: graph with n vertices, where n ≥ 0
V(G) = {v1, v2, ..., vn}
W: two-dimensional n × n matrix
Program Design Including Data Structures, Seventh Edition
28
Shortest Path Algorithm (cont’d.)
Shortest path algorithm:
Program Design Including Data Structures, Seventh Edition
29
Shortest Path Algorithm (cont’d.)
Program Design Including Data Structures, Seventh Edition
30
Shortest Path Algorithm (cont’d.)
Program Design Including Data Structures, Seventh Edition
31
Shortest Path Algorithm (cont’d.)
Graph after first iteration of Steps 3, 4, and 5
Program Design Including Data Structures, Seventh Edition
32
Shortest Path Algorithm (cont’d.)
Graph after second iteration of Steps 3, 4, and 5
Program Design Including Data Structures, Seventh Edition
33
Shortest Path Algorithm (cont’d.)
Graph after third iteration of Steps 3, 4, and 5
Program Design Including Data Structures, Seventh Edition
34
Shortest Path Algorithm (cont’d.)
Graph after fourth iteration of Steps 3, 4, and 5
Program Design Including Data Structures, Seventh Edition
35
Minimal Spanning Tree
Company needs to shut down a maximum number of connections and still be able to fly from one city to another
Program Design Including Data Structures, Seventh Edition
36
Minimal Spanning Tree (cont’d.)
Program Design Including Data Structures, Seventh Edition
37
Minimal Spanning Tree (cont’d.)
(Free) tree: simple graph such that if u and v are two vertices in T, then there is a unique path from u to v
Rooted tree: tree in which a particular vertex is designated as a root
Weighted tree: tree in which a weight is assigned to the edges
Weight of T: sum of the weights of all the edges in T, denoted by W(T)
Program Design Including Data Structures, Seventh Edition
38
Minimal Spanning Tree (cont’d.)
Spanning tree of graph G: if T is a subgraph of G such that V(T) = V(G)
All the vertices of G are in T
Figure 20-14 shows three spanning trees of the graph shown in Figure 20-13
Theorem: a graph G has a spanning tree if and only if G is connected
Minimal spanning tree: spanning tree in a weighted graph with the minimum weight
Program Design Including Data Structures, Seventh Edition
39
Minimal Spanning Tree (cont’d.)
Two well-known algorithms to find a minimal spanning tree:
Kruskal’s algorithm
Prim’s algorithm
Builds the tree iteratively by adding edges until a minimal spanning tree is obtained
Start with a designated vertex, called the source vertex
At each iteration, a new edge that does not complete a cycle is added to the tree
Program Design Including Data Structures, Seventh Edition
40
Minimal Spanning Tree (cont’d.)
Program Design Including Data Structures, Seventh Edition
41
Prim’s Algorithm to Find a Minimal Spanning Tree
Program Design Including Data Structures, Seventh Edition
42
Prim’s Algorithm to Find a Minimal Spanning Tree (cont’d.)
Program Design Including Data Structures, Seventh Edition
43
Summary
A graph G is a pair, G = (V, E)
In an undirected graph G = (V, E), the elements of E are unordered pairs
In a directed graph G = (V, E), the elements of E are ordered pairs
H is a subgraph of G if every vertex of H is a vertex of G and every edge is an edge in G
Two vertices in an undirected graph are adjacent if there is an edge between them
Program Design Including Data Structures, Seventh Edition
44
Summary (cont’d.)
Loop: an edge incident on a single vertex
Simple graph: no loops and no parallel edges
Simple path: all the vertices, except possibly the first and last vertices, are distinct
Cycle: a simple path in which the first and last vertices are the same
An undirected graph is connected if there is a path from any vertex to any other vertex
Program Design Including Data Structures, Seventh Edition
45
Summary (cont’d.)
Shortest path algorithm gives the shortest distance for a given node to every other node in the graph
In a weighted graph, every edge has a nonnegative weight
A tree in which a particular vertex is designated as a root is called a rooted tree
A tree T is called a spanning tree of graph G if T is a subgraph of G such that V(T) = V(G)
Program Design Including Data Structures, Seventh Edition
46