Presentation is loading. Please wait.

Presentation is loading. Please wait.

© 2010 Goodrich, Tamassia Graphs1 Graph Data Structures ORD DFW SFO LAX 802 1743 1843 1233 337.

Similar presentations


Presentation on theme: "© 2010 Goodrich, Tamassia Graphs1 Graph Data Structures ORD DFW SFO LAX 802 1743 1843 1233 337."— Presentation transcript:

1 © 2010 Goodrich, Tamassia Graphs1 Graph Data Structures ORD DFW SFO LAX

2 © 2010 Goodrich, Tamassia Graphs2 Main Methods of the Graph ADT  Vertices and edges are positions store elements  Accessor methods endVertices(e): an array of the two endvertices of e opposite(v, e): the vertex opposite of v on e areAdjacent(v, w): true iff v and w are adjacent replace(v, x): replace element at vertex v with x replace(e, x): replace element at edge e with x  Update methods insertVertex(o): insert a vertex storing element o insertEdge(v, w, o): insert an edge (v,w) storing element o removeVertex(v): remove vertex v (and its incident edges) removeEdge(e): remove edge e  Iterable collection methods incidentEdges(v): edges incident to v vertices(): all vertices in the graph edges(): all edges in the graph

3 © 2010 Goodrich, Tamassia Graphs3 Adjacency Matrix Structure  Edge list structure  Augmented vertex objects Integer key (index) associated with vertex  2D-array adjacency array Reference to edge object for adjacent vertices Null for non nonadjacent vertices  The “old fashioned” version just has 0 for no edge and 1 for edge u v w ab  1  2  a uv w 01 2 b

4 © 2010 Goodrich, Tamassia Graphs4 Adjacency List Structure  Incidence sequence for each vertex sequence of references to edge objects of incident edges  Augmented edge objects references to associated positions in incidence sequences of end vertices u v w ab a uv w b

5 © 2010 Goodrich, Tamassia Graphs5 Performance  n vertices, m edges  no parallel edges  no self-loops Edge List Adjacency List Adjacency Matrix Space n  m n2n2 incidentEdges( v ) mdeg(v)n areAdjacent ( v, w ) mmin(deg(v), deg(w))1 insertVertex( o ) 11n2n2 insertEdge( v, w, o ) 111 removeVertex( v ) mdeg(v)n2n2 removeEdge( e ) 111

6 6 Applications of BFS and DFS CSE 2011 Winter August 2014

7 7 Some Applications of BFS and DFS BFS  To find the shortest path from a vertex s to a vertex v in an unweighted graph  To find the length of such a path  To find out if a graph contains cycles  To construct a BSF tree/forest from a graph DFS  To find a path from a vertex s to a vertex v.  To find the length of such a path.  To construct a DSF tree/forest from a graph.

8 8 Testing for Cycles

9 9 Method isCyclic(v) returns true if a directed graph (with only one component) contains a cycle, and returns false otherwise. else return true; return false;

10 10 Finding Cycles To output the cycle just detected, use info in prev[ ]. NOTE: The code above applies only to directed graphs. Homework: Explain why that code does not work for undirected graphs.

11 Finding Cycles in Undirected Graphs To detect/find cycles in an undirected graph, we need to classify the edges into 3 categories during program execution:  unvisited edge: never visited.  discovery edge: visited for the very first time.  cross edge: edge that forms a cycle. Code fragment 13.10, p When the BFS algorithm terminates, the discovery edges form a spanning tree. If there exists a cross edge, the undirected graph contains a cycle. 11

12 BFS Algorithm (in textbook) Breadth-First Search 12 The algorithm uses a mechanism for setting and getting “labels” of vertices and edges Algorithm BFS(G, s) L 0  new empty sequence L 0.insertLast(s) setLabel(s, VISITED ) i  0 while  L i.isEmpty() L i  1  new empty sequence for all v  L i.elements() for all e  G.incidentEdges(v) if getLabel(e)  UNEXPLORED w  opposite(v,e) if getLabel(w)  UNEXPLORED setLabel(e, DISCOVERY ) setLabel(w, VISITED ) L i  1.insertLast(w) else setLabel(e, CROSS ) i  i  1 Algorithm BFS(G) Input graph G Output labeling of the edges and partition of the vertices of G for all u  G.vertices() setLabel(u, UNEXPLORED ) for all e  G.edges() setLabel(e, UNEXPLORED ) for all v  G.vertices() if getLabel(v)  UNEXPLORED BFS(G, v)

13 Example Breadth-First Search 13 C B A E D discovery edge cross edge A visited vertex A unexplored vertex unexplored edge L0L0 L1L1 F CB A E D L0L0 L1L1 F CB A E D L0L0 L1L1 F

