510 likes | 529 Views
This chapter covers examples and terminology of graphs, including road maps, airline routes, mazes, course prerequisites, and trees. It also explains breadth-first and depth-first traversals, as well as finding paths and topological order.
E N D
Graphs Chapter 19
Some Examples and Terminology Road Maps Airline Routes Mazes Course Prerequisites Trees Traversals Breadth-First Traversal Dept-First Traversal Topological Order Paths Finding a Path Shortest Path in an Unweighted Graph Shortest Pat in a Weighted Graph Java Interfaces for the ADT Graph Chapter Contents
Some Examples and Terminology • A graph is a collection of distinct vertices and distinct edges • Edges can be directed or undirected • When it has directed edges it is called a digraph • Vertices or nodes are connected by edges • A subgraph is a portion of a graph that itself is a graph
Road Maps Nodes Edges A portion of a road map. Undirected edges
Street Maps A directed graph representing a city's street map. Directed edges
Path • A sequence of edges that connect two vertices in a graph • In a directed graph the direction of the edges must be considered • Called a directed path • A cycle is a path that begins and ends at same vertex • Simple path does not pass through any vertex more than once • A graph with no cycles is acyclic
Weight • A weighted graph has values on its edges • Weights or costs • A path in a weighted graph also has weight or cost • The sum of the edge weights • Examples of weights • Miles between nodes on a map • Driving time between nodes • Taxi cost between node locations
Weights A weighted graph.
Connected Graphs • A connected graph • Has a path between every pair of distinct vertices • A complete graph • Has an edge between every pair of distinct vertices • A disconnected graph • Not connected
Connected Graphs Undirected graphs
Adjacent Vertices • Two vertices are adjacent in an undirected graph if they are joined by an edge • Sometimes adjacent vertices are called neighbors Vertex A is adjacent to B, but B is not adjacent to A.
Airline Routes • Note the graph with two subgraphs • Each subgraph connected • Entire graph disconnected Airline routes
Mazes (a) A maze; (b) its representation as a graph
Course Prerequisites The prerequisite structure for a selection of courses as a directed graph without cycles.
Trees • All trees are graphs • But not all graphs are trees • A tree is a connected graph without cycles • Traversals • Preorder, inorder, postorder traversals are examples of depth-first traversal • Level-order traversal of a tree is an example of breadth-first traversal • Visit a node • For a tree: process the node's data • For a graph: mark the node as visited
Trees The visitation order of two traversals; (a) depth first; (b) breadth first.
Breadth-First Traversal (ctd.) A trace of a breadth-first traversal for a directed graph, beginning at vertex A.
Breadth-First Traversal • Algorithm for breadth-first traversal of nonempty graph beginning at a given vertex Algorithm getBreadthFirstTraversal(originVertex)vertexQueue = a new queue to hold neighborstraversalOrder = a new queue for the resulting traversal orderMark originVertex as visitedtraversalOrder.enqueue(originVertex)vertexQueue.enqueue(originVertex)while (!vertexQueue.isEmpty()){ frontVertex = vertexQueue.dequeue()while (frontVertex has an unvisited neighbor) { nextNeighbor = next unvisited neighbor of frontVertexMark nextNeighbor as visitedtraversalOrder.enqueue(nextNeighbor) vertexQueue.enqueue(nextNeighbor) }}return traversalOrder A breadth-first traversal visits a vertex and then each of the vertex's neighbors before advancing
Depth-First Traversal • Visits a vertex, then • A neighbor of the vertex, • A neighbor of the neighbor, Etc. • Visit them, and push them into stack • Advance as much as possible from the original vertex • When no unvisited neighbor exists, back up by one level by popping up current vertex • Considers the next neighbor branch
Depth-First Traversal A trace of a depth-first traversal beginning at vertex A of the directed graph
Depth-First Traversal Algorithm getDepthFirstTraversal(originVertex)vertexStack = a new stack to hold vertices as they are visitedtraversalOrder = a new queue for the resulting traversal orderMark originVertex as visitedtraversalOrder.enqueue(originVertex)vertexStack.push(originVertex)while (!vertexStack.isEmpty()){ topVertex = vertexStack.peek()if (topVertex has an unvisited neighbor) { nextNeighbor = next unvisited neighbor of topVertex Mark nextNeighbor as visited traversalOrder.enqueue(nextNeighbor) vertexStack.push(nextNeighbor) }else // all neighbors are visited vertexStack.pop() }return traversalOrder
Graph Traversal Exercises Breadth-First and Depth-First Traversal starting from a
Some of the possible Answers • Breadth-first • a f h e g i d j k c l n b m o • Depth-first • a f e d c b g h i j k l m n o
Topological Order • Given a directed graph without cycles (DAG) • An ordering of vertices in a directed acyclic graph. • In a topological order • Vertex a precedes vertex b whenever • A directed edge exists from a to b
Topological Order • First find any vertex with no incoming edges. • Print this vertex, and remove it, along with its edges from the graph. • Then we apply the same strategy to the rest of graph. • Indegree of node: Incoming number of edges
Topological Order Three topological orders for the graph
Topological Order An impossible prerequisite structure for three courses as a directed graph with a cycle.
Topological Order • The graph shown has many valid topological sorts, including: • 7,5,3,11,8,2,9,10 • 7,5,11,2,3,10,8,9 • 3,7,8,5,11,10,9,2
Shortest Path in an Unweighted Graph (a) an unweighted graph and (b) the possible paths from vertex A to vertex H.
Shortest Path in an Unweighted Graph The graph after the shortest-path algorithm has traversed from vertex A to vertex H
Shortest Path in an Unweighted Graph Finding the shortest path from vertex A to vertex H in the unweighted graph
Shortest Path in an Weighted Graph (a) A weighted graph and (b) the possible paths from vertex A to vertex H.
Shortest Path in an Weighted Graph • Shortest path between two given vertices • Smallest edge-weight sum • Algorithm based on breadth-first traversal (Dijkstra algorithm) • Several paths in a weighted graph might have same minimum edge-weight sum • Algorithm given by text finds only one of these paths
Shortest Path in an Weighted Graph Finding the cheapest path from vertex A to vertex H in the weighted graph
Shortest Path in an Weighted Graph The graph after finding the cheapest path from vertex A to vertex H.
Shortest Path in an Weighted Graph • Shortest Path from A to E?
Minimum Spanning Tree • The minimum spanning tree (MST) of a graph defines the cheapest subset of edges that keeps the graph in one connected component. • Telephone companies are particularly interested in minimum spanning trees, because the minimum spanning tree of a set of sites defines the wiring scheme that connects the sites using as little wire as possible.
Greedy Algorithm • Greedy algorithms work in phases. In each phase, a decision is made that appears to be good, without regard for future consequences. • A greedy algorithm makes the locally optimum choice at each phase with the hope of finding the global optimum.
Kruskal's Algorithm • Let G be a connected graph with n vertices • Initialize n components, each one containing one vertex of G. • Now sort the edges in increasing order by weight and set T = the empty set. • Now examine each edge in turn. If an edge joins two components, add it to T and merge the two components into one. If not, discard the edge. • Stop when only one component remains.
Kruskal's Algorithm • Ordered edges: • [1,4], [6,7], [3,4], [1,2], [4,2], [3,1], [4,7], [3,6], [7,5], [4,5], [6,4], [2,5] • Components T (edges) 1,2,3,4,5,6,7 empty [1,4], 2, 3, 5,6,7 [1,4] [1,4], 2,3,5,[6,7] [1,4], [6,7] [1,4,3], 2, 5,[6,7] [1,4], [6,7], [3,4] [1,4,3,2], 5, [6,7] [1,4], [6,7], [3,4], [1,2] [1,4,3,2,6,7], 5 [1,4], [6,7], [3,4], [1,2], [4,7] [1,4,3,2,6,7,5] [1,4], [6,7], [3,4], [1,2], [4,7], [7,5]
Java Interfaces for the ADT Graph • Methods in the BasicGraphInterface • addVertex • addEdge • hasEdge • isEmpty • getNumberOfVertices • getNumberOfEdges • clear
Java Interfaces for the ADT Graph Operations of the ADT graph enable creation of a graph and answer questions based on relationships among vertices A portion of the flight map
The Adjacency Matrix (a) A directed graph and (b) its adjacency matrix.
The Adjacency Matrix • Adjacency matrix uses fixed amount of space • Depends on number of vertices • Does not depend on number of edges • Typically the matrix will be sparse • Presence of an edge between two vertices can be known immediately • All neighbors of a vertex found by scanning entire row for that vertex
The Adjacency List Adjacency lists for the directed graph