Data Structures & Algorithms

Slides:



Advertisements
Similar presentations
Topological Sort Topological sort is the list of vertices in the reverse order of their finishing times (post-order) of the depth-first search. Topological.
Advertisements

© 2006 Pearson Addison-Wesley. All rights reserved14 A-1 Chapter 14 excerpts Graphs (breadth-first-search)
© 2005 Pearson Education, Inc., Upper Saddle River, NJ. All rights reserved. Data Structures for Java William H. Ford William R. Topp Chapter 24 Graphs.
Graphs Graphs are the most general data structures we will study in this course. A graph is a more general version of connected nodes than the tree. Both.
Algoritma Traversal Graph. Graph Traversal Algorithms In general, graphs do not have a vertex, like a root, that initiates unique paths to each of the.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Graphs.
Spring 2010CS 2251 Graphs Chapter 10. Spring 2010CS 2252 Chapter Objectives To become familiar with graph terminology and the different types of graphs.
Review of Graphs A graph is composed of edges E and vertices V that link the nodes together. A graph G is often denoted G=(V,E) where V is the set of vertices.
C o n f i d e n t i a l HOME NEXT Subject Name: Data Structure Using C Unit Title: Graphs.
© 2005 Pearson Education, Inc., Upper Saddle River, NJ. All rights reserved. Data Structures for Java William H. Ford William R. Topp Chapter 25 Graph.
© 2006 Pearson Addison-Wesley. All rights reserved14 A-1 Chapter 14 Graphs.
Chapter 14 Graphs. © 2004 Pearson Addison-Wesley. All rights reserved Terminology G = {V, E} A graph G consists of two sets –A set V of vertices,
Graph. Terminologi Graph A graph consists of a set of vertices V, along with a set of edges E that connect pairs of vertices. – An edge e = (vi,vj) connects.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Graphs.
Common final examinations When: Wednesday, 12/11, 3:30-5:30 PM Where: Ritter Hall - Walk Auditorium 131 CIS 1166 final When: Wednesday, 12/11, 5:45-7:45.
Elementary Graph Algorithms CLRS Chapter 22. Graph A graph is a structure that consists of a set of vertices and a set of edges between pairs of vertices.
Data Structures & Algorithms Graphs. Graph Terminology A graph consists of a set of vertices V, along with a set of edges E that connect pairs of vertices.
Graphs. Definitions A graph is two sets. A graph is two sets. –A set of nodes or vertices V –A set of edges E Edges connect nodes. Edges connect nodes.
GRAPHS. Chapter Objectives  To become familiar with graph terminology and the different types of graphs  To study a Graph ADT and different implementations.
Graphs A graphs is an abstract representation of a set of objects, called vertices or nodes, where some pairs of the objects are connected by links, called.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Chapter 13: Graphs Data Abstraction & Problem Solving with C++
1 Directed Graphs Chapter 8. 2 Objectives You will be able to: Say what a directed graph is. Describe two ways to represent a directed graph: Adjacency.
COSC 2007 Data Structures II
© 2006 Pearson Addison-Wesley. All rights reserved 14 A-1 Chapter 14 Graphs.
90-723: Data Structures and Algorithms for Information Processing Copyright © 1999, Carnegie Mellon. All Rights Reserved. 1 Lecture 7: Graphs Data Structures.
Main Index Contents 11 Main Index Contents Graph Categories Graph Categories Example of Digraph Example of Digraph Connectedness of Digraph Connectedness.
Lecture #13. Topics 1.The Graph Abstract Data Type. 2.Graph Representations. 3.Elementary Graph Operations.
Podcast Ch24c Title: Breadth First Search
CSE 373, Copyright S. Tanimoto, 2002 Graphs 2 -
Graphs Chapter 15 introduces graphs which are probably the most general and commonly-used data structure. This lecture introduces heaps, which are used.
Elementary Graph Algorithms
Chapter 22 Elementary Graph Algorithms
CS212: Data Structures and Algorithms
Podcast Ch24d Title: Depth First Search and Acyclic Graphs
Unit 10 Graphs (1) King Fahd University of Petroleum & Minerals
Data Structures Graphs - Terminology
Data Structures 13th Week
Csc 2720 Instructor: Zhuojun Duan
Common final examinations
CS202 - Fundamental Structures of Computer Science II
Graph Algorithms Using Depth First Search
Data Structures and Algorithms for Information Processing
CMSC 341 Lecture 21 Graphs (Introduction)
Data Structures for Java William H. Ford William R. Topp
Graphs Graph transversals.
Graphs A graph G = (V, E) V = set of vertices, E = set of edges
Intro to Graph Algorithms (Slides originally created by David Luebke)
Graph & BFS.
Graphs Chapter 11 Objectives Upon completion you will be able to:
Search Related Algorithms
What is a Graph? a b c d e V= {a,b,c,d,e} E= {(a,b),(a,c),(a,d),
Chapter 22: Elementary Graph Algorithms
Podcast Ch25d Title: Minimum Path Algorithm
Chapter 11 Graphs.
Chapter 15 Graphs © 2006 Pearson Education Inc., Upper Saddle River, NJ. All rights reserved.
Chapter 14 Graphs © 2006 Pearson Addison-Wesley. All rights reserved.
Podcast Ch25c Title: Shortest Path Algorithm
Graphs Chapter 7 Visit for more Learning Resources.
Graph Implementation.
Graphs G = (V, E) V are the vertices; E are the edges.
CE 221 Data Structures and Algorithms
GRAPHS G=<V,E> Adjacent vertices Undirected graph
Chapter 16 1 – Graphs Graph Categories Strong Components
CE 221 Data Structures and Algorithms
Chapter 14 Graphs © 2011 Pearson Addison-Wesley. All rights reserved.
Elementary Graph Algorithms
CSC 325: Algorithms Graph Algorithms David Luebke /24/2019.
Podcast Ch24b Title: Strongly Connected Components
INTRODUCTION A graph G=(V,E) consists of a finite non empty set of vertices V , and a finite set of edges E which connect pairs of vertices .
GRAPH TRAVERSAL.
Presentation transcript:

Data Structures & Algorithms Graphs

Graph Terminology A graph consists of a set of vertices V, along with a set of edges E that connect pairs of vertices. An edge e = ( vi , vj ) connects vertices vi and vj. A self-loop (or a loop) is an edge that connects a vertex to itself. Vertices = {v1, v2, v3, …, vm} Edges = {e1, e2, e3, …, en}

Graph Terminology (continued) The degree of a vertex is the number of edges originating at the vertex. Two vertices in a graph are adjacent (neighbors) if there is an edge connecting the vertices. A path between vertices v and w is a series of edges leading from v to w. The path length is the number of edges in the path.

Graph Terminology (continued) A path is simple if all its edges are distinct. A cycle is a simple path that starts and ends on the same vertex.

Graph Terminology (continued) A graph is connected if there is a path between any pair of distinct vertices. A complete graph is a connected graph in which each pair of vertices is linked by an edge.

Graph Terminology (continued)

Graph Terminology (continued) A graph described until now is termed an undirected graph. Movement between vertices can occur in either direction. That is, a graph with edge (v, w), w is adjacent to v and v is adjacent to w. In a digraph, edges have a direction. There might be an edge from v to w but no edge from w to v.

Graph Terminology (continued)

Graph Terminology (continued) In a digraph, a directed path connecting vertices vs and ve is a sequence of directed edges that begin at vs and end at ve. The number of the edges that emanate from a vertex v is called the out-degree of the vertex. The number of the edges that terminate in vertex v is the in-degree of the vertex.

Graph Terminology (continued) A digraph is strongly connected if there is a path from any vertex to any other vertex. The digraph is weakly connected if, for each pair of vertices vi and vj, there is either a path P(vi, vj) or a path P(vj,vi).

Graph Terminology (continued)

Graph Terminology (concluded) An acyclic graph has no cycles. Each edge in a weighted digraph, has a cost associated with traversing the edge.

Graph Implementation: Adjacency Matrix 13 Main Index Contents Graph Implementation: Adjacency Matrix An m by m matrix, called an adjacency matrix, identifies the edges. An entry in row i and column j corresponds to the edge e = (v,, vj). Its value is the weight of the edge, or -1 if the edge does not exist. © 2005 Pearson Education, Inc., Upper Saddle River, NJ. All rights reserved.

adjacency matrix One simple way is to use a two- dimensional array (adjacency matrix representation). If vertices are numbered starting at 1, A[u][v]=true if (u, v) є E. Space requirement is Θ(|V|2). If the graph is not dense (sparse), adjacency lists may be used. The space requirement is O(|E|+|V|). 14

15 Adjacency List

Another Representation of Graphs in Adjacency lists (Textbook, Weiss)

Graph Traversal Algorithms In general, graphs do not have a vertex, like a root, that initiates unique paths to each of the vertices. From any starting vertex in a graph, it might not be possible to search all of the vertices. A graph could have a cycle that results in multiple visits to a vertex.

2 Major Traversal Algorithms Breadth-first search visits vertices in the order of their path length from a starting vertex. It may not visit every vertex of the graph Depth-first search traverses all the vertices of a graph by making a series of recursive calls that follow paths through the graph.

Processing the Traversal To simplify the search graph algorithms discern (capture) the state of a vertex during the algorithm by using the colours WHITE, GRAY, and BLACK.

Breadth-First Traversal Process and mark the starting vertex and place it in a queue Remove a vertex (v) from the front of the queue For each unmarked neighbor (u) of v: Process u, mark u, and place u in the queue. GOTO 2 (Recursively visit all unmarked neigbors!).

Example: Breadth-First Traversal Vertices are visited in the order A,B,C,G,D,E,F

Breadth-First Traversal (continued) Color all vertices of the sample graph WHITE and push the starting vertex (A) onto the queue visitQueue. Remove A from the queue, color it BLACK, and insert it into visitList, which is the list of visited vertices. Push all WHITE neighbours onto the queue.

Breadth-First Traversal (continued) Remove B from the queue and place it in visitList with color BLACK. The only adjacent vertex for B is D, which is still colored WHITE. Color D GRAY and add it to the queue

Breadth-First Traversal (continued) Remove C and place it in visitList. The adjacent vertex G is GRAY. No new vertices enter the queue.

Breadth-First Traversal (continued) Pop vertex G from the queue and place it in visitList. G has no adjacent vertices, so pop D from the queue. The neighbors, E and F, enter the queue.

Breadth-First Traversal (continued) Continue in this fashion until the queue is empty.

Depth-First Traversal The depth-first visit algorithm moves along a directed edge to one of the start vertex’s neghbors It moves from here to other directed edges until the end of a path (a terminal vertex is a vertex that has no neighbours or only neighbours that are BLACK). At the terminal it backs up to parent vertex to find whether the parent has any more unmarked neighbors, if so continue searching.

Depth-First Traversal (continued) Color all vertices WHITE. A vertex is colored GRAY when it is first contacted in a recursive descent (move). It becomes BLACK only when the vertex is actually visited. Begin at a starting vertex and search down paths of neighbors until reaching a vertex that has no neighbors or only neighbors that are BLACK. At this point, a visit occurs at the "terminal" vertex and it becomes BLACK.

Depth-First Traversal (continued) Backtrack to the previous recursive step and look for another adjacent vertex and launch a scan down its paths. There is no ordering among vertices in an adjacency list, so the paths and hence the order of visits to vertices can vary.

Depth-First Traversal (continued) Discover A (color GRAY) Discover B (color GRAY) Discover D (color GRAY) Discover E (color GRAY, then BLACK) Backtrack D (color BLACK) Backtrack B (color BLACK) Backtrack A (A remains GRAY) Discover C (color BLACK) Backtrack A (color BLACK). Visit complete.

Depth-First Traversal (continued) The depth‑first visit is a recursive algorithm that distinguishes the discovery and finishing time (when a vertex becomes BLACK) of a vertex. The depth‑first visit returns a list of the vertices found in the reverse order of their finishing times.

Depth-First Traversal (continued) An edge that connects a vertex to a neighbor that has color GRAY is called a back edge. A depth-first visit has a cycle if and only if it has a back edge.

Graph Implementation

dfsVisit() /**************************************************** * depth-first visit assuming a WHITE starting * vertex; dfsList contains the visited vertices in * reverse order of finishing time; when checkForCycle * is true, throws IllegalPathStateException if it * detects a cycle *****************************************************/ void dfsVisit(DiGraph g, T sVertex, LinkedList dfsList, boolean checkForCycle) { T neighborVertex; Set<T> edgeSet; // iterator to scan the adjacency set of a vertex Iterator<T> edgeIter; VertexColor color; if (!g.containsVertex(sVertex)) printf("dfsVisit(): vertex not in the graph");

dfsVisit() (continued) // color vertex GRAY to note its discovery g.setColor(sVertex, VertexColor.GRAY); edgeSet = g.getNeighbors(sVertex); // sequence through the adjacency set and look // for vertices that are not yet discovered // (colored WHITE); recursively call dfsVisit() // for each such vertex; if a vertex in the adjacency // list is GRAY, the vertex was discovered during a // previous call and there is a cycle that begins and // ends at the vertex; if checkForCycle is true, // throw an exception edgeIter = edgeSet.iterator();

dfsVisit() (concluded) while (edgeIter.hasNext()) { neighborVertex = edgeIter.next(); color = g.getColor(neighborVertex); if (color == VertexColor.WHITE) dfsVisit(g, neighborVertex, dfsList, checkForCycle); else if (color == VertexColor.GRAY && checkForCycle) printf("dfsVisit(): graph has a cycle"); } // finished with vertex sVertex; make it BLACK // and add it to the front of dfsList g.setColor(sVertex, VertexColor.BLACK); dfsList.addFirst(sVertex);

Depth-First Visit Example LinkedList<String> finishOrder = new LinkedList<String>(); g.colorWhite(); DiGraphs.dfsVisit(g, "B", finishOrder, false); Output: finishOrder: [B, D, E, F, C]

Depth-First Visit Example (concluded) finishOrder = new LinkedList<String>(); g.colorWhite(); try { DiGraphs.dfsVisit(g, "E", finishOrder, true); System.out.println("finishOrder: " + finishOrder); } catch (IllegalPathStateException ipse) System.out.println(ipse.getMessage()); Output: dfsVisit(): cycle involving vertices D and E

Depth-First Search Algorithm Depth‑first search begins with all WHITE vertices and performs depth‑first visits until all vertices of the graph are BLACK. The algorithm returns a list of all vertices in the graph in the reverse order of their finishing times.

dfs() // depth-first search; dfsList contains all // the graph vertices in the reverse order // of their finishing times public static <T> void dfs(DiGraph<T> g, LinkedList<T> dfsList) { Iterator<T> graphIter; T vertex = null; // clear dfsList dfsList.clear(); // initialize all vertices to WHITE g.colorWhite();

dfs() (concluded) // call dfsVisit() for each WHITE vertex graphIter = g.vertexSet().iterator(); while (graphIter.hasNext()) { vertex = graphIter.next(); if (g.getColor(vertex) == VertexColor.WHITE) dfsVisit(g, vertex, dfsList, false); }

Running Time for Depth-First Search An argument similar to that for the breadth-first search shows that that the running time for dfs() is O(V+E), where V is the number of vertices in the graph and E is the number of edges.

Depth-First Search Example dfsVisit() starting at E followed by dfsVisit() starting at A dfsList: [A, B, C, E, F, G, D]

Acyclic Graphs To check for a cycle anywhere in a graph, traverse all of the vertices by using multiple calls to dfsVisit(). This is essentially the dfs() algorithm where the focus is on identifying cycles and not obtaining a list of visited vertices. This approach relies on the fact that any cycle must be included within one of the calls to dfsVisit(). The method, with checkForCycle set to true, identifies the cycle.

acyclic() // determine if the graph is acyclic public static <T> boolean acyclic(DiGraph<T> g) { // use for calls to dfsVisit() LinkedList<T> dfsList = new LinkedList<T>(); Iterator<T> graphIter; T vertex = null; // initialize all vertices to WHITE g.colorWhite(); // call dfsVisit() for each WHITE vertex; catch // an IllegalPathStateException in a call to // dfsVisit() try // call dfsVisit() for each WHITE vertex graphIter = g.vertexSet().iterator();

acyclic() (concluded) while (graphIter.hasNext()) { vertex = graphIter.next(); if (g.getColor(vertex) == VertexColor.WHITE) dfsVisit(g,vertex, dfsList, true); } catch (IllegalPathStateException iae) return false; return true;

Program 24.2 import java.io.FileNotFoundException; import ds.util.DiGraph; import ds.util.DiGraphs; public class Program24_2 { public static void main(String[] args) throws FileNotFoundException DiGraph<String> g = DiGraph.readGraph("cycle.dat"); // determine if the graph is acyclic if (DiGraphs.acyclic(g)) System.out.println("Graph is acyclic"); else System.out.println("Graph is not acyclic");

Program 24.2 (concluded) // add edge (E,B) to create a cycle System.out.print(" Adding edge (E,B): "); g.addEdge("E", "B", 1); // retest the graph to see if it is acyclic if (DiGraphs.acyclic(g)) System.out.println("New graph is acyclic"); else System.out.println("New graph is not acyclic"); } Run: Graph is acyclic Adding edge (E,B): New graph is not acyclic