Rabin-Karp — rolling hash, O(n+m) expected
3.8.3· Coding › String Algorithms
Hum KON SA problem solve kar rahe hain?
Ek text diya hai jiskii length hai aur ek pattern diya hai jiskii length hai; hume har woh position dhundni hai jahan occur karta ho mein (yaani ).
Naive approach har windows ko characters compare karke check karta hai → worst case . Rabin-Karp ka target hai expected.
Hashing KYUN help karta hai
Agar , toh strings definitely alag hain — turant skip karo. Agar , toh woh probably equal hain, isliye hum verify karte hain. Equal strings ka hash hamesha equal hota hai, isliye hum koi match miss nahi karte. Ek hi risk hai false positive (collision), jisme extra check lagta hai.
KAISE: hash ko first principles se build karna
Ek string ko base mein ek number ki tarah treat karo (digits ki tarah socho). Ek string jo length ki hai, jiske character codes hain:
Rolling update derive karna
Hamare paas window ka hash hai:
Hume chahiye window ke liye. Teen operations:
- Remove karo leading char ko, jo contribute karta hai.
- Shift left (multiply by ): baaki har term ka exponent 1 badh jaata hai.
- Add karo naya trailing char .
Toh:
Yeh step KYUN? Subtract karne se purana high-order digit khatam hota hai; se multiply karne par sab shift ho jaate hain; add karne se naya low-order digit insert hota hai. Sab — yahi poora speedup hai.

Complexity — expected KYUN hai
- aur precompute karo: .
- windows par slide karo, har update : .
- Sirf hash matches par verify karo. Ek acche prime se, spurious match ki probability roughly hoti hai, isliye expected verification cost tiny hai → total expected.
- Worst case (har window collide kare, jaise small ke saath adversarial input).
Worked Example 1 — chhota sa haath se
dhundho mein. Base , , code lo.
- .
- Window 0 = "aa": . Kyun? digits hain . → skip.
- Roll karo window 1 = "ab" par: . . Kyun? leading 'a'(=0) remove hua, shift hua, 'b'(=1) add hua. se match → verify → "ab"=="ab" ✓. Index 1 par match.
Worked Example 2 — ek collision (steel-man)
, jisme aise choose kiya ki do alag strings ka hash equal ho jaaye. Maano bad luck se.
- Hashes match karte hain → hume zaroor char-by-char verify karna hai.
- Verification fail hoti hai → hum correctly reject karte hain. Yeh kyun matter karta hai: hash ek filter hai, proof nahi. Verification skip karna fake match report karega.
Common Mistakes
Flashcards
Rabin-Karp ki core idea
Hash match ke baad verify kyun karte hain?
Rolling update formula
Roll mein se multiply KYUN karte hain?
Expected vs worst time
Prime ka role
rolls ke liye kya precompute karna padta hai?
Negative hash values se kaise bachein?
((x) % q + q) % q.Recall Feynman: ek 12-saal ke bacche ko explain karo
Socho har word ko uske letters se ek secret number mein convert kiya jaata hai, jaise ek fingerprint. Ek lambe sentence mein koi word dhundhne ke liye, tum ek window slide karte ho aur uska fingerprint compute karte ho. Har baar bilkul naya fingerprint compute karna slow hai — par yahan magic yeh hai: jab tum ek letter aage slide karte ho, tum bas pehle letter ka hissa mitaate ho aur naye letter ka hissa add karte ho, bahut fast. Agar do fingerprints match karein, tum actual letters double-check karte ho (kyunki kabhi-kabhi do alag words ka fingerprint same hota hai). Woh double-check tumhara safety net hai.
Connections
- Hashing — polynomial / modular hash ke foundations
- Modular Arithmetic — kyun hum prime use karte hain aur negatives se bachte hain
- Knuth-Morris-Pratt — guaranteed (koi collision nahi) failure function ke zariye
- Z-Algorithm — ek aur linear pattern matcher
- String Hashing for Substring Comparison — same rolling idea range equality ke liye
- Birthday Paradox — collision probability ka intuition