Graph Introduction, Searching Graph Theory Basics - Anil Kishore
Graph A collections of objects and pair wise relations between them A mathematical structure Objects are called Vertices ( or Nodes ) Relationship is shown using Edges
Graph Vertex Set V = { 1, 2, 3, 4, 5, 6} Edge Set E = { 12, 14, 34, 45, 46, 25, 56 } We use N and M for the corresponding sizes |V| = N, |E| = M
Storing a Graph How to store a Graph ? The two popular representations are – Adjacency Matrix N x N matrix A of 0s and 1s – Adjacency List A list of neighbors for each of the vertices
Adjacency Matrix A A[u][v] = 1, if vertex u and vertex v are adjacent = 0, otherwise Space : O(N 2 ) Symmetric Matrix
Adjacency List : { 2, 4 } 2 : { 1, 5 } 3 : { 4 } 4 : { 1, 3, 5, 6 } 5 : { 2, 4, 6 } 6 : { 4, 5 } Space : O(N+2M) Vertex u : list of all neighbors of u
Directions and Weights Edges and Vertices can have weight e.g.: length of the road, toll gate charge in a city. Edges can have direction ( like one-way roads )
Path, Cycle A Path of length n- 1 is a sequence of vertices u 1, u 2, …, u n such that vertices u i and u i+1 are adjacent o e.g. 1 – 2 – 5 – 4 – 3 is a path A Cycle of length n is a sequence of vertices u 1, u 2, …, u n such that vertices u i and u i+1 are adjacent and also u 1 and u n adjacent o e.g. 1 – 2 – 5 – 4 is a cycle
Power of Adjacency Matrix Number of paths ( possibly cyclic ) of length K from u to v F(u, v, K) = Sum of ( F(u, w, k-1) * F(w, v, 1) ) ( for all possible intermediate vertices w ) This is similar to the only computation step in Matrix Multiplication Note that F(u, v, 1) = A[u][v] A K [u][v] = Number of paths of length exactly K from u to v
Connected, Tree, Complete A graph is said to be connected if there exists a path between all pairs of vertices – How many minimum edges we need to make a n vertices graph connected ? – Cycles introduce redundant edges A Tree is a connected graph with out cycles ( acyclic ) – A tree on n vertices has exactly (n-1) edges A Complete Graph has all possible edges present in it – A complete on n vertices (K n ) has n C 2 edges
Traversing a graph Visit all the vertices in the graph in a particular order – Depth-first Search (DFS) visit child nodes before visiting sibling nodes – Breadth-first Search (BFS) visit sibling nodes before visiting child nodes
Depth-first Search algorithm DFS( u ) // start time of u Mark u as ‘visited’ FOR each node v ∈ Adj.List(u) IF NOT visited(v) THEN par[v] := u DFS(v) ENDIF ENDFOR //end time of u END-DFS Visit an unvisited neighbor, thus recursively traverse along depth of the graph par[v] denotes the first preceding vertex from which vertex v was visited, and defines a DFS tree Applications : Checking connectivity Finding Connected Components Topological ordering many more…
DFS
DFS TREE
DFS Recursive algorithm The active nodes in the recursion are Pushed and Popped, similar to a Stack Instead of recursion, can implement using a Stack data structure Complexity : O( N + M )
Breadth-first Search algorithm BFS( s ) Mark all vertices u ‘unvisited’ Create an empty queue Q EnQueue(s, Q) mask s as ‘visited’ WHILE NOT Empty(Q) DO u := DeQueue(Q) FOR each v ∈ Adj.List(u) DO IF NOT visited(v) EnQueue(v, Q) mask v as ‘visited’ ENDFOR ENDWHILE End-BFS Visit the vertices in the order encountered Vertices nearer to s are processed before farther ones Applications : Checking connectivity Finding Connected Components Shortest path in unweighted graphs many more…
BFS Q :
BFS Q : 1
BFS Q : u = 1
BFS Q : 2, 4 u = 1
BFS Q : 4 u = 2
BFS Q : 4, 5 u = 2
BFS Q : 5 u = 4
BFS Q : 5, 3, 6 u = 4
BFS Q : 3, 6 u = 5
BFS Q : 6 u = 3
BFS Q : u = 6
BFS Visit the nodes level by level ( level order traversal ) All nodes at level k are the ones with shortest path to s equals to k Complexity : O( N + M ) s
References Introduction to Algorithms – Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - End -