Worked examples — Rabin-Karp — rolling hash, O(n+m) expected
3.8.3 · D3· Coding › String Algorithms › Rabin-Karp — rolling hash, O(n+m) expected
Is page mein Rabin-Karp ko itna drill karenge ki koi bhi case surprise na kar sake. Pehle hum har tarah ki situation list karenge jo algorithm ko face karni pad sakti hai, phir har ek ko poori tarah se haath se solve karenge.
Throughout: text ki length hai, pattern ki length hai. Character codes: hum use karte hain jab tak kuch aur na bataya jaaye. Rolling update jo hum baar baar use karte hain woh hai
Scenario matrix
Neeche har worked example ko uss cell ke saath tag kiya gaya hai jo woh cover karta hai. Milke yeh poora grid fill karte hain.
| Cell | Case class | Kya galat ho sakta hai / kyun special hai |
|---|---|---|
| A | Pehle hi window mein match | Off-by-one: kya index 0 handle hota hai? |
| B | Aakhri window mein match | Boundary: kya loop tak pahunchta hai? |
| C | Multiple matches (overlapping) | Kya hum saari positions report karte hain, jaldi ruk toh nahi jaate? |
| D | Koi match hi nahi | Har hash alag hai → pure skipping |
| E | Hash collision (false positive) | Hashes equal hain, strings alag hain → verify reject kare |
| F | Degenerate: (single char) | ; kya roll abhi bhi valid hai? |
| G | Degenerate: (pattern = poora text) | Sirf ek window; bilkul rolling nahi |
| H | Negative intermediate value | Subtraction mod ke andar 0 se neeche chali jaati hai → +q fix |
| I | Real-world word problem | Plagiarism / DNA style application |
| J | Exam twist: chhota worst case force karta hai | Har window collide karti hai → , expected se contrast |
Yeh Examples 1–10 mein cover hote hain. Cells A–J sab covered hain.
Example 1 — Pehli window mein match (Cell A)
Forecast: match kahan expect karte ho — index 0, 1, ya dono? Padhne se pehle guess karo.

