3.7.6 · D2 · HinglishAlgorithm Paradigms

Visual walkthroughDynamic programming — overlapping subproblems, optimal substructure

2,094 words10 min read↑ Read in English

3.7.6 · D2 · Coding › Algorithm Paradigms › Dynamic programming — overlapping subproblems, optimal subst

Yeh parent topic ka visual companion hai. Hum bilkul zero se shuru karte hain: aapko bas itna pata hona chahiye ki "do numbers jodna" kya hota hai aur ek aisi recipe kya hoti hai jo khud ko call kare (ek quick refresher Recursion ke liye helpful hai).


Step 1 — "Ek subproblem" dikhta kaisa hai

KYA HAI. Hamara running example Fibonacci sequence hai. Yeh ek rule se define hota hai:

Hum ise use karne se pehle har symbol ko samjhte hain:

  • ek machine hai: aap isme ek whole number daalo, yeh ek number wapas deta hai.
  • input hai — "aapko kaun sa Fibonacci number chahiye?"
  • aur woh do chhote sawaal hain jo machine ko bada sawal answer karne ke liye poochhne padte hain. Yeh chhote sawaal hi subproblems hain.
  • kehta hai: do chhote answers ko jodke combine karo.

Hume base cases bhi chahiye — woh sabse chhote sawaal jo machine bina kuch pooche turant answer kar sakti hai:

PEHLE YEH KYU DEFINE KAREN. Aap "repeated work" ki baat tab tak nahi kar sakte jab tak aap ek unit of work — ek input par ka ek call — ko point out na kar sako. Woh single box hi neeche ki har cheez ka atom hai.

PICTURE. Neeche, ek call ko uske input ke label wale box ki tarah draw kiya gaya hai. Arrow ka matlab hai "yeh box us box se sawal poochh raha hai."

Figure — Dynamic programming — overlapping subproblems, optimal substructure

Step 2 — Poora recursion tree grow karo (waste ko aate dekhte hain)

KYA HAI. Top sawal lo aur tab tak rule apply karte raho jab tak har branch ek base case ( ya ) tak na pahunch jaaye. Har box do children sprout karta hai: uska aur .

KYU. Hum total work count karna chahte hain. Total work = tree mein boxes ki total sankhya, kyunki har box ek addition karta hai. Toh poora tree draw karna zaroori hai.

PICTURE. Tree dekho. Ab repeats dhundho: kitne alag boxes mein likha hai? mein? Colour-coded neeche — same sawal alag branches par fresh se poochha ja raha hai. Koi kuch yaad nahi rakhta.

Figure — Dynamic programming — overlapping subproblems, optimal substructure
Recall Repeats khud gino

tree mein: kitni baar compute hota hai? ::: Teen alag baar. kitni baar compute hota hai? ::: Do baar.

Yahi repeated boxes hain jo parent note mein bataye gaye overlapping subproblems hain. Yeh dushman hain. (Yeh Divide and Conquer se alag hai, jahan har box ek alag sawal hota hai aur kuch repeat nahi hota.)


Step 3 — Waste measure karo: kyun tree hai

KYA HAI. Boxes ko level ke hisaab se gino (top se doori).

  • Level 0: box ().
  • Level 1: boxes.
  • Level 2: tak boxes.
  • Level : tak boxes.

YEH TOOL KYU — do ki powers. Har box do children banata hai, toh population har level neeche jaane par double hoti hai. Jab bhi koi quantity har step par double ho, uski size describe karne ka seedha tarika power of two, hai. Isliye hum use karte hain naa ki, : doubling exponential growth ki pehchaan hai.

Total boxes , jise hum ==== likhte hain (parent ka Time Complexity Analysis "big-O" = "se zyada fast nahi badhta").

PICTURE. Har level ek bar ki tarah draw hua; neeche jaate bar ki length double hoti hai. Total area hi wasted work hai.

Figure — Dynamic programming — overlapping subproblems, optimal substructure

Step 4 — Key observation: KITNE distinct sawaal hote hain?

KYA HAI. Tree mein boxes hain — lekin isme appear hone wale distinct inputs list karo: ke liye yeh sirf 6 alag sawaal hain. Generally, ke liye exactly distinct inputs hain: .

YEH POORA GAME KYU HAI. Tree itna bada hai kyunki distinct sawaal baar baar pooche jaate hain. Lekin genuinely alag sawaal sirf ke aas paas hain. Agar hum har alag sawal ek baar answer karke reuse kar sakein, toh total work ki jagah ke karib hoga.

PICTURE. Left par messy tree ko sirf inputs se ki ek chhoti number line par squeeze kiya gaya hai. Kaafi tree boxes ek hi tick par collapse ho jaate hain.

Figure — Dynamic programming — overlapping subproblems, optimal substructure

Step 5 — Sticky-note (memoization) lagao aur branches ko marte dekho

KYA HAI. Ek table memo add karo (ek shelf of sticky notes, input ke hisaab se indexed). Har call ke liye naya rule:

  1. Agar ka answer shelf par pehle se hai, toh wapas de do — recurse mat karo.
  2. Warna ek baar compute karo, shelf par likho, phir return karo.
def fib(n, memo={}):
    if n < 2: return n
    if n in memo: return memo[n]   # <-- sticky note: reuse, recompute mat karo
    memo[n] = fib(n-1, memo) + fib(n-2, memo)
    return memo[n]

