Worked examples — DP problems — matrix chain multiplication
3.7.13 · D3· Coding › Algorithm Paradigms › DP problems — matrix chain multiplication
Shuru karne se pehle, woh objects yaad karo jo hum baar baar use karte hain — jisme se ek, split table, itna zyada kaam aata hai ki uski apni definition deserve karti hai.
Kyunki neeche ke do examples in tables ko code-order mein fill karte hain, yahan exact loop structure hai jo hum follow karte hain — variable names (, , , ) baad mein verbatim use hote hain, isliye inhe abhi se jaano:
n = len(p) - 1 # number of matrices
m[i][i] = 0 for all i # base case
for L in 2..n: # L = chain length, OUTERMOST
for i in 1..n-L+1: # left end of the interval
j = i + L - 1 # right end (so length is exactly L)
m[i][j] = +infinity
for k in i..j-1: # try every last-cut position
cost = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j]
if cost < m[i][j]:
m[i][j] = cost
s[i][j] = k # <-- remember the winning split
The scenario matrix
Har MCM input in case classes mein se ek mein aata hai. Last column us worked example ka naam batata hai jo use cover karta hai, taaki tum dekh sako ki poora space filled hai — genuinely empty chain se shuru karke.
| Case class | Kya special hai | Covered by |
|---|---|---|
| Empty chain: | array length , bilkul bhi matrices nahi | Example 0 |
| Degenerate: | ek matrix, kuch multiply nahi hota | Example 1 |
| Minimal branch: | exactly ek split, koi choice nahi | Example 2 |
| First real choice: | do splits compete karte hain | Example 3 |
| All-square chain | har equal → symmetry, ties | Example 4 |
| Skinny middle matrix | ek tiny dimension answer badal deta hai | Example 5 |
| Tie between split points | do equal cost dete hain — kaunsa store karein? | Example 6 |
| Scalar output () | chain collapse hokar number ban jaata hai | Example 7 |
| Word problem (real world) | ek story ko array mein translate karo | Example 8 |
| Exam twist: count vs recover | parenthesization maanga hai, sirf cost nahi | Example 9 |
Hum inhe order mein work karte hain. Har example pehle tumse Forecast karne kehta hai compute karne se pehle — woh guess hi actual learning hai.
Example 0 — Empty chain ()
Forecast: agar multiply karne ke liye kuch hai hi nahi, toh kya cost hai, undefined hai, ya error hai? Padhne se pehle guess karo.
- compute karo. Yeh step kyun? Har MCM run array ko matrix count mein turn karne se shuru hoti hai. Yahan .
- Check karo ki koi loop body execute hoti hai ya nahi. Yeh step kyun? Outer loop
for L in 2..n, yaani2..0, chalata hai — jo empty hai — zero iterations. Koi interval exist nahi karta jahan ho. - Answer padhо. Yeh step kyun? Koi return karne ke liye nahi hai (koi matrix nahi hai). Kuch nahi multiply karne ki total cost convention se hai, bilkul waise jaise empty sum hota hai.
Verify: Ek empty product ko koi kaam nahi chahiye, toh hi ek sensible value hai; loops kabhi fire nahi hote, toh kuch break nahi hota. Yeh woh boundary hai jo tumhe code mein handle karni padti hai (if n <= 1: return 0) — units multiplications hain, aur humne koi nahi kiya. ✓
Example 1 — Degenerate: a single matrix ()
Forecast: ...agar kuch multiply hi nahi hota toh kitna kaam hai? Padhne se pehle guess karo.
- Matrices count karo. Yeh step kyun? Array ki length hai, aur . Ek matrix.
- Base case apply karo. Yeh step kyun? Recurrence ki pehli branch kehti hai . Yahan , toh hum seedha base case pe aate hain — koi split point nahi hai jahan kyunki .
Verify: Ek single matrix already "multiplied" hai. Koi scalar multiplication nahi hoti, toh correct hai — units multiplications hain, aur humne koi nahi kiya. ✓
Example 2 — Minimal branch: exactly one split ()
Forecast: sirf do matrices hain toh choose karne ke liye kuch nahi — lekin kaunsa number niklega?
- Valid splits list karo. Yeh step kyun? range karta hai , yaani , toh sirf . Minimum lene ki zaroorat nahi — ek candidate, aur toh automatically.
- Combine formula mein plug in karo. Yeh step kyun? Left block hai , right block hai , toh combine cost hai . Sub-costs .
Verify: Output hai, toh entries, har ek products ka sum → multiplications. Match karta hai. ✓
Example 3 — The first real choice ()
Yeh parent note ki motivating chain hai — hum ise sirf do options ke beech decision ke roop mein redo karte hain, aur . Exactly do candidate trees hain, aur figure dono draw karta hai taaki tum dekh sako kaunsa survive karta hai.
Forecast: ek split bada dimension ko ek combine ke andar rakhta hai, doosra use bahar rakhta hai. Kaunsa sasta hai — aur kitna difference hai?