- Pattern hash karo. . Yeh step kyun? Har window ko compare karne ke liye ek number chahiye. "ab" ko base-26 number ki tarah padhne par milta hai.
- Window 0 = "ab" hash karo. . Yeh step kyun? Pehli window scratch se banani padti hai (roll karne ke liye kuch hai hi nahi abhi). Board par peela window dekho — woh positions 0–1 ke upar baitha hai.
- Compare karo: → hashes match karte hain → verify karo:
"ab" == "ab"✓. Index 0 par match report karo. Verify kyun? Hash equality zaroori hai par kaafi nahi; letters confirm karne hi chahiye. - Window 1 = "ba" par roll karo. . . → skip.
Verify karo: "ba" ka direct hash ✓, roll se agree karta hai. Sirf index 0 match karta hai. ✔
Example 2 — Aakhri window mein match (Cell B)
Forecast: pattern "ca" clearly end mein baitha hai. Kya loop wahan tak pahunchega?
- Pattern hash karo: . Kyun? yeh hamara comparison target hai.
- Window 0 = "aa": → skip.
- Window 1 = "ac" par roll karo: → skip. Yeh step kyun? Leading 'a'(=0) drop karo, slide karo, 'c'(=2) add karo.
- Window 2 = "ca" par roll karo: .
→ verify karo
"ca"=="ca"✓ → index 2 par match (aakhri window, kyunki ).
Verify karo: direct hash "ca" ✓. Loop run karna chahiye; yahan woh inclusive endpoint hai. ✔
Example 3 — Multiple overlapping matches (Cell C)
Forecast: "aaaa" mein "aa" kitni baar aata hai? Overlaps include karke count karo.
- Pattern hash karo: .
- Windows: har window "aa" hai, toh har hash hai.
- → verify ✓ → 0 par match.
- → 1 par match.
- → 2 par match. Yeh step kyun? Hume pehle match par rukna nahi — task har position maangta hai. Indices par overlaps sab count hote hain.
- Windows exist karte hain ke liye (yani ).
Verify karo: par matches, total 3 occurrences. ✔
Example 4 — Kahin koi match nahi (Cell D)
Forecast: "zz" ek bade number mein hash hota hai; kya tumhe lagta hai koi window verify bhi trigger karegi?
- Pattern hash karo: . Reduce karo: . Yahan mod kyun? hai, toh hum ke andar kaam karte hain; ko reduce karna padega.
- "abab" ki windows: "ab", "ba", "ab". Koi bhi ke barabar nahi.
- .
- .
- . Yeh step kyun? Pure skipping — hash filter teeno ko instantly reject karta hai, zero character comparisons.
- Koi bhi hash ke barabar nahi → bilkul koi verification nahi.
Verify karo: matches ; verification count . Filter ke liye yeh best case hai. ✔
Example 5 — Hash collision, false positive (Cell E)
Forecast: kya do alag strings mod 25 same hash de sakti hain? Agar haan, toh humein kya bachata hai?
- Pattern hash: ; .
- Window "az": ; . Yahan koi collision nahi.
Ab engineered wala: aur … ek window choose karo "z" style. Concretely, note karo aur koi bhi string jisme value ho woh collide karegi. String
"ba"(value 26) aur ek hypothetical"a"+code-1 window dono denge. - Baat yeh hai: jab ho lekin actual letters alag hon, toh hum char-by-char verify karke reject karte hain. Yeh step kyun? Hash ek filter hai, proof nahi — dekho Birthday Paradox kyun collisions intuition se zyada common hoti hain.
Verify karo: aur — toh value aur wali strings ke under collide karti hain; verification hi correctness maintain karta hai. ✔
Example 6 — Single-character pattern, (Cell F)
Forecast: ke saath, kya hoga? Kya roll formula abhi bhi sense karta hai?
- . Kyun? Ek character window ke "leading digit weight" ki value bas hoti hai.
- Pattern hash karo: .
- Windows (har ek ek char hai): "c", "a", "b".
- → skip.
- Roll karo: … lekin ruko — ke liye roll simplify ho jaata hai. Poora char drop karo, se multiply karo (kuch bachta nahi), new char add karo. Effectively .
… equals → verify karo
"a"=="a"✓ → index 1 par match. Yeh step kyun? , times 26 hai 0, plus 'a'(=0) hai 0. Confirm karta hai ki bas naye char ka code hai. - → skip.
Verify karo: sirf index 1 match karta hai; roll se sahi recover hua. ✔
Example 7 — Pattern poore text ke barabar hai, (Cell G)
Forecast: jab ho toh kitni windows exist karti hain? Kitne rolls hote hain?
- Windows: . Exactly ek window, toh koi rolling nahi hoti. Yeh kyun matter karta hai? Rolling machinery use hi nahi hoti; yeh ek single from-scratch hash + ek verify par degenerate ho jaata hai.
- Dono hash karo: codes . . Mod 101 compute karo: . . .
- ke liye same value (identical string) → hashes match karte hain → verify karo → index 0 par match.
Verify karo: ; identical text same deta hai; index 0 par single match. ✔
Example 8 — Negative intermediate value, +q fix (Cell H)
Forecast: jab hum bada leading digit drop karte hain, kya zero se neeche ja sakta hai?
- Start hash "ba": . .
- Leading 'b'(=1) drop karo: . Yahan theek hai — ek harder case banate hain: use karo taaki values already reduced hon. . Ab . Abhi bhi theek hai — toh force karo: maano , , . — negative! Yeh step kyun? Modulus ke under, reduced us product se chhota ho sakta hai jo hum subtract karte hain.
- Fix yeh hai: compute karo
((H - x) % q + q) % q. Yahan : math mein yeh hai, lekin bahut saari languages deti hain; add karo: . Yeh step kyun? Har hash mein hona chahiye taaki comparisons consistent hon — dekho Modular Arithmetic.
Verify karo: (mathematical modulo); +q trick reproduce karta hai. ✔
Example 9 — Real-world word problem: plagiarism scan (Cell I)
Forecast: "metadata" "data" se khatam hoti hai. Usse match ka index kya hoga?
- Pattern "data" hash karo: . . use karte hain (Ex. 7 se): . Pehle hash kyun? "metadata" ki har 4-window se slide-compare karne ke liye ek number.
- Target window "data" index par baitha hai (0-indexed: m-e-t-a-d-a-t-a). Iska hash hai (same letters as ) → hashes match karte hain → verify karo → ✓ index 4 par match. Yeh naive se better kyun? Lambi submission par, hum verification sirf rare hash hit par pay karte hain — expected . Yeh bilkul wahi String Hashing for Substring Comparison idea hai jo search ke liye reuse ho raha hai.
Verify karo: ; "metadata" mein occurrence index 4 hai. ✔
Example 10 — Exam twist: chhota worst case force karta hai (Cell J)
Forecast: ke saath, har number reduce hokar ho jaata hai. Filter ka kya hoga?
- Sab kuch 0 mein hash hota hai. Kisi bhi ke liye, . Toh aur har window hash . Yeh step kyun? Modulus saari values collapse kar deta hai — hash filter useless ho jaata hai.
- Har window "hit" karti hai → hum saari windows verify karte hain, har ek check hai. Total verification work character comparisons → yeh worst case hai.
- Contrast: jaisi large prime ke saath, collision chance hai, verifications rare hain, aur hum expected recover karte hain. Deterministic linear algorithms jaise Knuth-Morris-Pratt aur Z-Algorithm is failure mode se poori tarah bachte hain.
Verify karo: windows ; har hash ; verifications ; comparisons . Worst-case demonstrate ho gaya. ✔
Recall Quick self-check
length ke aur pattern ke liye windows ki number ::: . ke saath, har hash equals ::: (worst case, har jagah verify). jab ho ::: . "metadata" mein "data" ka match index ::: 4. Negative intermediate hash fix kaise karein ::: add karo phir dobara mod lo.
Connections
- Parent topic
- Hashing — polynomial fingerprint jo hum compute karte hain
- Modular Arithmetic —
%qreductions aur+qnegative fix - Birthday Paradox — kyun collisions (Cell E) intuition se zyada common hain
- Knuth-Morris-Pratt / Z-Algorithm — deterministic linear matchers jo Cell J se bachte hain
- String Hashing for Substring Comparison — wahi rolling hash range equality ke liye reuse hota hai