1 Subgraphs A subgraph S of a graph G is a graph such that The vertices of S are a subset of the vertices of G The edges of S are a subset of the edges.

Slides:



Advertisements
Similar presentations
© 2004 Goodrich, Tamassia Depth-First Search1 DB A C E.
Advertisements

Depth-First Search1 Part-H2 Depth-First Search DB A C E.
Graphs – Depth First Search ORD DFW SFO LAX
© 2004 Goodrich, Tamassia Breadth-First Search1 CB A E D L0L0 L1L1 F L2L2.
Breadth-First Search Text Read Weiss, § 9.3 (pp ) Breadth-First Search Algorithms.
TECH Computer Science Graphs and Graph Traversals  // From Tree to Graph  // Many programs can be cast as problems on graph Definitions and Representations.
Graph Searching (Graph Traversal) Algorithm Design and Analysis Week 8 Bibliography: [CLRS] – chap 22.2 –
Depth-First Search1 DB A C E. 2 Outline and Reading Definitions (§6.1) Subgraph Connectivity Spanning trees and forests Depth-first search (§6.3.1) Algorithm.
Breadth-First Search1 Part-H3 Breadth-First Search CB A E D L0L0 L1L1 F L2L2.
© 2004 Goodrich, Tamassia Directed Graphs1 JFK BOS MIA ORD LAX DFW SFO.
© 2004 Goodrich, Tamassia Depth-First Search1 DB A C E.
1 Directed Graphs CSC401 – Analysis of Algorithms Lecture Notes 15 Directed Graphs Objectives: Introduce directed graphs and weighted graphs Present algorithms.
Graph Traversals CSC 172 SPRING 2002 LECTURE 26. Traversing graphs Depth-First Search like a post-order traversal of a tree Breath-First Search Less like.
1 Graphs: Concepts, Representation, and Traversal CSC401 – Analysis of Algorithms Lecture Notes 13 Graphs: Concepts, Representation, and Traversal Objectives:
Directed Graphs1 JFK BOS MIA ORD LAX DFW SFO. Directed Graphs2 Outline and Reading (§6.4) Reachability (§6.4.1) Directed DFS Strong connectivity Transitive.
Graph Traversals CSC 172 SPRING 2004 LECTURE 21. Announcements  Project 3 is graded  handed back Tuesday  Grad spam, tonight – if you are really anxious.
CSC311: Data Structures 1 Chapter 13: Graphs I Objectives: Graph ADT: Operations Graph Implementation: Data structures Graph Traversals: DFS and BFS Directed.
1 Graph Algorithms Lecture 09 Asst. Prof. Dr. Bunyarit Uyyanonvara IT Program, Image and Vision Computing Lab. School of Information and Computer Technology.
CSC 213 – Large Scale Programming. Today’s Goals  Make Britney sad through my color choices  Revisit issue of graph terminology and usage  Subgraphs,
Graphs Part 1. Outline and Reading Graphs (§13.1) – Definition – Applications – Terminology – Properties – ADT Data structures for graphs (§13.2) – Edge.
October 22, DFS, BFS, Biconnectivity, Digraphs 1 CS 221 West Virginia University.
Graphs. Data Structure for Graphs. Graph Traversals. Directed Graphs. Shortest Paths. 2 CPSC 3200 University of Tennessee at Chattanooga – Summer 2013.
Chapter 6 Graphs ORD DFW SFO LAX
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.
GRAPHS 1. Outline 2  Undirected Graphs and Directed Graphs  Depth-First Search  Breadth-First Search.
1 prepared from lecture material © 2004 Goodrich & Tamassia COMMONWEALTH OF AUSTRALIA Copyright Regulations 1969 WARNING This material.
October 21, Graphs1 Graphs CS 221 (slides from textbook author)
Depth-First Search1 DB A C E. 2 Depth-first search (DFS) is a general technique for traversing a graph A DFS traversal of a graph G – Visits all the vertices.
COSC 2007 Data Structures II
Depth-First Search Lecture 21: Graph Traversals
CSC401: Analysis of Algorithms 6-1 CSC401 – Analysis of Algorithms Chapter 6 Graphs Objectives: Introduce graphs and data structures Discuss the graph.
CHAPTER 13 GRAPH ALGORITHMS ACKNOWLEDGEMENT: THESE SLIDES ARE ADAPTED FROM SLIDES PROVIDED WITH DATA STRUCTURES AND ALGORITHMS IN C++, GOODRICH, TAMASSIA.
Backtracking Algorithm Depth-First Search Text Read Weiss, § 9.6 Depth-First Search and § 10.5 Backtracking Algorithms.
CSC 213 – Large Scale Programming Lecture 31: Graph Traversals.
1 COMP9024: Data Structures and Algorithms Week Eleven: Graphs (I) Hui Wu Session 1, 2016
Directed Graphs1 JFK BOS MIA ORD LAX DFW SFO. Directed Graphs2 Outline and Reading (§12.4) Reachability (§12.4.1) Directed DFS Strong connectivity Transitive.
© 2010 Goodrich, Tamassia Breadth-First Search1 CB A E D L0L0 L1L1 F L2L2.
Graphs ORD SFO LAX DFW Graphs 1 Graphs Graphs
Breadth-First Search L0 L1 L2
Graphs 10/24/2017 6:47 AM Presentation for use with the textbook Data Structures and Algorithms in Java, 6th edition, by M. T. Goodrich, R. Tamassia, and.
Searching Graphs ORD SFO LAX DFW Spring 2007
Breadth-First Search L0 L1 L2 C B A E D F Breadth-First Search
Csc 2720 Instructor: Zhuojun Duan
Breadth-First Search L0 L1 L2
COMP9024: Data Structures and Algorithms
COMP9024: Data Structures and Algorithms
Chapter 14 Graph Algorithms
Graphs Part 1.
Graphs.
Graphs.
Breadth-First Search L0 L1 L2 C B A E D F Breadth-First Search
Depth-First Search D B A C E Depth-First Search Depth-First Search
Breadth-First Search L0 L1 L2 C B A E D F Breadth-First Search
Breadth-First Search (BFS)
Depth-First Search D B A C E Depth-First Search Depth-First Search
Elementary Graph Algorithms
Depth-First Search D B A C E Depth-First Search Depth-First Search
Graphs ORD SFO LAX DFW Graphs Graphs
Subgraphs, Connected Components, Spanning Trees
Depth-First Search D B A C E Depth-First Search Depth-First Search
Searching Graphs ORD SFO LAX DFW Spring 2007
Graphs Part 1 ORD SFO LAX DFW
Copyright © Aiman Hanna All rights reserved
Depth-First Search D B A C E 4/13/2019 5:23 AM Depth-First Search
Breadth-First Search L0 L1 L2 C B A E D F Breadth-First Search
Breadth-First Search L0 L1 L2 C B A E D F 4/25/2019 3:12 AM
Applications of BFS CSE 2011 Winter /17/2019 7:03 AM.
Breadth-First Search L0 L1 L2 C B A E D F 5/14/ :22 AM
Breadth-First Search L0 L1 L2 C B A E D F 7/28/2019 1:03 PM
Presentation transcript:

