cs 225
play

CS 225 Data Structures April 16 Graph Traversal Wad ade Fag - PowerPoint PPT Presentation

CS 225 Data Structures April 16 Graph Traversal Wad ade Fag agen-Ulm lmschneid ider Graph ADT Functions: - insertVertex(K key); Data: - insertEdge(Vertex v1, Vertex v2, K key); - Vertices - Edges - removeVertex(Vertex v); - Some data


  1. CS 225 Data Structures April 16 – Graph Traversal Wad ade Fag agen-Ulm lmschneid ider

  2. Graph ADT Functions: - insertVertex(K key); Data: - insertEdge(Vertex v1, Vertex v2, K key); - Vertices - Edges - removeVertex(Vertex v); - Some data structure - removeEdge(Vertex v1, Vertex v2); maintaining the structure between vertices and edges. - incidentEdges(Vertex v); V - areAdjacent(Vertex v1, Vertex v2); b d X Z h - origin(Edge e); e W g - destination(Edge e); f Y

  3. Key Ideas: Edge List - Given a vertex, O(1) lookup in vertex list - Implement w/ a hash table, etc u - All basic ADT operations runs in O(m) time a c b d v w z Vertex List Edge List u u v a v v w b w u w c z w z d

  4. Key Ideas: Adja jacency Matrix - Given a vertex, O(1) lookup in vertex list u - Given a pair of vertices (an edge), a c O(1) lookup in the matrix b d v w z - Undirected graphs can use an upper triangular matrix u v w z u u v a u Ø Ø v v w b v Ø Ø w u w c w Ø z w z d z Ø

  5. Adja jacency List u a c b d v w z a c u v a u d=2 a b v w b v d=2 b c d u w c w d=3 w z d z d d=1

  6. Key Ideas: Adja jacency List - O(1) lookup in vertex list - Vertex list contains a doubly-linked u adjacency list a c b d - O(1) access to the adjacent vertex’s v w z node in adjacency list (via the edge list) - Vertex list maintains a a c count of incident u v a u d=2 edges, or deg(v) a b v w b v d=2 - Many operations run b c d in O(deg(v)), and u w c w d=3 deg (v) ≤ n -1, O(n). w z d z d d=1

  7. Edge List Adjacency Matrix Adjacency List Expressed as big-O N 2 n+m n+m Space 1 n 1 insertVertex(v) m n deg(v) removeVertex(v) 1 1 1 insertEdge(v, w, k) 1 1 1 removeEdge(v, w) m n deg(v) incidentEdges(v) min( deg(v), m 1 areAdjacent(v, w) deg(w) )

  8. Traversal: Objective: Visit every vertex and every edge in the graph. Purpose: Search for interesting sub-structures in the graph. We’ve seen traversal before ….but it’s different: • • Ordered • • Obvious Start • •

  9. Traversal: BFS A C D B E F G H

  10. d p Adjacent Edges Traversal: BFS 0 A A C B D 1 A B A C E A 1 A C B A D E F 1 A D A C F H C D B 2 C E B C G E F 2 C F C D G 3 E G E F H G H 2 D H D G G H F E D B C A

  11. BFS(G): 1 2 Input: Graph, G 3 Output: A labeling of the edges on 4 G as discovery and cross edges 5 6 foreach (Vertex v : G.vertices()): 7 setLabel(v, UNEXPLORED) 8 foreach (Edge e : G.edges()): 9 setLabel(e, UNEXPLORED) 10 foreach (Vertex v : G.vertices()): 11 if getLabel(v) == UNEXPLORED: 12 BFS(G, v) BFS(G, v): 14 15 Queue q 16 setLabel(v, VISITED) 17 q.enqueue(v) 18 19 while !q.empty(): 20 v = q.dequeue() 21 foreach (Vertex w : G.adjacent(v)): 22 if getLabel(w) == UNEXPLORED: 23 setLabel(v, w, DISCOVERY) 24 setLabel(w, VISITED) 25 q.enqueue(w) 26 elseif getLabel(v, w) == UNEXPLORED: 27 setLabel(v, w, CROSS)

  12. BFS Analysis Q: Does our implementation handle disjoint graphs? If so, what code handles this? • How do we use this to count components? Q: Does our implementation detect a cycle? • How do we update our code to detect a cycle? Q: What is the running time?

  13. d p v Adjacent Running time of f BFS 0 A A C B D 1 A B A C E A 1 A C B A D E F C D B 1 A D A C F H 2 C E B C G E F 2 C F C D G G H 3 E G E F H While-loop at :19 ? 2 D H D G For-loop at :21 ? G H F E D B C A

  14. BFS(G): 1 2 Input: Graph, G 3 Output: A labeling of the edges on 4 G as discovery and cross edges 5 6 foreach (Vertex v : G.vertices()): 7 setLabel(v, UNEXPLORED) 8 foreach (Edge e : G.edges()): 9 setLabel(e, UNEXPLORED) 10 foreach (Vertex v : G.vertices()): 11 if getLabel(v) == UNEXPLORED: 12 BFS(G, v) BFS(G, v): 14 15 Queue q 16 setLabel(v, VISITED) 17 q.enqueue(v) 18 19 while !q.empty(): 20 v = q.dequeue() 21 foreach (Vertex w : G.adjacent(v)): 22 if getLabel(w) == UNEXPLORED: 23 setLabel(v, w, DISCOVERY) 24 setLabel(w, VISITED) 25 q.enqueue(w) 26 elseif getLabel(v, w) == UNEXPLORED: 27 setLabel(v, w, CROSS)

  15. d p v Adjacent BFS Observations 0 A A C B D Q: What is a shortest path 1 A B A C E from A to H ? 1 A C B A D E F 1 A D A C F H 2 C E Q: What is a shortest path B C G from E to H ? 2 C F C D G 3 E G E F H 2 D H D G Q: How does a cross edge relate to d ? A C D B Q: What structure is made E F from discovery edges? G H

  16. BFS Observations Obs. 1: Traversals can be used to count components. Obs. 2: Traversals can be used to detect cycles. Obs. 3: In BFS, d provides the shortest distance to every vertex. Obs. 4: In BFS, the endpoints of a cross edge never differ in distance, d , by more than 1: |d(u) - d(v)| = 1

  17. Traversal: DFS D A B C F H E G K J

  18. BFS(G): 1 2 Input: Graph, G 3 Output: A labeling of the edges on 4 G as discovery and cross edges 5 6 foreach (Vertex v : G.vertices()): 7 setLabel(v, UNEXPLORED) 8 foreach (Edge e : G.edges()): 9 setLabel(e, UNEXPLORED) 10 foreach (Vertex v : G.vertices()): 11 if getLabel(v) == UNEXPLORED: 12 BFS(G, v) BFS(G, v): 14 15 Queue q 16 setLabel(v, VISITED) 17 q.enqueue(v) 18 19 while !q.empty(): 20 v = q.dequeue() 21 foreach (Vertex w : G.adjacent(v)): 22 if getLabel(w) == UNEXPLORED: 23 setLabel(v, w, DISCOVERY) 24 setLabel(w, VISITED) 25 q.enqueue(w) 26 elseif getLabel(v, w) == UNEXPLORED: 27 setLabel(v, w, CROSS)

  19. DFS(G): 1 2 Input: Graph, G 3 Output: A labeling of the edges on 4 G as discovery and back edges 5 6 foreach (Vertex v : G.vertices()): 7 setLabel(v, UNEXPLORED) 8 foreach (Edge e : G.edges()): 9 setLabel(e, UNEXPLORED) 10 foreach (Vertex v : G.vertices()): 11 if getLabel(v) == UNEXPLORED: 12 DFS(G, v) DFS(G, v): 14 15 Queue q 16 setLabel(v, VISITED) 17 q.enqueue(v) 18 19 while !q.empty(): 20 v = q.dequeue() 21 foreach (Vertex w : G.adjacent(v)): 22 if getLabel(w) == UNEXPLORED: 23 setLabel(v, w, DISCOVERY) 24 setLabel(w, VISITED) 25 DFS(G, w) 26 elseif getLabel(v, w) == UNEXPLORED: 27 setLabel(v, w, BACK)

  20. Running time of f DFS D A B C Labeling: F H • Vertex: E G K J • Edge: Queries: • Vertex: • Edge:

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend