3.7.16 · HinglishAlgorithm Paradigms

Backtracking — state-space tree, pruning

1,798 words8 min readRead in English

3.7.16 · Coding › Algorithm Paradigms


State-space tree kya hota hai?

PRUNING ke liye KYA chahiye: ek fast bounding / feasibility test isValid(state) jo false return kare jab bhi partial solution already ek constraint violate kar chuki ho.


Universal template (derive karo, memorize mat karo)

Hum saare solutions chahte hain. "Solution kya hai?" se shuru karo — choices ka ek sequence . Saare sequences enumerate karne ke liye hum naturally recurse karte hain:

def backtrack(state):
    if is_complete(state):
        record(state)
        return
    for choice in candidates(state):
        if is_valid(state, choice):     # <-- PRUNE here, before going deeper
            state.add(choice)           # make the move
            backtrack(state)            # explore
            state.remove(choice)        # UNDO = backtrack
Figure — Backtracking — state-space tree, pruning

Worked Example 1 — N-Queens (n = 4)

board pe 4 queens rakho, koi do attack na karein. Hum ek queen per row decide karte hain, uska column choose karte hue.

State = list col[] jahan col[r] = row r mein queen ka column.

Validity test — row r, column c mein rakha jaane ke waqt, saare pehle ke rows i<r check karo:

  • same column?
  • same diagonal?

Brute force = leaves. Backtracking bahut kam visit karta hai kyunki dead branches jaldi mar jaati hain.


Worked Example 2 — Subsets jo ek target sum karein

[2, 4, 6, 8] ka ek subset choose karo jo 6 sum kare. Har element ke liye decision: include ya exclude.


Pruning poora game kyun hai (the 80/20)

Complexity (forecast-then-verify): pruning ke bina, tree mein tak nodes hote hain (branching , depth ). Pruning worst case improve nahi kar sakti (ek adversarial input kuch bhi prune na kare) lekin average case ko dramatically slash karti hai. Isliye Big-O rehta hai; real runtime kaafi kam ho jaata hai.


Common mistakes (steel-manned)


Recall Feynman: ek 12-saal ke bacche ko explain karo

Socho ek darwaazon ka maze hai. Tum aage chalte ho ek ek darwaza kholte hue. Jis pal ek hallway ek deewar se takraati hai, tum aur bhatkate nahi — tum wapas last darwaze tak chalte ho aur ek alag ko try karte ho. Smart baat: agar tum ek sign dekhte ho jisme likha hai "is poore wing mein koi exit nahi", tum poora wing skip kar dete ho har kamra check karne ke bajaay. Woh sign-reading pruning hai; wapas chalna backtracking hai.


Flashcards

State-space tree kya hota hai?
Ek tree jiska root empty partial solution hai, edges individual decisions hain, nodes partial solutions hain, aur leaves complete solutions ya dead-ends hain; DFS ke zariye explore kiya jaata hai.
Backtracking mein "pruning" ka kya matlab hai?
Ek non-promising node ko expand karne se mana karna — uska poora subtree kaatna — kyunki partial solution already ek constraint violate kar chuki hai.
is_valid ko recurse karne se PEHLE kyun check karna chahiye, leaf pe nahi?
Taaki invalid partial choices ke poore subtrees kabhi generate hi na hon, brute force ko early-abandon search mein badal kar.
Backtracking loop body kaunse teen operations se banta hai?
Move banao (add), recurse karo (explore), move undo karo (remove/backtrack).
"Undo" step essential kyun hai?
Ek hi mutable state saari branches mein shared hai; undo ke bina, sibling/parent states corrupt ho jaati hain.
Kya pruning worst-case Big-O improve karti hai?
Nahi — ek adversarial input kuch bhi prune nahi kar sakta, O(b^d) rehta hai. Yeh sirf average/typical runtime improve karti hai.
N-Queens: row r, col c pe queen rakhne ka validity test kya hai?
Har pehle ke row i<r ke liye: c != col[i] (column) AUR |r-i| != |c-col[i]| (diagonal).
Plain DFS aur backtracking mein kya fark hai?
Backtracking ek implicit solution tree pe DFS hai jisme early feasibility prune aur explicit state undo add hota hai ek state reuse karne ke liye.
"Promising/feasible" node kya hota hai?
Ek partial solution jo ab bhi ek valid complete solution mein extend ho sakti hai.
Subset-sum mein ek accha pruning rule kya hai?
Agar running_sum > target, expand karna band karo — aur elements add karne se sum sirf badhega.

Connections

  • Recursion — backtracking recursion hai state mutation + undo ke saath.
  • Depth-First-Search — state-space tree ka traversal order.
  • Branch-and-Bound — backtracking + optimization ke liye prune karne ka numeric bound.
  • Dynamic-Programming — jab subtrees overlap karein, re-explore karne ki bajay memoize karo.
  • N-Queens · Sudoku-Solver · Permutations-and-Combinations — canonical applications.
  • Time-Complexity — kyun pruning average case mein help karti hai worst case mein nahi.

Concept Map

models search as

root is

edge is

leaf is

explored in

uses test

fails then

kills exponential

realized by

rhythm

missing undo

filters choices in

applied to

Backtracking

State-Space Tree

Empty partial solution

One decision

Complete solution or dead-end

Depth-First order

isValid feasibility test

Prune subtree

Dead-ends in one cut

Recursive template

make explore undo

Corrupts siblings

N-Queens example