1 Subgraphs A subgraph S of a graph G is a graph such that The vertices of S are a subset of the vertices of G The edges of S are a subset of the edges of G A spanning subgraph of G is a subgraph that contains all the vertices of G Subgraph Spanning subgraph

2 Connectivity A graph is connected if there is a path between every pair of vertices A connected component of a graph G is a maximal connected subgraph of G Connected graph Non connected graph with two connected components

3 Trees and Forests A (free) tree is an undirected graph T such that T is connected T has no cycles This definition of tree is different from the one of a rooted tree A forest is an undirected graph without cycles The connected components of a forest are trees Tree Forest

4 Spanning Trees and Forests A spanning tree of a connected graph is a spanning subgraph that is a tree A spanning tree is not unique unless the graph is a tree Spanning trees have applications to the design of communication networks A spanning forest of a graph is a spanning subgraph that is a forest Graph Spanning tree

Breadth-First Search Can be used to attempt to visit all nodes of a graph in a systematic manner Works with directed and undirected graphs Works with weighted and unweighted graphs

A H B F E D C G Overview Task: Conduct a breadth-first search of the graph starting with node D Each node has one of the three statuses: unvisited, visited (or discovered), processed Breadth-first search starts with given node 0

A H B F E D C G Overview Nodes visited: D Nodes processed: Breadth-first search starts with given node Then visits nodes adjacent in some specified order (e.g., alphabetical) Like ripples in a pond 0 1

