graph basics
play

Graph Basics Lecturer: Shi Li Department of Computer Science and - PowerPoint PPT Presentation

CSE 431/531: Analysis of Algorithms Graph Basics Lecturer: Shi Li Department of Computer Science and Engineering University at Buffalo Outline Graphs 1 Connectivity and Graph Traversal 2 Testing Bipartiteness Topological Ordering 3 2/28


  1. CSE 431/531: Analysis of Algorithms Graph Basics Lecturer: Shi Li Department of Computer Science and Engineering University at Buffalo

  2. Outline Graphs 1 Connectivity and Graph Traversal 2 Testing Bipartiteness Topological Ordering 3 2/28

  3. Examples of Graphs Figure: Road Networks Figure: Internet Figure: Transition Graphs Figure: Social Networks 3/28

  4. (Undirected) Graph G = ( V, E ) 1 7 2 3 4 5 8 6 V : a set of vertices (nodes); V = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } E : pairwise relationships among V ; (undirected) graphs: relationship is symmetric, E contains subsets of size 2 E = {{ 1 , 2 } , { 1 , 3 } , { 2 , 3 } , { 2 , 4 } , { 2 , 5 } , { 3 , 5 } , { 3 , 7 } , { 3 , 8 } , { 4 , 5 } , { 5 , 6 } , { 7 , 8 }} 4/28

  5. Abuse of Notations For (undirected) graphs, we often use ( i, j ) to denote the set { i, j } . We call ( i, j ) an unordered pair; in this case ( i, j ) = ( j, i ) . 1 7 2 3 4 5 8 6 E = { (1 , 2) , (1 , 3) , (2 , 3) , (2 , 4) , (2 , 5) , (3 , 5) , (3 , 7) , (3 , 8) , (4 , 5) , (5 , 6) , (7 , 8) } 5/28

  6. Social Network : Undirected Transition Graph : Directed Road Network : Directed or Undirected Internet : Directed or Undirected 6/28

  7. Representation of Graphs 1 7 1: 2 3 6: 5 2: 1 3 4 5 7: 3 8 2 3 3: 1 2 5 7 8 4 5 8 4: 2 5 8: 3 7 6 5: 2 3 4 6 Adjacency matrix n × n matrix, A [ u, v ] = 1 if ( u, v ) ∈ E and A [ u, v ] = 0 otherwise A is symmetric if graph is undirected Linked lists For every vertex v , there is a linked list containing all neighbours of v . 7/28

  8. Comparison of Two Representations Assuming we are dealing with undirected graphs n : number of vertices m : number of edges, assuming n − 1 ≤ m ≤ n ( n − 1) / 2 d v : number of neighbors of v Matrix Linked Lists O ( n 2 ) memory usage O ( m ) time to check ( u, v ) ∈ E O (1) O ( d u ) time to list all neighbours of v O ( n ) O ( d v ) 8/28

  9. Outline Graphs 1 Connectivity and Graph Traversal 2 Testing Bipartiteness Topological Ordering 3 9/28

  10. Connectivity Problem Input: graph G = ( V, E ) , (using linked lists) two vertices s, t ∈ V Output: whether there is a path connecting s to t in G Algorithm: starting from s , search for all vertices that are reachable from s and check if the set contains t Breadth-First Search (BFS) Depth-First Search (DFS) 10/28

  11. Breadth-First Search (BFS) Build layers L 0 , L 1 , L 2 , L 3 , · · · L 0 = { s } L j +1 contains all nodes that are not in L 0 ∪ L 1 ∪ · · · ∪ L j and have an edge to a vertex in L j 1 7 2 3 4 5 8 6 11/28

  12. Implementing BFS using a Queue BFS ( s ) head ← 1 , tail ← 1 , queue [1] ← s 1 mark s as “visited” and all other vertices as “unvisited” 2 while head ≥ tail 3 v ← queue [ tail ] , tail ← tail + 1 4 for all neighbours u of v 5 if u is “unvisited” then 6 head ← head + 1 , queue [ head ] = u 7 mark u as “visited” 8 Running time: O ( n + m ) . 12/28

  13. Example of BFS via Queue head 1 7 1 2 3 4 5 7 8 6 2 3 4 5 8 tail v 6 13/28

  14. Depth-First Search (DFS) Starting from s Travel through the first edge leading out of the current vertex When reach an already-visited vertex (“dead-end”), go back Travel through the next edge If tried all edges leading out of the current vertex, go back 1 7 2 3 4 5 8 6 14/28

  15. Implementing DFS using a Stack DFS ( s ) head ← 1 , stack [1] ← s 1 mark all vertices as “unexplored” 2 while head ≥ 1 3 v ← stack [ head ] , head ← head − 1 4 if v is unexplored then 5 mark v as “explored” 6 for all neighbours u of v 7 if u is not explored then 8 head ← head + 1 , stack [ head ] = u 9 Running time: O ( n + m ) . 15/28

  16. Example of DFS using Stack head 1 7 v 2 3 4 5 8 6 1 2 3 5 4 6 7 8 explored vertices: 16/28

  17. Implementing DFS using Recurrsion DFS( s ) mark all vertices as “unexplored” 1 recursive-DFS( s ) 2 recursive-DFS ( v ) if v is explored then return 1 mark v as “explored” 2 for all neighbours u of v 3 recursive-DFS( u ) 4 17/28

  18. Outline Graphs 1 Connectivity and Graph Traversal 2 Testing Bipartiteness Topological Ordering 3 18/28

  19. Testing Bipartiteness: Applications of BFS Def. A graph G = ( V, E ) is a bipartite graph if there is a partition of V into two sets L and R such that for every edge ( u, v ) ∈ E , we have either u ∈ L, v ∈ R or v ∈ L, u ∈ R . 19/28

  20. Testing Bipartiteness Taking an arbitrary vertex s ∈ V Assuming s ∈ L w.l.o.g Neighbors of s must be in R Neighbors of neighbors of s must be in L · · · Report “not a bipartite graph” if contradiction was found If G contains multiple connected components, repeat above algorithm for each component 20/28

  21. Test Bipartiteness bad edges! 21/28

  22. Testing Bipartiteness using BFS BFS ( s ) head ← 1 , tail ← 1 , queue [1] ← s 1 mark s as “visited” and all other vertices as “unvisited” 2 color [ s ] ← 0 3 while head ≥ tail 4 v ← queue [ tail ] , tail ← tail + 1 5 for all neighbours u of v 6 if u is “unvisited” then 7 head ← head + 1 , queue [ head ] = u 8 mark u as “visited” 9 color [ u ] ← 1 − color [ v ] 10 elseif color [ u ] = color [ v ] then 11 print(“ G is not bipartite”) and exit 12 22/28

  23. Testing Bipartiteness using BFS mark all vertices as “unvisited” 1 for each vertex v ∈ V 2 if v is “unvisited” then 3 test-bipartiteness( v ) 4 print(“ G is bipartite”) 5 Obs. Running time of algorithm = O ( n + m ) Homework problem: using DFS to implement test-bipartiteness. 23/28

  24. Outline Graphs 1 Connectivity and Graph Traversal 2 Testing Bipartiteness Topological Ordering 3 24/28

  25. Topological Ordering Problem Input: a directed acyclic graph (DAG) G = ( V, E ) Output: 1-to-1 function π : V → { 1 , 2 , 3 · · · , n } , so that if ( u, v ) ∈ E then π ( u ) < π ( v ) 4 5 1 3 6 7 2 9 8 25/28

  26. Topological Ordering Algorithm: each time take a vertex without incoming edges, then remove the vertex and all its outgoing edges. 4 5 1 3 6 7 2 9 8 26/28

  27. Topological Ordering Algorithm: each time take a vertex without incoming edges, then remove the vertex and all its outgoing edges. Q: How to make the algorithm as efficient as possible? A: Use linked-lists of outgoing edges Maintain the in-degree d v of vertices Maintain a queue (or stack) of vertices v with d v = 0 27/28

  28. topological-sort ( G ) let d v ← 0 for every v ∈ V 1 for every v ∈ V 2 for every u such that ( v, u ) ∈ E 3 d u ← d u + 1 4 S ← { v : d v = 0 } , i ← 0 5 while S � = ∅ 6 v ← arbitrary vertex in S , S ← S \ { v } 7 i ← i + 1 , π ( v ) ← i 8 for every u such that ( v, u ) ∈ E 9 d u ← d u − 1 10 if d u = 0 then add u to S 11 12 if i < n then output “not a DAG” S can be represented using a queue or a stack Running time = O ( n + m ) 28/28

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