3.5.7 · HinglishGraphs

Topological sort — DFS-based, Kahn's algorithm (BFS-based)

2,144 words10 min readRead in English

3.5.7 · Coding › Graphs


Topological sort HAI kya?

Cycle kyun ise tod deti hai? Agar hai, toh ko se pehle, ko se pehle, aur ko se pehle aana chahiye. Iska matlab ko se pehle aana padega — jo impossible hai. Isliye cycles ⇒ koi topological order nahi.


DO algorithms kyun hain?

Dono same problem solve karte hain lekin sochne ka tarika alag hai:

DFS-based Kahn's (BFS-based)
Core idea Ek node apne saare descendants ke baad finish hoti hai Jo nodes ke koi prerequisites baaki nahi unhe baar baar hatao
Output banta hai Reverse finish order mein Arrival order mein
Cycle detection Back edge (gray node) $
Data structure Recursion stack Queue + indegree array

Dono mein chalte hain.


Algorithm 1 — DFS-based

Yeh kaise kaam karta hai (first principles se derivation)

Claim: Agar hum DFS ke vertices finish karne ka order reverse karein, toh har edge aage point karegi.

Koi bhi edge lo. Jab DFS pehli baar ko touch kare, ki state consider karo:

  • unvisited: DFS, ko ke descendant ki tarah explore karega, isliye se pehle finish hoga. ✅ ( baad mein finish hoga ⇒ reversed order mein pehle)
  • already finished: toh , ke start hone se pehle hi finish ho chuka tha. ✅
  • in progress (gray, stack par): iska matlab ka path already hai, saath mein edge bhi = ek cycle. DAG mein allowed nahi. ❌ blocked.

Har valid (DAG) case mein, ke baad finish hota hai, toh reversed finish list mein , se pehle aata hai. Edge aage point karti hai. ∎

function topoDFS(G):
    visited = {}, finished = []
    for each vertex u in V:
        if u not visited: dfs(u)
    return reverse(finished)

function dfs(u):
    mark u visited (GRAY)
    for each edge u -> v:
        if v GRAY:  report CYCLE   # back edge
        if v not visited: dfs(v)
    mark u BLACK
    finished.append(u)             # append on FINISH

Algorithm 2 — Kahn's Algorithm (BFS-based)

Yeh kaise kaam karta hai (derivation)

Define karo = mein point karne wali edges ki sankhya.

  1. Ek DAG mein hamesha kam se kam ek vertex hoti hai jiska indegree 0 ho (warna incoming edges ko backward follow karte raho ⇒ repeat ⇒ cycle). Toh hum hamesha start kar sakte hain.
  2. Ek 0-indegree vertex ko emit karke uski out-edges delete karne se baaki graph DAG hi rehta hai. Induction se poora graph khali ho jaata hai.
  3. Har edge aage point karti hai: jab hum emit karte hain, ke saare prerequisites already emit ho chuke hain; edge , ko decrement karti hai, toh strictly baad mein emit hota hai. ✅
function kahn(G):
    compute indeg[v] for all v
    Q = queue of all v with indeg[v] == 0
    order = []
    while Q not empty:
        u = Q.pop()
        order.append(u)
        for each edge u -> v:
            indeg[v] -= 1
            if indeg[v] == 0: Q.push(v)
    if len(order) < |V|: report CYCLE   # leftover nodes stuck in a cycle
    return order
Figure — Topological sort — DFS-based, Kahn's algorithm (BFS-based)

Worked Example (same graph, dono methods)

Graph edges: 5→0, 5→2, 4→0, 4→1, 2→3, 3→1 Vertices: 0 1 2 3 4 5

Kahn's walk-through

Indegrees: 0:2, 1:2, 2:1, 3:1, 4:0, 5:0

Step Queue (indeg 0) Pop Emit Updates
1 [4, 5] 4 4 0→1, 1→1
2 [5] 5 5 0→0✅, 2→0✅
3 [0, 2] 0 0
4 [2] 2 2 3→0✅
5 [3] 3 3 1→0✅
6 [1] 1 1

Order: 4 5 0 2 3 1Yeh step kyun? Humne hamesha indegree-0 node pull kiya, jo guarantee karta hai ki har prerequisite pehle hi bahar aa chuka tha. 6 emit = |V| ⇒ valid DAG.

DFS walk-through (5 se start, phir 4)

  • dfs(5)→dfs(0) finish 0 →dfs(2)→dfs(3)→dfs(1) finish 1, finish 3, finish 2, finish 5
  • dfs(4): 0,1 done → finish 4
  • finished list = [0,1,3,2,5,4]
  • Reverse = 4 5 2 3 1 0

