3.1.8 · Coding › Complexity Analysis
Ek recurrence jaise T ( n ) = 2 T ( n /2 ) + n apna running time khud ke andar chhupa leta hai. Substitution method ka matlab hai closed-form answer guess karo aur phir usse induction se prove karo . Iska naam "substitution" isliye hai kyunki hum apna guess wapas recurrence mein substitute karte hain aur check karte hain ki inequality survive karti hai ya nahi.
YEH KYU KAAM KARTA HAI: Induction ek statement ko sab n ke liye prove karta hai — ek base case + ek inductive step se. Ek recurrence already ek aisi statement hai jo T ( n ) ko chhote inputs se jodti hai — exactly woh shape jo induction ko pasand hai. Toh hum recurrence ko algebraically solve nahi karte; hum ek candidate ko verify karte hain.
Definition Substitution method
Ek recurrence ke solution ko bound karne ki do-step technique:
Guess karo answer ki form (jaise T ( n ) = O ( n log n ) ).
Induction se prove karo ki guess sahi hai, aur woh constants dhundho jo ise kaam karate hain.
Hume dikhana hai ki T ( n ) ≤ c g ( n ) (for O ) ya T ( n ) ≥ c g ( n ) (for Ω ) kisi constant c > 0 ke liye aur sab n ≥ n 0 ke liye.
ASAL MEIN HUM KYA KAR RAHE HAIN: ek candidate bound f ( n ) chunna aur prove karna ki inductive invariant "T ( k ) ≤ c f ( k ) for all k < n " se "T ( n ) ≤ c f ( n ) " force hota hai.
Hum formula kabhi seedha nahi dalunga. Yeh raha engine, step by step.
Maano T ( n ) = a T ( n / b ) + h ( n ) .
Guess karo T ( n ) ≤ c f ( n ) — ise inductive hypothesis (IH) kaho.
Maano IH sab chhote values ke liye sahi hai, khaaskar n / b ke liye:
T ( n / b ) ≤ c f ( n / b ) .
Yeh step kyun? Induction hume allow karta hai ki n se chhote inputs ke liye claim assume karo; n / b < n qualify karta hai.
Substitute karo recurrence mein:
T ( n ) = a T ( n / b ) + h ( n ) ≤ a c f ( n / b ) + h ( n ) .
Yeh step kyun? T ( n / b ) ko uske (assumed) upper bound se replace karna right side ko sirf badhata ya same rakhta hai — upper bound ke liye yeh legal hai.
Massage karo right side ko tab tak jab tak woh ≤ c f ( n ) na ho jaaye. Baaki bache terms ko absorb karna hoga. Agar tum c aisa chun sako ki residual ≤ 0 ho jaaye, tum jeet gaye.
Base case: chhote n check karo (jaise n = 1 ) taaki induction grounded rahe.
Worked example Prove karo
T ( n ) = O ( n log n )
Guess: T ( n ) ≤ c n log n .
Step (assume): maano T ( n /2 ) ≤ c 2 n log 2 n .
Kyun? n /2 < n , toh IH apply hoti hai.
Step (substitute):
T ( n ) ≤ 2 ( c 2 n log 2 n ) + n = c n log 2 n + n .
Kyun? Bound ko 2 T ( n /2 ) + n mein plug kiya.
Step (massage): use karo log 2 n = log n − 1 :
= c n log n − c n + n = c n log n − ( c − 1 ) n .
Kyun? Log ko split karne se residual − ( c − 1 ) n expose ho jaata hai.
Step (absorb): agar c ≥ 1 hai, toh − ( c − 1 ) n ≤ 0 , toh
T ( n ) ≤ c n log n . ✓
Kyun? Residual non-positive hai, toh woh inequality ko sirf help kar sakta hai.
Base case: T ( 2 ) = koi constant; c itna bada chuno ki T ( 2 ) ≤ c ⋅ 2 log 2 ho. (Hum n 0 = 2 se shuru karte hain, 1 se nahi, kyunki log 1 = 0 ise tod deta.)
T ( n ) = 2 T ( n /2 ) + n , guess karo T ( n ) = O ( n ) — kya yeh kaam karega?
Guess: T ( n ) ≤ c n .
Substitute:
T ( n ) ≤ 2 ( c 2 n ) + n = c n + n = ( c + 1 ) n .
Hume mila ( c + 1 ) n , nahi c n . Extra + n kisi bhi constant c se kabhi absorb nahi ho sakta.
Conclusion: guess O ( n ) bahut tight hai — yeh galat hai. (Aur sach mein true answer Θ ( n log n ) hai.)
T ( n ) = T ( n /2 ) + T ( n /4 ) + n , prove karo T ( n ) = O ( n )
Naive guess T ( n ) ≤ c n fail karta hai:
T ( n ) ≤ c 2 n + c 4 n + n = 4 3 c n + n .
Hume chahiye 4 3 c n + n ≤ c n , yaani n ≤ 4 1 c n , yaani c ≥ 4 . Asliyat mein yeh kaam karta hai! c ≥ 4 chuno.
Lekin kai recurrences ek zidd residual lower-order term chhod jaati hain. Ilaaj hai hypothesis ko strengthen karna : guess karo T ( n ) ≤ c n − d (ek constant subtract karo). Extra − d tumhe slack deta hai baaki leftovers absorb karne ke liye.
Kyun yeh ulta lagta hai par sahi hai: ek stronger IH tumhe inductive step mein zyada assume karne deta hai — counterintuitively proof asaan ho jaata hai.
Common mistake Classic errors ko steel-man karna
Mistake A — "Maine prove kiya T ( n ) ≤ ( c + 1 ) n , toh T ( n ) = O ( n ) ."
Kyun sahi lagta hai: ( c + 1 ) n ab bhi linear hai, "bas ek bada constant." Kharabi: induction maangta hai ki wahi c reproduce karo jo tumne assume kiya tha. Har level par ek bada constant log n levels mein accumulate hota hai → woh actually Θ ( n log n ) hai. Fix: residual ek fixed c ke saath ≤ 0 hona chahiye, ya guess strengthen karo.
Mistake B — base case bhool jaana. Tum induction se kuch bhi "prove" kar sakte ho agar base case ignore karo. Fix: hamesha verify karo T ( n 0 ) ≤ c f ( n 0 ) , aur n 0 wahan chuno jahan f positive ho (log 1 = 0 se bachao).
Mistake C — induction ke andar sloppy asymptotics. T ( n ) ≤ c f ( n /2 ) + O ( n ) ≤ c f ( n ) likhne se constant chhup jaata hai. O ( n ) exactly woh term ho sakti hai jo absorb nahi ho sakti. Fix: constant ko explicitly carry karo bilkul end tak.
Recall Feynman: ek 12-saal ke bachche ko explain karo
Socho ek magic box hai jo, ek badi question ka jawab dene ke liye, khud ke do chhote copies se poochh ta hai aur thoda apna kaam bhi karta hai. Tum jaanna chahte ho poori cheez kitna time leti hai. Tum ek smart guess karte ho ("mujhe lagta hai isme n log n seconds lagenge"). Phir ek game khelate ho: maano chhote boxes already tumhari guess maante hain, use plug in karo, aur check karo ki bada box abhi bhi ise maanta hai ya nahi. Agar baaki kaam gayab ho jaaye (zero ya negative ho jaaye), tumhara guess sahi tha! Agar koi zidd piece nahi jaata, tumhara guess galat tha aur tum ek bada try karte ho. Tum sabse chhota box hath se bhi check karte ho taaki "maano" ka poora chain solid ground par khara rahe.
G-A-S-A-B
G uess → A ssume (chhote n ke liye) → S ubstitute → A bsorb residual (≤ 0 ?) → B ase case.
"Guess And Substitute, Absorb, Base."
Iska naam "substitution" kyun hai?
T ( n ) ≤ ( c + 1 ) n prove karna O ( n ) kyun NAHI prove karta?
"Subtract a lower-order term" trick kab use karte hain?
Substitution method ke do steps kya hain? (1) Solution ki form guess karo; (2) induction se prove karo, constants dhundho.
Method ka naam "substitution" kyun hai? Kyunki hum inductive hypothesis (chhote inputs ke liye guess) ko wapas recurrence mein substitute karte hain bound verify karne ke liye.
T ( n ) ≤ c f ( n ) prove karte waqt residual/leftover terms ka kya hona chahiye?Woh ek akele fixed constant c ke liye ≤ 0 honni chahiye (yaani poori tarah absorb ho jaayein).
T ( n ) = 2 T ( n /2 ) + n ke liye tight bound kya hai aur O ( n ) kyun nahi hai?Θ ( n log n ) ; O ( n ) assume karne se ( c + 1 ) n milta hai, extra + n jo koi bhi fixed c absorb nahi kar sakta.
Inductive step ke dauran constant c se c + 1 kyun nahi badh sakta? Induction ko WAHI c reproduce karna hota hai; per-level growth log n levels mein accumulate ho jaati hai aur bound bigad jaati hai.
"Strengthen the hypothesis" trick kya hai? Guess karo T ( n ) ≤ c f ( n ) − d (ek lower-order term subtract karo) taaki slack mile jo zidd residuals absorb kare.
Base case check karna kyun zaroori hai? Induction ko ground kiye bina koi bhi galat claim "prove" ki ja sakti hai; saath hi yeh chhote n ke liye c fix karta hai.
n log n bound ke liye n 0 = 1 ki jagah n 0 = 2 kyun chunte hain?log 1 = 0 se c n log n = 0 ho jaata hai n = 1 par, jo positive T ( 1 ) ko bound nahi kar sakta.
has shape induction loves
choose c so residual le 0
Recurrence T of n hides runtime
Step 2 Prove by induction
Inductive hypothesis T of k le c f k
Substitute into recurrence
Example 2T of n over 2 plus n = O of n log n