Line by line:

  • if n < 2: return n — base cases , turant answer.
  • if n in memo: return memo[n]yahi toh poora point hai. Koi bhi sawal doosri baar poochha jaaye, uska poora subtree skip ho jaata hai.
  • memo[n] = ... — ek baar solve karo, answer record karo.

KYU. Step 2 mein doosre , doosre/teesre etc. ki branches pure repetition thi. Sticky-note check un repeated branches ko prune karke ek single lookup box mein badal deta hai. (Top-down vs bottom-up split ke liye Memoization vs Tabulation dekho.)

PICTURE. Wahi tree, lekin pehli baar compute hone ke baad har box grey ho jaata hai aur ek one-step lookup se replace ho jaata hai. Mota exponential tree ek patli chain mein deflate ho jaata hai.

Figure — Dynamic programming — overlapping subproblems, optimal substructure

Step 6 — Dobara gino: multiplication formula niklata hai

KYA HAI. Memoization ke baad, har distinct input exactly ek baar compute hota hai. Toh:

Fibonacci mein plug karo:

  • work per subproblem (ek addition + ek shelf write)

KYU ek product, sum nahi? Kyunki dono quantities independent hain: kitne alag kaam hain, times har kaam kitni der leta hai. Yeh har DP ka master formula hai — Fibonacci, Knapsack Problem ( kaam), Longest Common Subsequence ( kaam), yahan tak ki Bellman-Ford ( relaxations). Do factors badlo, kisi bhi DP ki cost mil jaayegi.

PICTURE. Ek grid: columns = distinct subproblems, har ek cell; har cell ke andar ek chhoti clock = work per cell. Total time = har cell ek baar bharna = (columns) × (per-cell work).

Figure — Dynamic programming — overlapping subproblems, optimal substructure

Step 7 — Degenerate / edge cases (kabhi skip mat karo)

KYA HAI AUR KYU. Ek derivation tab hi trustworthy hoti hai jab woh extremes mein bhi kaam kare.

  • ya (base cases). Tree ek single box hai; overlap karne ke liye kuch nahi hai. Naive aur DP dono cost karte hain. Memoization yahan na tez hai na slow — bas harmless hai. Seekh: overlap tab hi aata hai jab tree itna deep ho ki woh khud par wapas branch kar sake.
  • Koi overlap NA ho (jaise Merge Sort, Divide and Conquer). Har distinct-subproblem count total-box count ke barabar hota hai. Step 4 ke dono numbers same hain, toh caching kuch nahi bachata aur sirf shelf space waste karta hai. DP yahan bekar hai.
  • Koi optimal substructure NA ho (jaise graph mein sabse lamba simple path). Sub-answers combine karna galat hai kyunki sub-paths ek aisa node reuse kar sakte hain jo poora path pehle hi use kar chuka hai — toh shelf ek aisi value store karta hai jo reuse karna galat hai. Yahan memoization sirf useless nahi, galat answer deta hai.

PICTURE. Teen chhote trees side by side: (a) flat base case bina repeats ke, (b) ek Merge-Sort tree jahan sare leaves distinct hain, (c) ek path graph jahan sub-answer reuse karne par ek node double-count ho jaata hai — red ✗ se marked.

Figure — Dynamic programming — overlapping subproblems, optimal substructure
Recall Yeh trick actually kab kaam aati hai?

Caching tab payoff deta hai jab ::: distinct subproblems ≪ total boxes (real overlap) AUR sub-answers sahi se combine ho sakein (optimal substructure).


Ek-picture summary

Upar ki sab cheezein, ek single canvas par: left par mota tree, beech mein sticky-note shelf repeats collapse karte hue, aur right par patla chain — neeche master formula print hua.

Figure — Dynamic programming — overlapping subproblems, optimal substructure
Recall Feynman: poora walkthrough ek story ki tarah sunao

Humne ek aisi machine se shuru kiya jo "-va Fibonacci number kya hai?" ka sawal answer karne ke liye khud ke do chhote versions se poochhti hai. Use draw karne par (Step 1–2), humein ek bushy tree mili jo har level par double hoti hai, toh usmein kareeb boxes hain — kaam ka ek pahaad — aur in boxes mein se kaafi ek hi sawal poochhte hain (Step 3). Phir aaya punchline (Step 4): chahe boxes hon, poore tree mein sirf ke karib alag sawaal hain. Toh humne machine ko sticky notes ki ek shelf de di (Step 5): pehli baar koi sawal answer hone par answer likh lo; har baad wali baar note padh lo, poora subtree dobara mat karo. Bushy tree ek patli chain mein deflate ho gayi. Dobara count karne par (Step 6): alag sawaalon mein se har ek ek baar solve hota hai, har ek ek addition karta hai, toh total time — yahi hai master DP formula, (alag kaamaon ki sankhya) × (har kaam ka time). Aakhir mein humne edges check kiye (Step 7): agar tree kabhi repeat nahi karta, ya agar sub-answers legally combine nahi ho sakte, toh sticky-note trick ya toh kaagaz waste karti hai ya jhooth bolti hai. Yahi ek picture mein dynamic programming ki poori rooh hai.


Connections

  • Parent topic (Hinglish) — full treatment.
  • Recursion — woh tree jahan se humne shuru kiya.
  • Recursion Trees — Steps 2–3 ki counting technique.
  • Memoization vs Tabulation — shelf, top-down aur bottom-up.
  • Time Complexity Analysis — jahan se aur aate hain.
  • Divide and Conquer — no-overlap edge case.
  • Knapsack Problem, Longest Common Subsequence, Bellman-Ford — same master formula alag job counts ke saath.