Topological Sorting

 

Topological Sorting

  • Difficulty Level : Medium
  • Last Updated : 29 Jan, 2023

Topological sorting for Directed Acyclic Graph (DAG) is a linear ordering of vertices such that for every directed edge u v, vertex u comes before v in the ordering.

Note: Topological Sorting for a graph is not possible if the graph is not a DAG.

For example, a topological sorting of the following graph is “5 4 2 3 1 0”. There can be more than one topological sorting for a graph. Another topological sorting of the following graph is “4 5 2 3 1 0”. The first vertex in topological sorting is always a vertex with an in-degree of 0 (a vertex with no incoming edges).
 

graph 

Solve Problem
Submission count: 1.2L

Topological Sorting vs Depth First Traversal (DFS)

In DFS, we print a vertex and then recursively call DFS for its adjacent vertices. In topological sorting, we need to print a vertex before its adjacent vertices. 

For example, in the given graph, the vertex ‘5’ should be printed before vertex ‘0’, but unlike DFS, the vertex ‘4’ should also be printed before vertex ‘0’. So Topological sorting is different from DFS. For example, a DFS of the shown graph is “5 2 3 1 0 4”, but it is not a topological sorting.

Algorithm for Topological Sorting:

Prerequisite: DFS

We can modify DFS to find the Topological Sorting of a graph. In DFS

  • We start from a vertex, we first print it, and then 
  • Recursively call DFS for its adjacent vertices. 

In topological sorting,

  • We use a temporary stack. 
  • We don’t print the vertex immediately, 
  • we first recursively call topological sorting for all its adjacent vertices, then push it to a stack. 
  • Finally, print the contents of the stack. 

Note: A vertex is pushed to stack only when all of its adjacent vertices (and their adjacent vertices and so on) are already in the stack

Approach:

  • Create a stack to store the nodes.
  • Initialize visited array of size to keep the record of visited nodes.
  • Run a loop from till N
    • if the node is not marked True in visited array
      • Call the recursive function for topological sort and perform the following steps.
        • Mark the current node as True in the visited array.
        • Run a loop on all the nodes which has a directed edge to the current node
          • if the node is not marked True in the visited array:
            • Recursively call the topological sort function on the node
        • Push the current node in the stack.
  • Print all the elements in the stack.

Below image is an illustration of the above approach:

Topological-Sorting

Comments

Popular posts from this blog

Regression and correlation analysis

Topological data analysis

Structure theorem