cs 225
play

CS 225 Data Structures No Novem ember er 16 Gr Graph aph Im - PowerPoint PPT Presentation

CS 225 Data Structures No Novem ember er 16 Gr Graph aph Im Implementations and Tr Traversals G G Ca Carl Evans Gr Grap aph ADT Functions: - insertVertex(K key); Data: - insertEdge(Vertex v1, Vertex v2, K key); - Vertices -


  1. CS 225 Data Structures No Novem ember er 16 – Gr Graph aph Im Implementations and Tr Traversals G G Ca Carl Evans

  2. Gr Grap aph 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); - areAdjacent(Vertex v1, Vertex v2); V b d X Z h - origin(Edge e); e - destination(Edge e); W g f Y

  3. Key Ideas: Ed 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: Adjacency M Ad Matri rix - 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. Gr Grap aph Imp Implemen ementati tion: Adjac jacen ency List u a c b d v w z u v a u v w b v w u w c w z d z

  6. Ad Adjacency L 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 w u w c d=3 w z d z d d=1

  7. Ad Adjacency L 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 w u w c d=3 w z d z d d=1

  8. insertVertex(K key): Adjacency L Ad 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 w u w c d=3 w z d z d d=1

  9. removeVertex(Vertex v): Adjacency L Ad 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 w u w c d=3 w z d z d d=1

  10. incidentEdges(Vertex v): Adjacency L Ad 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 w u w c d=3 w z d z d d=1

  11. areAdjacent(Vertex v1, Vertex v2): Adjacency L Ad 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 w u w c d=3 w z d z d d=1

  12. insertEdge(Vertex v1, Vertex v2, K key): Adjacency L Ad 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 w u w c d=3 w z d z d d=1

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

  14. mp_traversals and mp_mazes • mp_traversals • Vertex Set : The pixels are the vertices • Edge Set : There is an edge between every n/s/e/w pixel unless the color change exceeds the tolerance • There are several graphs here depending on the tolerance • mp_mazes • Vertex Set: The squares in the maze are the vertices • Edge Set: There is an edge between two vertices if canTravel() returns true • Once the maze is made this graph is a spanning tree of the graph with canTravel() returning true.

  15. Tr 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 • •

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

  17. Tr Traversal: BFS v d P Adjacent Edges A B A C C D B D E E F F G H G H

  18. Tr Traversal: BFS d p Adjacent Edges 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

  19. 1 BFS(G): 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) 14 BFS(G, v): 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)

  20. BF BFS An S 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?

  21. Ru Running t time of of BF BFS d p v Adjacent 0 A A C B D 1 A B A C E A 1 A C B A D E F C D 1 A D A C F H B 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

  22. 1 BFS(G): 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) 14 BFS(G, v): 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)

  23. BF BFS O S Observation ons d p v Adjacent 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 Q: What is a shortest path 2 C E 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

  24. BF BFS O S Observation ons 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

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

  26. 1 BFS(G): 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) 14 BFS(G, v): 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)

  27. 1 DFS(G): 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) 14 DFS(G, v): 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)

  28. Running t Ru time of of D DFS D A Labeling: B C 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