14 Example (2) Breadth-First Search 14 CB A E D L0L0 L1L1 F CB A E D L0L0 L1L1 F L2L2 CB A E D L0L0 L1L1 F L2L2 CB A E D L0L0 L1L1 F L2L2

15 Example (3) Breadth-First Search 15 CB A E D L0L0 L1L1 F L2L2 CB A E D L0L0 L1L1 F L2L2 CB A E D L0L0 L1L1 F L2L2

16 16 Computing Spanning Trees

17 17 Trees Tree: a connected graph without cycles. Given a connected graph, remove the cycles  a tree. The paths found by BFS(s) form a rooted tree (called a spanning tree), with the starting vertex as the root of the tree. BFS tree for vertex s = 2 What would a level-order traversal of the tree tell you?

18 18 Computing a BFS Tree Use BFS on a vertex BFS( v ) with array prev[ ] The paths from source s to the other vertices form a tree

19 19 Computing Spanning Forests

20 20 Computing a BFS Forest A forest is a set of trees. A connected graph gives a tree (which is itself a forest). A connected component also gives us a tree. A graph with k components gives a forest of k trees.

21 21 Example D E A C F B G K H L N M O R Q P s A graph with 3 components

22 22 Example of a Forest D E A C F B G K H L N M O R Q P s A forest with 3 trees We removed the cycles from the previous graph.

23 23 Computing a BFS Forest Use BFS method on a graph BFSearch( G ), which calls BFS( v ) Use BFS( v ) with array prev[ ].  The paths originating from v form a tree. BFSearch( G ) examines all the components to compute all the trees in the forest.

24 24 Applications of DFS Is there a path from source s to a vertex v? Is an undirected graph connected? Is a directed graph strongly connected? To output the contents (e.g., the vertices) of a graph To find the connected components of a graph To find out if a graph contains cycles and report cycles. To construct a DSF tree/forest from a graph

25 Finding Cycles Using DFS Similar to using BFS. For undirected graphs, classify the edges into 3 categories during program execution: unvisited edge, discovery edge, and back (cross) edge.  Code Fragment 13.1, p  If there exists a back edge, the undirected graph contains a cycle. 25

26 © 2010 Goodrich, Tamassia Depth-First Search26 DFS Algorithm  The algorithm uses a mechanism for setting and getting “labels” of vertices and edges Algorithm DFS(G, v) Input graph G and a start vertex v of G Output labeling of the edges of G in the connected component of v as discovery edges and back edges setLabel(v, VISITED) for all e  G.incidentEdges(v) if getLabel(e)  UNEXPLORED w  opposite(v,e) if getLabel(w)  UNEXPLORED setLabel(e, DISCOVERY) DFS(G, w) else setLabel(e, BACK) Algorithm DFS(G) Input graph G Output labeling of the edges of G as discovery edges and back edges for all u  G.vertices() setLabel(u, UNEXPLORED) for all e  G.edges() setLabel(e, UNEXPLORED) for all v  G.vertices() if getLabel(v)  UNEXPLORED DFS(G, v)

27 © 2010 Goodrich, Tamassia Depth-First Search27 Example DB A C ED B A C ED B A C E discovery edge back edge A visited vertex A unexplored vertex unexplored edge

28 © 2010 Goodrich, Tamassia Depth-First Search28 Example (cont.) DB A C E DB A C E DB A C E D B A C E

29 29 DFS Tree Resulting DFS-tree. Notice it is much “deeper” than the BFS tree. Captures the structure of the recursive calls: - when we visit a neighbor w of v, we add w as child of v - whenever DFS returns from a vertex v, we climb up in the tree from v to its parent

30 30 Applications – DFS vs. BFS What can BFS do and DFS can’t?  Finding shortest paths (in unweighted graphs) What can DFS do and BFS can’t?  Finding out if a connected undirected graph is biconnected A connected undirected graph is biconnected if there are no vertices whose removal disconnects the rest of the graph. Application in computer networks: ensuring that a network is still connected when a router/link fails.

31 A graph that is not biconnected 31

32 32 DFS vs. BFS CB A E D L0L0 L1L1 F L2L2 CB A E D F DFSBFS ApplicationsDFSBFS Spanning forest, connected components, paths, cycles  Shortest paths  Biconnected components 

33 33 Final Exam  Sunday, April 17, 10:00-13:00 Materials:  All lectures notes and corresponding sections in the textbook from the beginning to today’s lecture  Homework questions  Assignments 1 to 5


Download ppt "© 2010 Goodrich, Tamassia Graphs1 Graph Data Structures ORD DFW SFO LAX 802 1743 1843 1233 337."

Similar presentations


Ads by Google