Yeh step kyun? Hum har node ko tabhi append karte hain jab uske descendants finish ho jaayein, isliye reverse karne par roots pehle aa jaate hain. (Note: Kahn se alag valid order — dono correct hain!)


Common Mistakes


Active Recall

Recall Quick self-test (answers cover kar lo)
  • Topological order kab exist karta hai? → iff graph ek DAG ho.
  • DFS-topo mein node kab record hoti hai? → finish hone par, phir reverse karo.
  • Kahn's ka starting set kya hai? → saare vertices jinki indegree 0 ho.
  • Dono algorithms ki complexity? → .
  • Har ek cycle kaise detect karta hai? → DFS: gray node ki taraf back edge. Kahn: emitted count .
Recall Feynman: ek 12-saal ke bacche ko explain karo

Socho tumhare paas homework tasks hain jahan kuch tasks doosron se pehle karni zaroori hain — essay likhne se pehle kitaab padhe bina nahi ho sakta. Topological sort saari tasks ko iss tarah line mein lagata hai ki tum koi baad wali task kabhi pehle wali se pehle na karo. Tarika 1 (DFS): ek task mein ghuso aur us se related saari tasks mein pehle ghuso; jis moment ek task poori tarah finish ho, use ek "done" pile mein daalo. Pile ulti hogi, toh palat do. Tarika 2 (Kahn): koi bhi task karo jiske koi requirements baaki nahi hain; jab bhi koi finish karo, uske followers ki list se use cross out karo — kuch followers ke ab zero requirements ho jaayenge aur woh doable ban jaayenge. Agar tasks baaki hote hue tum ruk jao, toh woh ek doosre par depend karte hain aur unhe order nahi kiya ja sakta.


Connections

  • Depth-First Search (DFS) — DFS-topo bas DFS + finish-time ordering hai.
  • Breadth-First Search (BFS) — Kahn's, indegree se driven BFS hai.
  • Directed Acyclic Graph (DAG) — kisi bhi topo order ke liye precondition.
  • Cycle Detection in Directed Graphs — dono algorithms cycles ko byproduct ke taur par detect karte hain.
  • Course Schedule Problem — topological sort ka classic application.
  • Shortest Path in DAG) shortest paths ke liye topological order mein edges relax karo.
  • Strongly Connected Components — Kosaraju bhi isi tarah DFS finish ordering use karta hai.
DAG ki topological ordering kya hoti hai?
Vertices ka ek linear ordering jisme har directed edge u→v ke liye u, v se pehle appear kare.
Topological ordering tab exist karti hai jab graph...?
Directed Acyclic Graph ho (koi directed cycle na ho).
DFS-based topo sort mein vertex kab record hoti hai?
Jab woh FINISH ho (saare descendants explore karne ke baad); phir final list reverse ki jaati hai.
DFS finish order reverse karne par topo sort kyun milta hai?
DAG mein kisi bhi edge u→v ke liye f(u) > f(v) hota hai, toh decreasing finish time u ko v se pehle rakhta hai.
Kahn's queue ko initialize karne wala set kya hai?
Saare vertices jinki indegree 0 ho.
Kahn's algorithm mein neighbour ko queue par kab push karte hain?
Exactly jab uska indegree, decrement hone ke baad, 0 ho jaaye.
Kahn's algorithm cycle kaise detect karta hai?
Agar |V| se kam vertices emit hoti hain, toh baaki wale ek cycle form karte hain.
DFS-based topo sort cycle kaise detect karta hai?
Jab ek back edge mile — yani ek aisi edge jo recursion stack par already maujood vertex (gray) ki taraf jaati ho.
Dono topological sort algorithms ki time complexity?
O(V + E).
Kya topological order unique hota hai?
Nahi — koi bhi ordering jo saari edges respect kare valid hai; multiple roots se multiple orders milte hain.
DAG mein kam se kam ek indegree-0 vertex kyun honi chahiye?
Warna incoming edges ko backward hamesha follow kar sakte ho, jo ek repeated vertex force karta hai = ek cycle.

Concept Map

enables

forbids a to a

every edge u to v

solved by

solved by

append on finish then

since f of u greater than f of v

detects cycle via

removes nodes with

detects cycle if

runs in

runs in

Directed Acyclic Graph

Topological Ordering

Cycle exists

No valid order

u before v

DFS-based algorithm

Kahn's BFS algorithm

Reverse finish order

Back edge to gray node

Zero indegree

Fewer than V emitted

O of V plus E