A H B F E D C G Overview Nodes visited: D, C Nodes processed: Breadth-first search starts with given node Then visits nodes adjacent in some specified order (e.g., alphabetical) Like ripples in a pond 0 1

A H B F E D C G Overview Nodes visited: D, C, E Nodes processed: Breadth-first search starts with given node Then visits nodes adjacent in some specified order (e.g., alphabetical) Like ripples in a pond 0 1

A H B F E D C G Overview Nodes visited: D, C, E, F Nodes processed: D Breadth-first search starts with given node Then visits nodes adjacent in some specified order (e.g., alphabetical) Like ripples in a pond 0 1

A H B F E D C G Overview Nodes visited: D, C, E, F, G Nodes processed: D, C, E When all nodes in ripple are visited, visit nodes in next ripples 0 2 1

A H B F E D C G Overview Nodes visited: D, C, E, F, G, H Nodes processed: D, C, E, F, G When all nodes in ripple are visited, visit nodes in next ripples

A H B F E D C G Overview Nodes visited: D, C, E, F, G, H, A Nodes processed: D, C, E, F, G When all nodes in ripple are visited, visit nodes in next ripples

A H B F E D C G Overview Nodes visited: D, C, E, F, G, H, A, B Nodes processed: D, C, E, F, G, H, A, B When all nodes in ripple are visited, visit nodes in next ripples

A H B F E D C G Walk-Through Enqueued Array A B C D E F G H How is this accomplished? Using a queue for visited but not yet processed nodes! Rules: (1) Maintain an enqueued array. (2) Process node when dequeued. Q :

A H B F E D C G Walk-Through Enqueued Array A B C D√ E F G H Enqueue D. Notice, D not yet visited. Q : D Nodes visited:

A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G H Dequeue D. Visit D. Enqueue unenqueued nodes adjacent to D. Q : C  E  F Nodes visited: D

A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G H Dequeue C. Visit C. Enqueue unenqueued nodes adjacent to C. Q : E  F Nodes visited: D, C

A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G H Dequeue E. Visit E. Enqueue unenqueued nodes adjacent to E. Q : F  G Nodes visited: D, C, E

A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G√ H Dequeue F. Visit F. Enqueue unenqueued nodes adjacent to F. Q : G Nodes visited: D, C, E, F

A H B F E D C G Walk-Through Enqueued Array A B C√ D√ E√ F√ G√ H√ Dequeue G. Visit G. Enqueue unenqueued nodes adjacent to G. Q : H Nodes visited: D, C, E, F, G

A H B F E D C G Walk-Through Enqueued Array A√ B√ C√ D√ E√ F√ G√ H√ Dequeue H. Visit H. Enqueue unenqueued nodes adjacent to H. Q : A  B Nodes visited: D, C, E, F, G, H

A H B F E D C G Walk-Through Enqueued Array A√ B√ C√ D√ E√ F√ G√ H√ Dequeue A. Visit A. Enqueue unenqueued nodes adjacent to A. Q : B Nodes visited: D, C, E, F, G, H, A

A H B F E D C G Walk-Through Enqueued Array A√ B√ C√ D√ E√ F√ G√ H√ Dequeue B. Visit B. Enqueue unenqueued nodes adjacent to B. Q : (empty) Nodes visited: D, C, E, F, G, H, A, B

A H B F E D C G Walk-Through Enqueued Array A√ B√ C√ D√ E√ F√ G√ H√ Q empty. Algorithm done. Q is empty Nodes visited: D, C, E, F, G, H, A, B

