3.7.17 · D1 · HinglishAlgorithm Paradigms

FoundationsBacktracking problems — N-Queens, Sudoku solver, all permutations - subsets

2,432 words11 min read↑ Read in English

3.7.17 · D1 · Coding › Algorithm Paradigms › Backtracking problems — N-Queens, Sudoku solver, all permuta

Parent note ko fluently padhne se pehle, kuch choti ideas tumhare dimaag mein already honi chahiye: tree kya hoti hai, recursion ek stack of paused calls ki tarah kaisi dikhti hai, "choose → explore → un-choose" physically ek shared list ke saath kya karta hai, aur chhote notation pieces jaise path[:], r//3, r-c, aur . Yeh page inhe ek-ek karke zero se build karta hai, ek aisi order mein jahan har idea sirf usse pehle wali ideas pe rely karta hai.


0. Sabse important word: choice

Sab kuch yahan se shuru hota hai.

Figure dekho: partial solution ek branching diagram ke beech mein ek jagah hai. Neeche ke dots complete answers hain; unse upar ke har dot ka matlab hai "adha hua".


1. Choices ka tree

Upar wali figure mein in words ko match karo:

  • root = tumne abhi tak koi bhi choice nahi ki (empty subset, empty board).
  • ek edge (branch) = "ek aur choice karo".
  • ek node = ek partial solution.
  • ek leaf = ek complete candidate (saari choices ho gayi).
Recall Backtracking terms mein leaf kya hoti hai?

Ek node jahan har choice ho chuki ho — ek complete candidate answer jise hum record ya test kar sakte hain.

Is tree ko depth-first walk karna exactly Depth-First-Search hai; backtracking is DFS with an "undo" step, aur yeh constraint satisfaction ka ek special disciplined form hai.


2. Recursion aur paused calls (the call stack)

Upar wali tree ek aisi function se walk hoti hai jo khud ko call karti hai. Code padhne ke liye tumhe picture karni hogi ki "function apne aap ko call karna" kaisa dikhta hai.

Figure mein, boxes ka lamba stack call stack hai. Har box apne local variables yaad rakhta hai — kaun sa row tha, kaun sa column try kar raha tha. Isliye "un-choose" line sahi time pe chalta hai: jab backtrack(r+1) return karta hai, control paused backtrack(r) ke paas wapas aata hai, jiski bilkul agली line undo hai.

Recall "Un-choose" line actually kab execute hoti hai?

Recursive call return hone ke baad — yaani jab call stack us paused frame pe wapas pop karta hai, next sibling branch try karne se bilkul pehle.


3. Shared, mutated state — aur path[:] kyun exist karta hai

Yeh sabse tricky foundation hai, isliye hum ise dheere-dheere build karte hain.

Figure khatra dikhati hai: left pe, teen arrows sab EK box ko point karte hain; jab box empty ho jaata hai, teeno "saved answers" empty ho jaate hain. Right pe, path[:] har ek ka apna box mein snapshot leti hai, toh woh alag rehte hain.


4. Teen magic words: choose → explore → un-choose

Ab pehle ke pieces milkar template ki heartbeat mein fit ho jaate hain.


5. Chhota notation jo tumhe decode karna hai

Yeh parent code mein har jagah aata hai. Har ek chhota sa hai jab naam pata ho.

Recall

r - c ek ↘ diagonal ke along same kyun rehta hai? Ek step down-right jaane par r mein 1 aur c mein 1 add hota hai; difference r - c isliye change nahi hota, toh us diagonal ki har cell ek hi number share karti hai.


6. Pruning — reason kyun backtracking brute force se behtar hai


Prerequisite map

choice and partial solution

tree of choices

depth-first walk

recursion and call stack

shared mutated state

choose explore un-choose

path copy vs reference

index notation and powers

diagonal keys r minus c and r plus c

N-Queens checks

integer division and remainder

Sudoku box index

pruning cut dead branches

Backtracking topic

Har arrow ka matlab hai "right idea samajhne ke liye left idea chahiye." Sab Backtracking topic node mein funnel hote hain — yeh parent page hai: the topic.


Equipment checklist

Right side cover karo; kya tum reveal karne se pehle har ek ka jawab de sakte ho?

Partial solution kya hai?
Kuch choices se banaya answer lekin sab se nahi — search tree mein beech mein ek node.
Search space tree kyun hoti hai?
Kyunki har choice kayi naye choices kholti hai, toh ek node bahut mein branch hoti hai, recursively.
Recursion ke dauran call stack pe kya hota hai?
Har ek paused outer call, apne local variables yaad karke, apni inner call ke return hone ka wait kar raha hai.
Mutate a list in place ka matlab kya hai?
Same box ki contents change karna (append, pop) bina naya box banaye.
Reference vs copy — path[:] kya deta hai?
Ek copy: ek fresh box same items ke saath, baad ke mutation se safe.
path[:] kyun store karein, path kyun nahi?
path ek shared box hai jo badhta rehta hai; reference store karne se sab saved answers identical ho jaate hain.
Teen magic words batao.
choose → explore → un-choose.
Un-choose mandatory kyun hai?
State shared hai aur stack already-touched node pe wapas pop karta hai; leftover choices sibling branches ko poison kar dengi.
7 // 3 kya deta hai, aur 7 % 3?
7 // 3 = 2 (floor division); 7 \% 3 = 1 (remainder).
r - c ek ↘ diagonal ke along constant kyun rehta hai?
Down-right jaane par r aur c dono mein 1 add hota hai, difference unchanged rehta hai.
r + c ek ↗ anti-diagonal ke along constant kyun rehta hai?
Down-left jaane par r mein 1 add hota hai lekin c mein se 1 subtract hota hai, sum unchanged rehta hai.
subsets kyun?
elements mein se har ek independently in ya out hai — do options har ek, multiply karke.
Pruning kya hai aur ise recurse karne se pehle kyun karo?
Provably-doomed branch skip karna; recurse karne se pehle karna uske neeche saare leaves cut karta hai, jo poora speed win hai.