Graph Algorithms (8 Part Series)
1 Graph Algorithm – Breadth First Search
2 Graph Algorithm – Depth First Search
… 4 more parts…
3 Graph Algorithm – Cycle Detection in Undirected Graph using BFS
4 Graph Algorithm – Cycle Detection in Undirected Graph using DFS
5 Graph Algorithm – Bipartite Graph(BFS)
6 Graph Algorithm – Bipartite Graph(DFS)
7 Graph Algorithm – Topological Sorting
8 Graph Algorithm – Cycle Detection in Directed Graph using DFS
Directed acyclic graph
A directed acyclic graph or DAG is a directed graph with no directed cycles. It consists of vertices and edges, each edge directed from one vertex to another, such that those directions will never form a closed loop.
A directed graph is DAG only if topologically ordered.
What is Topological Sorting
Topological sorting for Directed Acyclic Graph is a linear ordering of vertices such that for every directed edge u->v, vertex u comes before v in the order. Topological Sorting for the graph is not possible if it is not a DAG.
There can be more than one topological sorting for a graph. The first vertex in topological sorting is always a vertex with an in-degree of zero.
DFS Algorithm to find Topological Sorting
Consider a Directed Acyclic Graph.
-
Initialise an empty stack, visited boolean array.
-
Start dfs from a node. Pass the stack, visited array, and node into the recursive method.
dfs(node, stack, visited).
-
Inside the dfs recursive function, mark the node as visited.
-
Traverse through all the unvisited children of the node.
-
Do dfs on the unvisited child.
-
Finally, push the node into the stack if all the child gets visited.
-
After completing the dfs traversal, check if the size of the stack is equal to the number of the node.
If not, the graph is not a DAG and does not have a topological order.
Else pop all the elements from the stack and store them in a result array. -
Return the result array.
Time and Space Complexity
-
We are traversing through all the nodes and edges. So time complexity will be O(V + E) where V = vertices or node, E = edges.
-
We use a visited array, an extra stack and an adjacency list for the graph. So the space complexity will be O(V) + O(V) + O(V + E) + extra space for the recursion stack.
Code
Originally Published on : LinkedIn Newsletter
Practice Problem
Github Link
Rohithv07 / LeetCodeTopInterviewQuestions
Leetcode Top Interview questions discussed in Leetcode. https://leetcode.com/explore/interview/card/top-interview-questions
LeetCodeTopInterviewQuestions
Leetcode Top Interview questions discussed in Leetcode. https://leetcode.com/explore/interview/card/top-interview-questions-easy/
Also Question answered from CodeSignal.com : https://app.codesignal.com/
Graph Algorithms (8 Part Series)
1 Graph Algorithm – Breadth First Search
2 Graph Algorithm – Depth First Search
… 4 more parts…
3 Graph Algorithm – Cycle Detection in Undirected Graph using BFS
4 Graph Algorithm – Cycle Detection in Undirected Graph using DFS
5 Graph Algorithm – Bipartite Graph(BFS)
6 Graph Algorithm – Bipartite Graph(DFS)
7 Graph Algorithm – Topological Sorting
8 Graph Algorithm – Cycle Detection in Directed Graph using DFS
暂无评论内容