1 / 49

Graphs: Terminology, ADTs, and Implementations

This chapter discusses the terminology, abstract data types (ADTs), and implementations of graphs, including adjacency matrix and adjacency list. It covers various graph operations and their efficiency.

asmtih
Download Presentation

Graphs: Terminology, ADTs, and Implementations

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 13: Graphs Chien Chin Chen Department of Information Management National Taiwan University

  2. Terminology (1/7) • Graphs provide a way to illustrate real world data. • Map, Web, …. • A graphG consists of two sets: • G = {V, E}. • A set V of vertices, or nodes. • A set E of edges. • A subgraph: • Consists of a subset of a graph’s vertices and a subset of its edges.

  3. Terminology (2/7) graph subgraph

  4. Terminology (3/7) • Adjacent vertices: • Two vertices that are joined by an edge. • A path between two vertices: • A sequence of edges that begins at one vertex and ends at another vertex. • May pass through the same vertex more than once. • A simple path: • A path that passes through a vertex only once.

  5. Terminology (4/7) • A cycle: • A path that begins and ends at the same vertex. • A simple cycle: • A cycle that does not pass through a vertex more than once. • A connected graph: • A graph that has a path between each pair of distinct vertices.

  6. Terminology (5/7) • A disconnected graph: • A graph that has at least one pair of vertices without a path between them. • A complete graph: • A graph that has an edge between each pair of distinct vertices. • A multigraph: • Allows multiple edges between vertices. • Not a graph.(not a set of edges)

  7. Terminology (6/7) • Weighted graph: • A graph whose edges have numeric labels. • Undirected graph: • Edges do not indicate a direction.

  8. Terminology (7/7) • Directed Graph: • Each edge has a direction; directed edges. • Can have two edges between a pair of vertices, one in each direction. • Vertex y is adjacent to vertex x if there is a directed edge from x to y. • Directed path is a sequence of directed edges between two vertices.

  9. Graphs As ADTs (1/2) • Variations of an ADT graph are possible • Vertices may or may not contain values. • Many problems have no need for vertex values. • Relationships among vertices is what is important. • Either directed or undirected edges. • Either weighted or unweighted edges. • Insertion and deletion operations for graphs apply to vertices and edges. • Graphs can have traversal operations.

  10. ADT Graph Operations: Create an empty graph. Destroy a graph. Determine whether a graph is empty. Determine the number of vertices in a graph. Determine the number of edges in a graph. Determine whether an edge exists between two given vertices. Insert a vertex in a graph. Insert an edge between two given vertices in a graph. Delete a particular vertex from a graph. Delete the edge between two given vertices. Retrieve the vertex that contains a given search key. Graphs As ADTs (2/2)

  11. Implementing Graphs (1/6) • Most common implementations of a graph: • Adjacency matrix. • Adjacency list. • Adjacency matrix for a graph that has n vertices numbered 0, 1, …, n– 1. • An n by n array matrix such that matrix[i][j] indicates whether an edge exists from vertex i to vertex j. • The matrix for an undirected graph is symmetrical; that is, matrix[i][j] equals matrix[j][i].

  12. Implementing Graphs (2/6) • For an unweighted graph, matrix[i][j] is: • 1 (or true) if an edge exists from vertex i to vertex j. • 0 (or false) if no edge exists from vertex i to vertex j. • bool matrix[n][n]; • For a weighted graph, matrix[i][j] is • The weight of the edge from vertex i to vertex j. •  if no edge exists from vertex i to vertex j(POSITIVE_INFINITE).

  13. Implementing Graphs (3/6) • Adjacency list for a directed graph that has n vertices numbered 0, 1, …, n– 1. • An array of n linked lists. • Node * list[n]; • The ith linked list has a node for vertex j if and only if an edge exists from vertex i to vertex j. • The list’s node can contain: • Vertex j’s value, if any, or an indication of vertex j’s identity. • A pointer points to the next node. • Edge weight. class Node { String ending_vertex_value; float weight; Node *next; }

  14. Implementing Graphs (4/6) • For an undirected graph, treat each edge as if it were two directed edges in opposite directions. • Which of these two implementations is better? • Depends on how your application uses the graph. 0 ... 0 A A 8 1 B ... 1 B

  15. Implementing Graphs (5/6) • Two common operations on graphs: • Determine whether there is an edge from vertex i to vertex j. • Find all vertices adjacent to a given vertex i. • Adjacency matrix: • Supports operation 1 more efficiently. • Only need to examine the value of matrix[i][j]. • Adjacency list: • Supports operation 2 more efficiently. • Traverse the ith linked list.

  16. Implementing Graphs (6/6) • Space requirements of the two implementations: • The adjacency matrix always has n2 entries. • The number of nodes in an adjacency list equals the number of edges in a graph (twice for an undirected graph). • Each node contains both a value and a pointer. • The list also has n head pointer. • Often requires less space than an adjacency matrix. • You must consider: • What operations are needed. • & memory requirements.

  17. Graph Traversals (1/2) • Visits all the vertices that it can reach. • Traversal that starts at vertex v will visit all vertices w for which there is a path between v and w. • Visits all vertices of the graph if and only if the graph is connected. • If a graph is not connected, a graph traversal will visit only a subset of the graph’s vertices. • A connected component : the subset of vertices visited during a traversal that begins at a given vertex.

  18. Graph Traversals (2/2) • If a graph contains a cycle, a graph-traversal algorithm can loop indefinitely. • To prevent indefinite loops: • Mark each vertex during a visit, and; • Never visit a vertex more than once. • Two basic graph-traversal algorithms, which are depth-first search traversal and breadth-first search traversal, can apply to either directed or undirected graphs.

  19. Depth-First Search (DFS)Traversal (1/4) • Proceeds along a path from a vertex v as deeply into the graph as possible before backing up. • Has a simple recursive form. dfs(in v:Vertex) // Traverses a graph beginning at vertex v by using a // depth-first search: Recursive version. Mark v as visited for (each unvisited vertex u adjacent to v) dfs(u) to visit the vertices adjacent to v in sorted order.

  20. Depth-First Search (DFS) Traversal (2/4) dfs(in v:Vertex) Mark v as visited for (each unvisited vertex u adjacent to v) dfs(u) 1 v v dfs(v) dfs(t) dfs(t) 7 8 2 u u w w x x dfs(u) 6 3 q q t t dfs(q) dfs(t) 4 5 dfs(r) r r s s dfs(s)

  21. Depth-First Search (DFS) Traversal (3/4) • A “last visited, first explored” strategy. • Has an iterative form that uses a stack. dfs(in v:Vertex) s.createStack() s.push(v) Mark v as visited while(!s.isEmpty()) { if (no unvisited vertices are adjacent to the vertex on the top of the stack) s.pop() // backtrack else { Select an unvisited vertex u adjacent to the vertex on the top of the stack s.push(u) Mark u as visited } }

  22. Depth-First Search (DFS) Traversal (4/4) 1 v v dfs(v) 7 8 2 u u w w x x s r q 6 t 3 x w u q q t t v stack 4 5 r r s s

  23. Breadth-First Search (BFS)Traversal (1/2) • Visits every vertex adjacent to a vertex v that it can before visiting any other vertex. • A “first visited, first explored” strategy. • An iterative form uses a queue. bfs(in v:Vertex) q.createQueue() q.enqueue(v) Mark v as visited while(!q.isEmpty()) { q.dequeue(w) for (each unvisited vertex u adjacent to w) { Mark u as visited q.enqueue(u) } }

  24. Breadth-First Search (BFS)Traversal (2/2) 1 v v bfs(v) 3 4 2 u u w w x x 6 5 q q t t 7 8 r r s s queue v q u t r w x s

  25. Applications of Graphs: Topological Sorting (1/5) • Topological order: • A list of vertices in a directed graph without cycles such that vertex x precedes vertex y if there is a directed edge from x to y in the graph. • Several topological orders are possible for a given graph.

  26. Applications of Graphs: Topological Sorting (2/5) • Topological sorting: • Arranging the vertices into a topological order. • topSort1 • Find a vertex that has no successor. • Add the vertex to the beginning of a list. • Remove that vertex from the graph, as well as all edges that lead to it. • Repeat the previous steps until the graph is empty. • When the loop ends, the list of vertices will be in topological order.

  27. Applications of Graphs: Topological Sorting (3/5) a b c d e f g a g d b e c f List:

  28. Applications of Graphs: Topological Sorting (4/5) • A modification of the iterative DFS algorithm. topSort2(in theGraph:Graph, out aList:list) s.createStack() for (all vertices v in the graph if (v has no predecessors) { s.push(v) Mark v as visited } while (!s.isEmpty()) { if (all vertices adjacent to the vertex on the top of the stack have been visited) { s.pop(v) aList.insert(1, v) } else { Select an unvisited vertex u adjacent to the vertex on the top of the stack s.push(u) Mark u as visited } } Push all vertices that have no predecessor onto a stack.

  29. Applications of Graphs: Topological Sorting (5/5) • Push (& mark) all vertices that have no predecessor onto a stack. • DFS while loop a a b b c c f c e d d e e f f d g b a g g f a b g d e c List: stack

  30. Applications of Graphs: Spanning Trees (1/5) • A tree is an undirected connected graph without cycles. • A spanning tree of a connected undirected graph G is • A subgraph of G that contains all of G’s vertices and enough of its edges to form a tree.

  31. Applications of Graphs: Spanning Trees (2/5) • There may be several spanning trees for a given graph. • To obtain a spanning tree from a connected undirected graph with cycles: • Remove edges until there are no cycles. • Detecting a cycle in an undirected connected graph: • A connected undirected graph that has n vertices must have at least n– 1 edges. • A connected undirected graph that has n vertices and exactly n– 1 edges cannot contain a cycle. • A connected undirected graph that has n vertices and more than n– 1 edges must contain at least one cycle. You can determine whether a connected graph contains a cycle simply by counting its vertices and edges.

  32. Applications of Graphs: Spanning Trees (3/5) • Two algorithm for determining a spanning tree of a graph: • The DFS spanning tree. • THE BFS spanning tree.

  33. Applications of Graphs: Spanning Trees (4/5) • To create a depth-first search (DFS) spanning tree: • Traverse the graph using a depth-first search and mark the edges that you follow. • After the traversal is complete, the graph’s vertices and marked edges form the spanning tree. • To create a breath-first search (BFS) spanning tree: • Traverse the graph using a bread-first search and mark the edges that you follow. • When the traversal is complete, the graph’s vertices and marked edges form the spanning tree.

  34. Applications of Graphs: Spanning Trees (5/5) • The DFS spanning tree rooted at vertex a. root (1) a a b b (2) e f (8) h g c c h h d (3) i i e e c (7) (5) i b d d a f f (6) g g (4) stack

  35. Applications of Graphs: Minimum Spanning Trees (1/4) • Suppose you are building a telephone system of a country. • Vertices: cities. • Edges: weighted, the installation cost of the telephone line. • Cost of the spanning tree: • Sum of the costs of the edges of the spanning tree. 6 a a b b 7 2 9 c c 4 h h 3 4 i i e e 1 8 d d 5 f f 2 g g

  36. Applications of Graphs: Minimum Spanning Trees (2/4) • A minimum spanning tree of a connected undirected graph has a minimal edge-weight sum. • A particular graph could have several minimum spanning trees. • Prim’s algorithm: • A method finds a minimum spanning tree that begin at any vertex.

  37. Applications of Graphs: Minimum Spanning Trees (3/4) primsAlgorithm(in v:Vertex) // Determines a minimum spanning tree for a weighted, // connected, undirected graph whose weights are // nonnegative, beginning with any vertex v. Mark vertex v as visited and include it in the minimum spanning tree while (there are unvisited vertices) { Find the least-cost edge (v, u) from a visited vertex v to some unvisited vertex u Mark u as visited Add the vertex u and the edge (v, u) to the minimum spanning tree }

  38. Applications of Graphs: Minimum Spanning Trees (4/4) primsAlgorithm(a) 6 a a a b b b 7 2 9 c c c 4 h h h 3 4 i i i e e e 1 8 d d d 5 f f f 2 g g g

  39. Applications of Graphs: Shortest Paths (1/5) • A map of airline routes: • The vertices are cities. • The edges indicate existing flights between cities. • The edge weights represent the mileage between cities. • Shortest path between two vertices in a weighted graph is: • The path that has the smallest sum of its edge weights.

  40. Applications of Graphs: Shortest Paths (2/5) • Dijkstra’s Algorithm: • Find the shortest paths between a given origin and all other vertices. • For convenience, the starting vertex (origin) is labeled 0, and the other vertices are labeled from 1 to n-1. Adjacency matrix 8 2 0 1 2 1 4 3 9 2 1 3 4 7

  41. Applications of Graphs: Shortest Paths (3/5) • Dijkstra’s algorithm uses: • A set vertexSet of selected vertices. • An array weight, where weight[v] is the weight of the shortest path from vertex 0 to vertex vthat passes through vertices in vertexSet. • Initially, vertexSet contains only vertex 0, and weight contains the weights of the single-edge paths from vertex 0 to all other vertices.

  42. Applications of Graphs: Shortest Paths (4/5) • After initialization, you find a vertex v that is not in vertexSet and that minimizes weight[v]. • Add v to vertexSet. • For all vertices u not in vertexSet, you check the values weight[u] to ensure that they are indeed minimums. • weight[u] = min { weight[u], weight[v] + matrix[v][u] } • The final values in weight are the weights of the shortest path.

  43. Applications of Graphs: Shortest Paths (5/5) Adjacency matrix 8 2 0 1 2 1 4 3 9 2 1 3 4 7

  44. Applications of Graphs: Circuits (1/2) • A circuit: • A special cycle that passes through every vertex (or edge) in a graph exactly once. • Euler circuit (Euler’s bridge problem): • A circuit that begins at a vertex v, passes through every edge exactly once, and terminates at v. • Exists if and only if each vertex touches an even number of edges.

  45. Does the graph has Euler circuit? Find an Euler circuit for a graph: Use a depth-first search that marks edges instead of vertices as they are traversed. When you find a cycle, launch a new traversal beginning with the first vertex along the cycle that touches an unvisited edge. Applications of Graphs: Circuits (2/2) YES!! a b c d e f g h i j k l Euler circuit: a b e f j i h d c g h k l i e d a

  46. Applications of Graphs: Some Difficult Problems • A Hamilton circuit: • Begins at a vertex v, passes through every vertexexactly once, and terminates at v. • The traveling salesman problem (TSP): weighted graph with the least weight expense. • A planar graph: • Can be drawn so that no two edges cross. • The three utilities problem. • The four-color problem.

  47. Summary (1/3) • The most common implementations of a graph use either an adjacency matrix or an adjacency list. • Graph searching: • Depth-first search goes as deep into the graph as it can before backtracking. • Uses a stack. • Bread-first search visits all possible adjacent vertices before traversing further into the graph. • Uses a queue.

  48. Summary (2/3) • Topological sorting produces a linear order of the vertices in a directed graph without cycles. • Trees are connected undirected graphs without cycles. • A spanning tree of a connected undirected graph is • A subgraph that contains all the graph’s vertices and enough of its edges to form a tree. • A minimum spanning tree for a weighted undirected graph is • A spanning tree whose edge-weight sum is minimal.

  49. Summary (3/3) • The shortest path between two vertices in a weighted directed graph is • The path that has the smallest sum of its edge weights.

More Related