Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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