Download Document

Document related concepts
Transcript
Graphs and
Digraphs
Chapter 16
7/7/15
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
1
Chapter Contents
16.1 Directed Graphs
16.2 Searching and Traversing Digraphs
16.3 Graphs
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
2
Chapter Objectives
• Introduce directed graphs (digraphs) and
look at some of the common
implementations of them
• Study some of the algorithms for searching
and traversing digraphs
• See how searching is basic to traversals and
shortest path problems in digraphs
• Introduce undirected graphs and some of
their implementations
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
3
Graphs
• Similar to a tree
– Without a specific ordering
• Consists of a finite set of elements
– Vertices or nodes
• Together with finite set of directed
– Arcs or edges
– Connect pairs of vertices
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
4
Graphs
• Undirected
– Edges are
bidirectional
• Directed
– Edges
unidirectional
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
5
Graphs
• Formal definition
– A graph G is and ordered triplet (V, E, g)
where
• V – non-empty set of vertices (nodes)
• E – set of edges
• g – a function associating with each edge e and
unordered pair x – y of vertices, called endpoints
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
6
Directed Graphs
• Also known as Digraphs
• Applications of directed graphs
– Analyze electrical circuits
– Find shortest routes (Maps)
– Develop project schedules
7
Directed Graphs
• Trees are special kinds of directed graphs
– One of their nodes (the root) has no incoming
arc
– Every other node can be reached from the node
by a unique path
• Graphs differ from trees as ADTs
– Insertion of a node does not require a link (arc)
to other nodes … or may have multiple arcs
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
8
Directed Graphs
• A directed graph is defined as a collection of data
elements:
– Called nodes or vertices
– And a finite set of direct arcs or edges
– The edges connect pairs of nodes
• Operations include
–
–
–
–
Constructors
Inserts of nodes, of edges
Deletions of nodes, edges
Search for a value in a node, starting from a given node
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
9
Graph Representation
• Adjacency matrix representation
– for directed graph with vertices numbered
1, 2, … n
• Defined as n by n matrix named adj
• The [i,j] entry set to
• 1 (true) if vertex j is adjacent to vertex i
(there is a directed arc from i to j)
• 0 (false) otherwise
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
10
Graph Representation
columns j
rows i
1
2
3
4
5
1
0
1
1
0
1
2
0
0
1
0
0
3
0
1
0
1
0
• Entry [ 1, 5 ] set to
true
• Edge from vertex 1
to vertex 5
4
0
0
0
1
0
5
0
0
0
0
0
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
11
Graph Representation
• Weighted digraph
– There exists a "cost" or "weight" associated with
each arc
– Then that cost is entered in the adjacency matrix
• A complete graph
– has an edge between each pair of vertices
– N nodes will mean N * (N – 1) edges
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
12
What is an Adjacency Matrix?
• Also referred to as a connection matrix or
vertex matrix
• Matrix whose rows and columns represent
the graph vertices
– Values 1 or 0 depending if the two vertices are
adjacent or not
• No self cycles = all 0s on the diagonal
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
13
Basic Adjacency Matrix
Representations
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Reference:
http://mathworld.wolfram.com/AdjacencyMatrix.html
Education, Inc. All rights reserved. 0-13-140909-3
14
Adjacency Matrix
• Out-degree of ith vertex (node)
– # of edges emanating out from a vertex
– Sum of 1's (true's) in row i
• In-degree of jth vertex (node)
– # of edges emanating into a vertex
– Sum of the 1's (true's) in column j
• What is the out-degree of node 4?
• What is the in-degree of node 3?
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
15
Graph Representation
What is the out-degree of node 4?
What is the in-degree of node 3?
Out degree: i
In degree: j
columns j
rows i
1
2
3
4
5
1
0
0
0
0
0
2
1
0
1
0
0
3
1
1
0
0
0
4
0
0
1
1
0
5
1
0
0
0
0
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
16
Adjacency Matrix
• Consider the sum of the products of the pairs of
elements from row i and column j
• In general, the i, j entry of the mth power of adj,
adjm, indicates the # of paths of length m from
vertex i to vertex j
Fill in the rest
adj 2
adj
1
2
3
4
5
1
0
0
0
0
0
2
1
0
0
0
0
3
1
1
0
1
0
4
0
0
1
0
0
5
1
0
0
0
0
of adj 2
1 2 3 4 5
1
1
2
This is the number of
3
paths of length 2 from
node 1 to node 3
4
5
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
17
Adjacency Matrix
• Basically we are doing matrix multiplication
– What is adj 3?
• The value in each entry would represent
– The number of paths of length 3
– From node i to node j
• Consider the meaning of the generalization
of adj n
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
18
Adjacency Matrix
• Deficiencies in adjacency matrix
representation
– Data must be stored in
separate matrix
data =
– When there are few edges the matrix is sparse
(wasted space)
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
19
Adjacency-List Representation
• Solving problem of wasted space
– Better to use an array of pointers to linked row-lists
• This is called an
Adjacency-list
representation
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
20
Exercise #1a:
Find the adjacency matrix adj and the data matrix data for
the given digraph
Cat
1
Dog
6
Zebra
2
Bear
5
Horse
3
Rat
4
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
21
Exercise #1a Solution
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
22
Exercise #1b:
Find the adjacency list adj for the given digraph
Cat
1
Dog
6
Zebra
2
Bear
5
Horse
3
Rat
4
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
23
Exercise #2: Draw the directed graph represented by
the given adjacency matrix adj and the data matrix data
0
1
0
0
0
1
1
0
1
0
0
1
0
0
0
1
0
0
0
0
0
0
1
1
0
data =
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
A
B
C
D
E
24
Exercise #2: Solution
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
25
Searching a Graph
• Recall that with a tree we search from the
root
• But with a digraph …
– may not be a vertex from which every other
vertex can be reached
– may not be possible to traverse entire digraph
(regardless of starting vertex)
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
26
Searching a Graph
• We must determine which nodes are
reachable from a given node
• Two standard methods of searching:
– Depth first search
– Breadth first search
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
27
Depth First Search
• Search “deeper in the graph whenever
possible
• Overall idea is to take the most recently
discovered vertex that has unexplored edges
and explores deeper until all have been
explored, then backtracks
• If undiscovered vertices remain, they get
selected as a new source and process is
repeated
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
28
Depth-First Search
• Start from a given vertex v
• Visit first neighbor w, of v
• Then visit first neighbor of w which has not
already been visited
• etc. … Continues until
– all nodes of graph have been examined
• If dead-end reached
– backup to last visited node
– examine remaining neighbors
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
29
Depth-First Search
• Start from node 1
• What is a sequence of nodes which would be
visited in DFS?
Click for answer
A, B, E, F, H, C, D, G
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
30
Depth-First Search
• DFS uses backtracking when necessary to
return to some values that were
– already processed or
– skipped over on an earlier pass
• When tracking this with a stack
– pop returned item from the stack
• Recursion is also a natural technique for this
task
• Note: DFS of a tree would be equivalent to a
preorder traversal
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
31
Depth-First Search
Algorithm to perform DFS search of digraph
1. Visit the start vertex, v
2. For each vertex w adjacent to v do:
If w has not been visited,
apply the depth-first search algorithm
with w as the start vertex.
Note the recursion
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
32
Breadth First Search
• Overall idea is that the “frontier” between
discovered and undiscovered vertices
expands uniformly across the breadth of the
tree
• Other algorithms use similar ideas including
Prim’s minimum spanning tree algorithm and
Dijkstra’s single source shortest path
algorithm
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
33
Breadth-First Search
•
•
•
•
Start from a given vertex v
Visit all neighbors of v
Then visit all neighbors of first neighbor w of v
Then visit all neighbors of second neighbor x
of v … etc.
• BFS visits nodes by level
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
34
Breadth-First Search
• Start from node containing A
• What is a sequence of nodes which would be
visited in BFS?
Click for answer
A, B, D, E, F, C, H, G, I
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
35
Breadth-First Search
• While visiting each node on a given level
– store it so that
– we can return to it after completing this level
– so that nodes adjacent to it can be visited
• First node visited on given level should be
First node to which we return
What data structure does this imply?
A queue
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
36
Breadth-First Search
Algorithm for BFS search of a diagraph
1. Visit the start vertex
2. Initialize queue to contain only the start vertex
3. While queue not empty do
a. Remove a vertex v from the queue
b. For all vertices w adjacent to v do:
If w has not been visited then:
i. Visit w
ii. Add w to queue
End while
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
37
Graph Traversal
Algorithm to traverse digraph must:
–
–
–
visit each vertex exactly once
BFS or DFS forms basis of traversal
Mark vertices when they have been visited
1. Initialize an array (vector) unvisited
unvisited[i] false for each vertex i
2. While some element of unvisited is false
a. Select an unvisited vertex v
b. Use BFS or DFS to visit all vertices reachable from
v
End while
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
38
Paths
• Routing problems – find an optimal path in a
network
– a shortest path in a graph/digraph
– a cheapest path in a weighted graph/digraph
• Example – a directed graph that models an
airline network
– vertices represent cities
– direct arcs represent flights connecting cities
• Task: find most direct route (least flights)
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
39
Paths
• Most direct route equivalent to
– finding length of shortest path
– finding minimum number of arcs from start vertex
to destination vertex
• Search algorithm for this shortest path
– an easy modification of the breadth-first search
algorithm
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
40
Minimum Spanning Tree (MST)
• Spans the graph G
• Connects all the vertices
– Forms a tree (spanning tree)
• Often want to find the connections with the
least weight/distance = minimum spanning
tree
• Two popular algorithms: Kruskal’s and Prim’s
– (we will only be looking at Prim’s)
Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms, Third Edition, © 2012 MIT Press
41
MST’s and Circuit Design
• Want to make pins of several components
electrically equivalent by wiring together
• Connect n pins with n-1 wires (1 wire to 2
pins)
• Best arrangement uses least amount of wire
Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms, Third Edition, © 2012 MIT Press
42
MST’s and Circuit Design (ctd)
• Model this problem with G = (V,E)
– V is the set of pins
– E is the set of possible connections btween pairs
of pins
• For each edge (u, v) ∈ E
– Have weight w(u, v) specifying the cost (amount
of wire needed) to connect u and v
• Goal is to find an acyclic subset T ⊆ E that
connects all vertices and has a total weight
𝑤 𝑇 =
𝑤(𝑢, 𝑣)
𝑢,𝑣 ∈ 𝑇
Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms, Third Edition, © 2012 MIT Press
43
Example of MST
-
Weights on the edges are shown
Edges included in the MST are shaded
Total weight = 37
Not unique
Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms, Third Edition, © 2012 MIT Press
44
Prim’s MST algorithm
• Tree starts with arbitrary root vertex r
• Grows until the tree spans all vertices in V
• Each step adds to the tree A, a light edge
that supports the MST
Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms, Third Edition, © 2012 MIT Press
45
Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms, Third Edition, © 2012 MIT
MST-Prim(G, w, r)
Press
For each u ∈ G.V
u.key = ∞
u.𝜋 = NIL
r.Key = 0
Q = G.V
While Q ≠ 0
u = EXTRACT-MIN(Q)
for each v ∈ G.Adj[u]
if v ∈ Q and w(u, v) < v.key
v. 𝜋 = u
v.key = w(u,v)
G – connected graph
V – collection of vertices
r – root
Q – contains all vertices not in the tree based on a key attribute
v.Key is the min weight of any edge connecting v to a vertex in the tree, v.key =∞ if
there is no such edge
46
v. 𝜋 names parent of v
Prim’s Algorithm Example
Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms, Third Edition, © 2012 MIT Press
47
Prim’s Algorithm Example
48
49
Dijkstra’s Algorithm
• Solves for the shortest path on a weighted
digraph (all edges must be > 0)
• Overall, two sets are maintained one containing
the vertices included in the shortest path tree,
and vertices not yet included
• Each step looks for a vertex in the “not yet
included” set that has a minimum distance to
add to the shortest path tree set
• Note: shortest path from source to all vertices in
the given graph
Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms, Third Edition, © 2012 MIT Press
50
Algorithm:
DIJKSTRA(V, E, w, s)
INIT-SINGLE-SOURCE(V, s)
S ← ∅ //Initialized to empty set
Q ← V //insert all vertices in Q, min-priority queue
while Q ≠ ∅
do u ← EXTRACT-MIN(Q)
S ← S ∪ {u}
for each vertex v ∈ Adj[u]
do RELAX(u, v, w)
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
51
View of Dijkstra’s
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
52
Exercise: Dijkstra’s Algorithm
• Create the MST using Dijkstra’s Algorithm
from the following example
Reference: http://www.geeksforgeeks.org/greedy-algorithms-set-6-dijkstras-shortest-pathalgorithm/
53
Graphs
• Like a digraph
– Except no direction is associated with the edges
– No edges joining a vertex to itself allowed
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
54
Undirected Graph Representation
• Can be represented by
– Adjacency matrices
• Adjacency matrix will
always be symmetric
– For an edge from i to j, there must be
– An edge from j to i
– Hence the entries on one side of the matrix
diagonal are redundant
• Since no loops,
– the diagonal will be all 0's
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
55
Undirected Graph Representation
• Given
• Adjacency-List
representation
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
56
Edge Lists
• Adjacency lists suffer from the same
redundancy
– undirected edge is repeated twice
• More efficient solution
– use edge lists
• Consists of a linkage of edge nodes
– one for each edge
– to the two vertices that serve as the endpoints
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
57
Edge Nodes
• Each edge node represents one edge
– vertex[1] and vertex[2] are vertices
connected by this edge
– link[1] points to another edge node having
vertex[1] as one end point
– link[2] points to another
edge node having
vertex[2] as an
endpoint
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
58
Edge List
• Vertices have
pointers to one
edge
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
59
Graph Operations
• DFS, BFS, traversal, etc. are similar as
those for digraphs
• Note class template Graph, Fig. 16.4
– Uses edge-list representation of graphs as
just described
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
60
Connectedness
• Connected defined
– A path exists from each vertex to every other
vertex
• Note the isConnected() function in Graph
class template
– Uses a DFS, marks all vertices reachable from
vertex 1
• View program in Fig. 16-5
– Exercises this function
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson
Education, Inc. All rights reserved. 0-13-140909-3
61