Consider Trees 1.What do we call a breadth-first traversal on trees? 2.If we consider only each edge (u, v) where node v is visited for the first time by DFS from node u. What do we call the subgraph consisted of these edges?

Consider Trees 1.What do we call a breadth-first traversal on trees? Preorder traversal 2.If we consider only each edge (u, v) where node v is visited for the first time by BFS from node u. What do we call the subgraph consisted of these edges? The BFS tree. A H B F E D C G

Depth-First Search Also called Depth-First Search Can be used to attempt to visit all nodes of a graph in a systematic manner Works with directed and undirected graphs Works with weighted and unweighted graphs

A H B F E D C G Walk-Through Visited Array A B C D E F G H Task: Conduct a depth-first search of the graph starting with node D

A H B F E D C G Walk-Through Visited Array A B C D √ E F G H Visit D D The order nodes are visited: D

A H B F E D C G Walk-Through Visited Array A B C D √ E F G H Consider nodes adjacent to D, decide to visit C first (Rule: visit adjacent nodes in alphabetical order) D The order nodes are visited: D

A H B F E D C G Walk-Through Visited Array A B C √ D √ E F G H Visit C CDCD The order nodes are visited: D, C

A H B F E D C G Walk-Through Visited Array A B C √ D √ E F G H No nodes adjacent to C; cannot continue  backtrack, i.e., pop stack and restore previous state CDCD The order nodes are visited: D, C

A H B F E D C G Walk-Through Visited Array A B C √ D √ E F G H Back to D – C has been visited, decide to visit E next D The order nodes are visited: D, C

A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G H Back to D – C has been visited, decide to visit E next EDED The order nodes are visited: D, C, E

A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G H Only G is adjacent to E EDED The order nodes are visited: D, C, E

A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G √ H Visit G GEDGED The order nodes are visited: D, C, E, G

A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G √ H Nodes D and H are adjacent to G. D has already been visited. Decide to visit H. GEDGED The order nodes are visited: D, C, E, G

A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G √ H √ Visit H HGEDHGED The order nodes are visited: D, C, E, G, H

A H B F E D C G Walk-Through Visited Array A B C √ D √ E √ F G √ H √ Nodes A and B are adjacent to F. Decide to visit A next. HGEDHGED The order nodes are visited: D, C, E, G, H

A H B F E D C G Walk-Through Visited Array A √ B C √ D √ E √ F G √ H √ Visit A AHGEDAHGED The order nodes are visited: D, C, E, G, H, A

A H B F E D C G Walk-Through Visited Array A √ B C √ D √ E √ F G √ H √ Only Node B is adjacent to A. Decide to visit B next. AHGEDAHGED The order nodes are visited: D, C, E, G, H, A

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ Visit B BAHGEDBAHGED The order nodes are visited: D, C, E, G, H, A, B

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to B. Backtrack (pop the stack). AHGEDAHGED The order nodes are visited: D, C, E, G, H, A, B

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to A. Backtrack (pop the stack). HGEDHGED The order nodes are visited: D, C, E, G, H, A, B

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to H. Backtrack (pop the stack). GEDGED The order nodes are visited: D, C, E, G, H, A, B

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to G. Backtrack (pop the stack). EDED The order nodes are visited: D, C, E, G, H, A, B

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ No unvisited nodes adjacent to E. Backtrack (pop the stack). D The order nodes are visited: D, C, E, G, H, A, B

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F G √ H √ F is unvisited and is adjacent to D. Decide to visit F next. D The order nodes are visited: D, C, E, G, H, A, B

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F √ G √ H √ Visit F FDFD The order nodes are visited: D, C, E, G, H, A, B, F

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F √ G √ H √ No unvisited nodes adjacent to F. Backtrack. D The order nodes are visited: D, C, E, G, H, A, B, F

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F √ G √ H √ No unvisited nodes adjacent to D. Backtrack. The order nodes are visited: D, C, E, G, H, A, B, F