- Splits enumerate karo. Yeh step kyun? deta hai aur . Yeh sirf do tarike hain last multiplication place karne ke (figure mein do trees).
- Split : . Yeh step kyun? Left hai (cost ), right hai (cost ), combine .
- Split : . Yeh step kyun? Left hai (cost ), right (cost ), combine .
- Min lo aur split record karo. Yeh step kyun? Recurrence sasta candidate rakhta hai, aur yaad rakhta hai ki kaunsa jeeta. , toh winner hai .
Verify: ka difference, parent note ki headline se match karta hai. Figure mein, plum tree (jise orange arrow mark karta hai) survivor hai — uski shape exactly wahi hai jo encode karta hai. ✓
Example 4 — All-square chain (symmetry & the ties it creates)
Forecast: jab har matrix shape mein identical ho, toh kya split point matter karta hai?
- Har combine same cost karta hai. Yeh step kyun? Har factor equals , toh har combine hai , se independent.
- Har length-2 subchain cost karta hai. Yeh step kyun? Ek length-2 subchain ka ek hi split hota hai, toh uski cost sirf ek combine hai; yeh dono aur par apply hota hai, deta hai .
- Dono splits try karo. Yeh step kyun? Symmetry tie predict karta hai, lekin algorithm phir bhi sabhi enumerate karta hai ek par trust karne se pehle.
- :
- :
- Result. Dono dete hain; min hai (first-seen recorded, toh ).
Verify: Koi bhi parenthesization exactly do multiplies karta hai . Equal costs square chain ki hallmark hain — koi order doosre se better nahi. ✓
Example 5 — Skinny middle matrix (ek tiny dimension rules)
Forecast: (dimension ) ek bottleneck hai. Kya acche splits iske through route karne ki koshish karte hain?
Hum chain length se fill karte hain, exactly waisa jaise upar wala loop skeleton demand karta hai.
Length 2 ():
Length 3 (): Ab kyun? Har ek ko do length- answers chahiye, jo humne abhi compute kiye. 4. 5.
Length 4 (, the answer): Last kyun? Yeh sab chhoti chains par depend karta hai. 6.
Verify: Winning split tiny ko outer combine mein dalta hai (), jo sabse sasta boundary hai. "Skinny" dimension ek discount coupon ki tarah kaam karta hai — acche splits use sabse bade combine par kharchte hain. ✓
Example 6 — A deliberate tie between split points
Forecast: shape "upar-neeche-upar" jaati hai. Kya do splits same cost par land karenge?
- Length-2 costs. ; .
- Split : .
- Split : .
- Min. , toh at ().
Ab ek true tie — last dimension badlo taaki dono splits same cost karein:
Verify: Tie variant mein, mirror symmetry ( read hota hai — ek palindrome) do trees ko same cost karne par majboor karta hai. Algorithm ka answer optimal hai chahe woh kaunsa bhi record kare. ✓
Example 7 — Scalar output ()
Forecast: outer dimensions hain. Kya woh ek split ko almost free banata hai?
- Length-2 costs. ; .
- Split : . .
- Split : . .
- Min. , toh at ().
Verify: Kyunki , dono outer combines tiny hain ( aur ), toh winner decide hota hai inner subchain se. Final matrix genuinely hai — ek plain number — phir bhi intermediate work abhi bhi multiplications cost karta hai. Degenerate outer shape ≠ free chain. ✓
Example 8 — Word problem (translate the story)
Forecast: kya tumhe teeno tiny -ish transforms pehle fold kar lene chahiye, phir bade -row data ko hit karo — ya left to right chalte raho?
- array banao. Yeh step kyun? MCM sirf dimensions dekhta hai. Chain , , , . Toh
- Length-2: ; ; .
- Length-3:
- Length-4:
Result: matlab last multiply hai : pehle teeno transforms ko fold karo (woh saste -ish hain), phir combined matrix ko bade -row data par ek baar apply karo.
Verify: Naive left-to-right order cost karta hai ( path); optimal kaam ko lagbhag halve kar deta hai — exactly "chhoti cheezein combine karo bade matrix ko touch karne se pehle" wali intuition. ✓
Example 9 — Exam twist: recover the parenthesization, not just the cost
Forecast: tumhe cost pata hai; trick hai split indices ko nested brackets mein turn karna. Pehla bracket kahan close hota hai?
Definition box se yaad karo: woh cut point hai jahan interval ne apna sabse sasta last multiplication kiya. Brackets rebuild karne ke liye tum ko top-down padhte ho, sabse bada interval pehle.
- Poori chain se shuru karo. Yeh step kyun? Reconstruction hamesha outermost interval se shuru hoti hai. → ke baad last cut: .
- Left par recurse karo. Yeh step kyun? Uska apna last cut hai → .
- par recurse karo. → , yaani sirf with only possible split.
- Right side ek single matrix hai — koi bracket nahi.
- Inside-out assemble karo. Yeh step kyun? Pieces substitute karo:
Verify: Yeh parent note ki stated optimal parenthesization se exactly match karta hai, aur uski cost hai. table ko top-down padha jaata hai (sabse bada interval pehle), phir har sub-interval recursively. ✓
Recall Self-test: har ek ke liye case class naam batao
(array length , yaani zero matrices) vs vs . ::: empty chain, → cost , koi loop iteration nahi (Example 0). ::: all-square chain → har split tie karta hai (Example 4 pattern). ::: scalar output, palindrome dims → symmetric tie, final result hai (Examples 6 & 7 combined). Kaunsa loop variable outermost hona chahiye taaki koi subchain unfilled na rahe? ::: chain-length (grow from to ), kabhi row se loop mat karo. kya store karta hai, aur use se alag kyun rakhte hain? ::: interval ke liye winning cut ; batata hai kitna, batata hai kaise, taaki hum brackets rebuild kar sakein.
Connections
- 3.7.13 DP problems — matrix chain multiplication (Hinglish) — woh parent recurrence jinhe yeh examples exercise karte hain
- Dynamic Programming — optimal substructure hi wajah hai ki per-interval answers combine hote hain
- Catalan Numbers — in chains mein se har ek ke kitne parenthesizations hain
- Optimal Binary Search Tree — same "har split try karo, store karo" reconstruction
- Burst Balloons — interval DP jahan last element (split nahi) fix hota hai
- Memoization vs Tabulation — top-down bhi yahi lazily compute karta
- Time Complexity Analysis — upar ke har example ka fill work hai