3.7.3 · Coding › Algorithm Paradigms
Intuition Ek-sentence idea
Ek exchange argument prove karta hai ki greedy algorithm optimal hai — yeh dikhake: koi bhi optimal solution lo, aur uss mein greedy ki choice ke saath swap (exchange) karo bina solution ko worse banaye . Tab tak repeat karo jab tak optimal solution greedy jaisa na dikhe. Kyunki har swap pe greedy ≤ optimal hai aur quality kabhi nahi girati, greedy khud bhi optimal honi chahiye.
Definition Exchange argument
Yeh greedy correctness ke liye ek proof technique hai. G = greedy ka produce kiya hua solution, O = koi bhi arbitrary optimal solution. Hum pehla woh jagah dhundte hain jahan dono differ karte hain , phir dikhate hain ki hum O ko uss jagah G se agree karne ke liye modify kar sakte hain jabki O utna hi accha ya usse bhi accha rahe. Induction se yeh O ko G mein transform kar deta hai bina kisi loss ke, proving karta hai ki G bhi optimal hai.
Do flavours hain jo tumhe pehchanne chahiye:
Greedy-stays-ahead — dikhao ki greedy k steps ke baad optimal se kabhi peeche nahi (ek measure-based induction).
Exchange/swap — O mein do elements ko physically swap karo aur prove karo ki objective worse nahi hoti.
Yeh note swap flavour ke baare mein hai, jo ordering/scheduling problems ka workhorse hai.
Intuition "Swap ke baad no worse" kyun kaafi hai
Maano ki har optimal O jo greedy se disagree karta hai, usse ek swap se ek aur solution mein edit kiya ja sakta hai jo (a) abhi bhi feasible hai, (b) no worse hai, aur (c) ek aur jagah greedy se agree karta hai. Tab O se shuru karo aur swapping karte raho. Har swap se disagreements ki count kam se kam ek ghatti hai, toh finitely many swaps ke baad tum G pe pahunch jaate ho — aur woh abhi bhi original optimum se no worse hai. Isliye G optimal hai. ∎
Asal reason: tum ek chain bana rahe ho
O = O 0 → O 1 → ⋯ → O m = G , cost ( O i + 1 ) ≤ cost ( O i ) .
Telescoping: cost ( G ) ≤ cost ( O ) = OPT . Kyunki OPT best possible hai, cost ( G ) = OPT .
Poora game step 5 mein rehta hai — aur woh hamesha uss inequality pe aata hai jo greedy choice ko define karti hai.
Problem. n jobs, job k ki length p k hai. Ek baar mein ek chalao. (Unweighted) total completion time ∑ k C k minimize karo, jahan C k = job k ka finish time. Greedy: Shortest Processing Time first (SPT) . (Agar har job ka weight w k bhi ho aur objective ∑ k w k C k ho, toh sahi greedy ratio p k / w k se sort karti — neeche mistake box dekho.)
Worked example SPT ke liye exchange proof
Setup. O ko optimal maano. Maano O ek job a ko ek job b se immediately pehle chalata hai jahan p a > p b (ek "inversion" — longer pehle, shorter baad mein). Greedy yeh forbid karti hai.
Swap. O mein a aur b ko swap karo O ′ banane ke liye. Yeh step kyun? a se pehle aur b ke baad schedule hue saare jobs unchanged hain, isliye sirf C a , C b change hote hain.
t = pair ka start time maano. Tab:
O mein: C a = t + p a , C b = t + p a + p b . Sum = 2 t + 2 p a + p b .
O ′ mein: C b = t + p b , C a = t + p b + p a . Sum = 2 t + 2 p b + p a .
Yeh step kyun? Jo job second finish hoti hai woh dusre ki length pay karti hai, isliye shorter job pehle rakhne se doubled term reduce hoti hai.
Difference: cost ( O ) − cost ( O ′ ) = ( 2 p a + p b ) − ( 2 p b + p a ) = p a − p b > 0.
Toh O ′ strictly better hai — jo optimality ke contradiction mein hai jab tak koi inversion exist kare. Isliye optimal mein koi inversion nahi, yaani woh SPT se sort hai. ∎
Problem. Intervals [ s k , f k ) ; max number of non-overlapping wale chuno. Greedy: baar baar compatible activity lo jiski earliest finish time ho.
Worked example Exchange proof
Setup. O = ( o 1 , o 2 , … ) optimal ho, finish time se sort kiya hua; g 1 = greedy ka pehla pick (sabse pehle finish hone wala).
Claim/Swap. o 1 ko g 1 se replace karo O ′ banane ke liye.
Yeh step kyun? g 1 utna hi ya jaldi finish hota hai jitna o 1 (f g 1 ≤ f o 1 , kyunki g 1 globally earliest finish wala hai). Toh jo o 1 ke khatam hone ke baad start hota tha woh g 1 ke khatam hone ke baad bhi start hota hai — feasibility preserved hai.
Worse kyun nahi? O ′ mein O jitni same number of activities hain (humne ek ko ek se replace kiya). Toh O ′ bhi optimal hai, aur ab woh pehle pick par greedy se agree karta hai.
Induct karo remaining subproblem par (f g 1 ke baad start hone wali activities). Greedy har step par optimal rehti hai. ∎
Example 1 se contrast note karo: yahan swap equal cost deta hai (counting problem), wahan strict improvement diya. Dono valid exchange arguments hain.
Worked example "Two least frequent are siblings" exchange
Claim. Kisi optimal prefix tree mein, do sabse kam frequency wale symbols x , y maximum depth par sibling leaves hain.
Setup. Optimal tree T lo. a , b do sabse gehri sibling leaves hon. WLOG f ( x ) ≤ f ( y ) aur f ( a ) ≤ f ( b ) , jahan f ( x ) , f ( y ) sabse chhoti do frequencies hain, toh f ( x ) ≤ f ( a ) , f ( y ) ≤ f ( b ) . Depths d x = depth ( x ) , etc. likho.
Swap. x ↔ a aur y ↔ b exchange karo — yeh do swaps hain, toh cost change do terms ka sum hai, ek per swap.
Worse kyun nahi? Cost = ∑ f ( c ) depth ( c ) . x ↔ a swap se cost ( f ( a ) − f ( x )) ( d x − d a ) se change hoti hai, aur y ↔ b swap se ( f ( b ) − f ( y )) ( d y − d b ) se. Total change hai
Δ = ( f ( a ) − f ( x )) ( d x − d a ) + ( f ( b ) − f ( y )) ( d y − d b ) .
Yeh step kyun? Tumhe dono terms add karni hain — sirf ek swap account karna incomplete hoga.
Har term ≤ 0 hai: pehle mein, f ( a ) ≥ f ( x ) jabki a ek sabse gehri leaf hai toh d a ≥ d x , deta hai (non-neg)× (non-pos)≤ 0 ; doosra identical hai f ( b ) ≥ f ( y ) , d b ≥ d y ke saath. Isliye Δ ≤ 0 — cost nahi badhti. ∎
Common mistake "Greedy kaam karta hai kyunki woh locally best hai, toh mujhe proof ki zaroorat nahi."
Kyun sahi lagta hai: locally optimal moves often do win karte hain, aur pattern par trust karna tempting lagta hai. Fix: locally best ≠ globally best (jaise coin change with denominations { 1 , 3 , 4 } for 6 : greedy deta hai 4 + 1 + 1 = 3 coins, optimal hai 3 + 3 = 2 ). Exchange argument hi greedy ko certify karta hai — uske bina tumhare paas heuristic hai, proof nahi.
Common mistake "Processing time se sort karna hamesha completion-time objectives minimize karta hai."
Kyun sahi lagta hai: SPT unweighted ∑ C k ke liye sahi hai, toh universal lagta hai. Fix: weighted completion time ∑ w k C k ke liye, adjacent jobs a , b ka inversion swap cost ko w b p a − w a p b se change karta hai; yeh non-negative hota hai exactly jab p a / w a ≥ p b / w b . Toh sahi greedy ratio p k / w k se sort karti hai (Smith's rule), sirf p k se nahi. Unweighted special case hai w k = 1 ke saath.
Common mistake Swap ke baad
feasibility check karna bhool jaana.
Kyun sahi lagta hai: hum cost inequality par focus karte hain aur assume karte hain ki swapped solution abhi bhi valid hai. Fix: har exchange proof ke do obligations hain — (1) O ′ abhi bhi ek legal solution hai, (2) O ′ no worse hai. Activity selection mein "earliest finish" ka poora point (1) guarantee karna hai. Isko skip karo toh proof collapse ho jaata hai.
Common mistake Galat jagah swap karna (arbitrary index ki jagah
pehla difference).
Kyun sahi lagta hai: koi bhi difference swappable lagta hai. Fix: tumhe pehle disagreement par swap karna hai aur prefix jo already greedy se match karta hai par induction use karni hai, warna tum guarantee nahi kar sakte ki swaps G ki taraf finitely many steps mein converge honge.
Common mistake Sirf ek swap account karna jab proof do karta hai (jaise Huffman).
Kyun sahi lagta hai: pehle swap ki inequality poori kahani lagti hai. Fix: agar construction do exchanges karta hai (x ↔ a aur y ↔ b ), toh cost change dono terms ka sum hai; tumhe dikhana hai ki combined expression ≤ 0 hai, sirf ek half nahi.
Recall Feynman: 12-saal ke bacche ko explain karo
Imagine karo ki bacchon ko line mein lagana hai — jo sabse jaldi kaam karta hai woh pehle. Main tumhe mera "hamesha-sबसे-jaldi-wala-aage" plan dikhata hoon. Tum bolte ho "lekin asli best plan alag ho sakta hai!" Toh main tumhara supposed best plan leta hoon, pehli jagah dhundhta hoon jahan woh mere se disagree karta hai, aur do bacchon ko swap karta hoon . Main prove karta hoon ki total waiting time swap ke baad nahi badhti. Main tab tak swapping karta rehta hoon jab tak tumhara plan bilkul mere jaisa na dikhe — aur kyunki maine kabhi ise worse nahi banaya, mera simple plan sab se best tha. Woh swapping trick hi exchange argument hai.
Mnemonic Recipe yaad karo
"First Find Twin, Swap, Show" → FFTSS : First difference dhundo, greedy ke element ka Twin O mein Find karo, ise Swap karo, Show karo ki cost nahi badhti. (Pun: FaT SwapS proof ko healthy rakhte hain.)
Exchange argument kya transform karta hai, aur kisme? Kisi bhi optimal solution O ko, greedy ke solution G mein, swaps ki ek chain se jo kabhi cost nahi badhati.
Har swap ke baad ke TWO obligations kya hain? (1) Swapped solution feasible rehta hai; (2) uski cost pehle se worse nahi hoti.
SPT proof mein, jab inversion a before b swap karo toh cost( O ) − cost( O ′ ) kya hota hai? p a − p b > 0 (longer-before-shorter strictly worse hota hai) — unweighted ∑ C k ke liye.
Weighted completion time ∑ w k C k ke liye, sahi greedy order kya hai? Ratio p k / w k se sort karo (Smith's rule); SPT special case hai w k = 1 ke saath.
G aur O ke beech PEHLE index par swap kyun karna chahiye jahan woh differ karte hain?Matching prefix par induction karne ke liye aur guarantee karne ke liye ki swaps finitely many steps mein G tak pahunchein.
Counting problems (activity selection) mein swap ke baad kaisi inequality milti hai? Equality (same number of activities) — tum dikhate ho ki ek optimal solution greedy se match karta hai, strict improvement nahi.
Ek aisi denomination set do jahan greedy coin change fail kare. { 1 , 3 , 4 } mein 6 banao: greedy = 4 + 1 + 1 (3 coins), optimal = 3 + 3 (2 coins).
Activity selection mein, o 1 ko greedy ke g 1 se replace karna feasibility kyun preserve karta hai? f g 1 ≤ f o 1 , toh jo bhi activity o 1 khatam hone ke baad compatible thi woh g 1 khatam hone ke baad bhi compatible hai.
Exchange proof kaunsi telescoping inequality finish karti hai? cost( G ) ≤ cost( O ) = OPT, toh cost( G ) = OPT.
Huffman ke sibling lemma mein, total cost change ≤ 0 kyun hai? Yeh do swap terms ka SUM hai ( f ( a ) − f ( x )) ( d x − d a ) + ( f ( b ) − f ( y )) ( d y − d b ) , har ek (non-neg)× (non-pos) product hai.
Greedy Algorithms — general paradigm
Greedy-stays-ahead proof technique
Activity Selection Problem
Huffman Coding
Scheduling to minimise completion time
Smith's rule — weighted completion time
Matroids and the greedy theorem (algebraic reason ki exchange poori classes of problems ke liye kyun kaam karta hai)
Proof by contradiction aur Induction
Dynamic Programming (jab koi exchange argument exist nahi karta tab kya use karo)
First difference at index i
Swap oi and oj into O prime
Telescoping cost G <= OPT
SPT example minimise sum Ck