graph traversals
play

Graph Traversals Autumn 2018 Shrirang (Shri) Mare - PowerPoint PPT Presentation

CSE 373: Data Structures and Algorithms Graph Traversals Autumn 2018 Shrirang (Shri) Mare shri@cs.washington.edu Thanks to Kasey Champion, Ben Jones, Adam Blank, Michael Lee, Evan McCarty, Robbie Weber, Whitaker Brand, Zora Fung, Stuart Reges,


  1. CSE 373: Data Structures and Algorithms Graph Traversals Autumn 2018 Shrirang (Shri) Mare shri@cs.washington.edu Thanks to Kasey Champion, Ben Jones, Adam Blank, Michael Lee, Evan McCarty, Robbie Weber, Whitaker Brand, Zora Fung, Stuart Reges, Justin Hsia, Ruth Anderson, and many others for sample slides and materials ...

  2. Review Graph Vocabulary Undirected Graph: Graph Direction A B - Un Undirected graph – edges have no direction and are two-way V = { A, B, C } E = { (A, B), (B, C) } inferred (B, A) and (C,B) Directed Graph: - Di Direct cted graphs – edges have direction and are thus one-way C V = { A, B, C } B A E = { (A, B), (B, C), (C, B) } Degree of a Vertex C - De Degree – the number of edges containing that vertex A : 1, B : 2, C : 1 - In In-de degr gree – the number of directed edges that point to a vertex A : 0, B : 2, C : 1 - Out Out-de degr gree – the number of directed edges that start at a vertex A : 1, B : 1, C : 1 CSE 373 AU 18 2

  3. Review Graph Vocabulary A B De Dense Gr Graph ph – a graph with a lot of edges E ∈ Θ(V 2 ) C D Sparse Graph ph – a graph with “few” edges E ∈ Θ(V) F E G I H CSE 373 AU 18 3

  4. Review Graph Vocabulary Self loop p – an edge that starts and ends at the same vertex A Pa Parallel edges – two edges with the same start and end vertices A B Simpl mple gr graph ph – a graph with no self-loops and no parallel edges CSE 373 AU 18 4

  5. Review Graph Vocabulary Walk – A sequence of ad Wa adjac jacent ent vertices. Each connected to next by an edge. A,B,C,D is a walk. A B C D So is A,B,A (Direct (D cted) ) Walk –must follow the direction of the edges A,B,C,D,A is a directed walk. A B C D A,B,A is not. Length – The number of edges in a walk Le - (A,B,C,D) has length 3. CSE 373 AU 18 5

  6. Graph Vocabulary Pa Path – A walk that doesn’t repeat a vertex. A,B,C,D is a path. A,B,A is not. B A C D Cy Cycle – path with an extra edge from last vertex back to first. A B C D Be careful looking at other r so sources. s. Some people call our “walks” “paths” and our “paths” “simple paths” Use the definition Us ons on on these slides. CSE 373 AU 18 6

  7. Paths and Reachability Common questions: - Is there a path between two vertices? (Can I drive from Seattle to LA?) - What is the length of the shortest path between two vertices? (How long will it take?) - List vertices that can reach the maximum number of nodes with a path of length 2. - Can every vertex reach every other on a short path? -Length of the longest shortest path is the “diameter” of a graph CSE 373 AU 18 7

  8. Practice A B C E D 1. Traversal A-B-C-D-B-E is a _______________ (Walk, Path, Neither) 2. Traversal B-E-A-B is a ________________ (Walk, Path, Neither) 3. _____________ does not contain a cycle. (Walk, Path) 4. Degree of Node B is ____________ CSE 373 AU 18 8

  9. Implementing a Graph Two main ways to implement a graph: 1. Adjacency Matrix 2. Adjacency List CSE 373 AU 18 9

  10. Adjacency Matrix A B C D Assign each vertex a number from 0 to V – 1 A T T Create a V x V array of Booleans (or Int, as 0 and 1) B If (x,y) ∈ E then arr[x][y] = true C T T D T Time complexity (in terms of V and E) - Get in-edges: - Get out–edges: B - Decide if an edge (u, w) exists: - Insert an edge: A - Delete an edge: C Space complexity: D CSE 373 AU 18 10

  11. Adjacency Matrix A B C D Assign each vertex a number from 0 to V – 1 A T T Create a V x V array of Booleans (or Int, as 0 and 1) B If (x,y) ∈ E then arr[x][y] = true C T T D T Time complexity (in terms of V and E) - Get in-edges: "( $ ) - Get out–edges: "( $ ) B - Decide if an edge (u, w) exists: "(1) - Insert an edge: "(1) A - Delete an edge: "(1) C Space complexity: "( $ ' ) D CSE 373 AU 18 11

  12. Adjacency List B A Create a Dictionary of size V from type V to Collection of E C If (x,y) ∈ E then add y to the set associated with the key x D Time complexity A 0 B C - Get in-edges: - Get out–edges: 1 B - Decide if an edge (u, w) exists: - Insert an edge: - Delete an edge: 2 C B D Space complexity: 3 A D CSE 373 AU 18 12

  13. Adjacency List B A Create a Dictionary of size V from type V to Collection of E C If (x,y) ∈ E then add y to the set associated with the key x D Time complexity A 0 B C - Get in-edges: "( $ + |'|) - Get out–edges: "(1) 1 B - Decide if an edge (u, w) exists: "(1) - Insert an edge: "(1) - Delete an edge: "(1) 2 C B D Space complexity: "( |V| + |E|) 3 A D CSE 373 AU 18 13

  14. Graph Traversal root Traversing a tree: Traversing a graph: start at root, Where to start? visit children in order Which nodes to visit and in which order? CSE 373 AU 18 14

  15. Traversing a graph Three collections: ‘unvisited’, ‘visited’, and ‘to be visited’. And a pointer to the ‘current’ vertex 1. Pick any vertex to start. The vertex you are currently processing is your ‘current’ vertex. 2. Put all neighbors of the current vertex in a “to be visited” collection 3. Mark the current vertex “visited” 4. Move onto next vertex in “to be visited” collection 5. Put all unvisited neighbors in “to be visited” 6. Move onto next vertex in “to be visited” collection 7. Repeat… CSE 373 AU 18 15

  16. Traversing a graph Breadth first search Depth first search CSE 373 AU 18 16

  17. BFS and DFS on Trees Breadth first search Depth first search (Level order traversal) (pre-order, in-order, post-order traversals) CSE 373 AU 18 17

  18. Breadth First Search search(graph) toVisit.enqueue(first vertex) mark first vertex as visited F while(toVisit is not empty) J current = toVisit.dequeue() G D for (V : current.neighbors()) A if (v is not visited) I toVisit.enqueue(v) H mark v as visited E finished.add(current) B Current node: H I A E D B G C F G C Queue: B D E C F G H I Finished: A B D E C F G H I CSE 373 AU 18 18

  19. Breadth First Search Analysis search(graph) toVisit.enqueue(first vertex) mark first vertex as visited F while(toVisit is not empty) J current = toVisit.dequeue() G D for (V : current.neighbors()) A if (v is not visited) I toVisit.enqueue(v) H mark v as visited E finished.add(current) B Visited: A B D E C F G H I C 1 time each How many times do you visit each node? Max 2 times each How many times do you traverse each edge? - Putting them into toVisit - Checking if they’re visited Runtime? O(V + 2E) = O(V + E) “graph linear” CSE 373 AU 18 19

  20. Depth First Search (DFS) BFS uses a queue to order which vertex we move to next Gives us a growing “frontier” movement across graph Can you move in a different pattern? Can you use a different data structure? What if you used a stack instead? dfs(graph) bfs(graph) toVisit. push (first vertex) toVisit.enqueue(first vertex) mark first vertex as visited mark first vertex as visited while(toVisit is not empty) while(toVisit is not empty) current = toVisit. pop () current = toVisit.dequeue() for (V : current.neighbors()) for (V : current.neighbors()) if (V is not visited) if (v is not visited) toVisit. push (v) toVisit.enqueue(v) mark v as visited mark v as visited finished.add(current) finished.add(current) CSE 373 AU 18 20

  21. Depth First Search dfs(graph) toVisit. push (first vertex) mark first vertex as visited F while(toVisit is not empty) current = toVisit. pop () J for (V : current.neighbors()) G D if (V is not visited) A I toVisit. push (v) mark v as visited H finished.add(current) E B Current node: G A B F H E C D I Stack: C D C B E I H G F Finished: A B E H G F I C D 1 time each How many times do you visit each node? Max 2 times each How many times do you traverse each edge? - Putting them into toVisit - Checking if they’re visited “graph linear” Runtime? O(V + 2E) = O(V + E) CSE 373 AU 18 21

  22. Practice S R A B C 1. Write the BFS traversal when starting at node A: P E D 2. Write the DFS traversal when starting at node A: CSE 373 AU 18 22

  23. BFS and DFS - BFS and DFS have the same worst-case time and space complexity - The differ in terms of the order they visit the vertices and as a result they provide some additional information about the graph. For example: - BFS is useful to find shortest paths - DFS is useful to check the presence of a cycle CSE 373 AU 18 23

Recommend


More recommend