A H B F E D C G Walk-Through Visited Array A √ B √ C √ D √ E √ F √ G √ H √ Stack is empty. Depth-first traversal is done. The order nodes are visited: D, C, E, G, H, A, B, F

54 Depth-First Search Depth-first search (DFS) is a general technique for traversing a graph A DFS traversal of a graph G Visits all the vertices and edges of G Determines whether G is connected Computes the connected components of G Computes a spanning forest of G DFS on a graph with n vertices and m edges takes O(n  m ) time DFS can be further extended to solve other graph problems Find and report a path between two given vertices Find a cycle in the graph

55 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)  UNVISITED setLabel(e, DISCOVERY) DFS(G, w) else if getLabel(w)  VISITED setLabel(e, BACK) else // getLabel(w)  PROCESSED setLabel(e, CROSS) setLabel(u, PROCESSED) 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, UNVISITED) for all e  G.edges() setLabel(e, UNEXPLORED) for all v  G.vertices() if getLabel(v)  UNVISITED DFS(G, v)

56 Example (undirected graph) DB A C ED B A C ED B A C E discovery edge back edge A visited vertex A unvisited vertex unexplored edge

57 Example (cont.) DB A C E DB A C E DB A C E D B A C E

A H B F E D C G Classify edges by DFS The order nodes are visited: D, C, E, G, H, A, B, F discovery edge back edge cross edge (H,B) is labeled as CROSS, but it is a FORWARD edge.

Classification of Edges of G with Spanning Tree T An edge (u,v) of T is tree edge An edge (u,v) of G-T is back edge if u is a descendent of v. An edge (u,v) of G-T is forward edge if u is an ancestor of v. Else (u,v) is a cross edge

Classification of Edges of G via DFS Spanning Tree T G T

DFS tree T in an undirected graph has no cross or forward edges

62 DFS and Maze Traversal The DFS algorithm is similar to a classic strategy for exploring a maze We mark each intersection, corner and dead end (vertex) visited We mark each corridor (edge ) traversed We keep track of the path back to the entrance (start vertex) by means of a rope (recursion stack)

63 Properties of DFS Property 1 DFS(G, v) visits all the vertices and edges in the connected component of v Property 2 The discovery edges labeled by DFS(G, v) form a spanning tree of the connected component of v DB A C E

64 Analysis of DFS Setting/getting a vertex/edge label takes O(1) time Each vertex is labeled twice once as UNVISITED once as VISITED once as PROCESSED Each edge is labeled twice once as UNEXPLORED once as DISCOVERY or BACK or CROSS Method incidentEdges is called once for each vertex DFS runs in O(n  m) time provided the graph is represented by the adjacency list structure Note that  v deg(v)  2m

65 Path Finding We can specialize the DFS algorithm to find a path between two given vertices u and z using the template method pattern We call DFS(G, u) with u as the start vertex We use a stack S to keep track of the path between the start vertex and the current vertex As soon as destination vertex z is encountered, we return the path as the contents of the stack Algorithm pathDFS(G, v, z) setLabel(v, VISITED) S.push(v) if v  z return S.elements() for all e  G.incidentEdges(v) if getLabel(e)  UNEXPLORED w  opposite(v,e) if getLabel(w)  UNEXPLORED setLabel(e, DISCOVERY) S.push(e) pathDFS(G, w, z) S.pop(e) else setLabel(e, BACK) S.pop(v)

66 Cycle Finding We can specialize the DFS algorithm to find a simple cycle using the template method pattern We use a stack S to keep track of the path between the start vertex and the current vertex As soon as a back edge (v, w) is encountered, we return the cycle as the portion of the stack from the top to vertex w Algorithm cycleDFS(G, v, z) setLabel(v, VISITED) S.push(v) for all e  G.incidentEdges(v) if getLabel(e)  UNEXPLORED w  opposite(v,e) S.push(e) if getLabel(w)  UNEXPLORED setLabel(e, DISCOVERY) pathDFS(G, w, z) S.pop(e) else T  new empty stack repeat o  S.pop() T.push(o) until o  w return T.elements() S.pop(v)