3.8.4 · HinglishString Algorithms

Z-algorithm — Z-array construction, O(n+m)

2,031 words9 min readRead in English

3.8.4 · Coding › String Algorithms


Z-array HAI KYA?

Concretely .


Naive version kyun lagta hai — aur fix kaise karein?

Naive: har ke liye, ko se compare karo jab tak mismatch na ho. Worst case aaaa...a → har end tak scan karta hai → .


Ise BUILD kaise karein — scratch se derivation

Hum ek window maintain karte hain = ab tak mila sabse rightmost segment jo prefix se match karta hai (shuru mein ).

Har ke liye se tak, do cases:

Case A — (hum kisi bhi known box ke bahar hain). Hamare paas koi information nahi. Scratch se compare karo: se shuru karo. Agar hai, naya box set karo .

Case B — (hum box ke andar hain). ko prefix mein mirror position maano. Hum jaante hain. Do sub-cases:

  • B1: . Mirror ka match poora box ke andar fit ho jaata hai. Kyunki box ke andar bilkul prefix ke barabar hai, position par match identical hai: Comparison kyun nahi? Kyunki jo mismatch mirror ke match ko khatam karta hai woh box ke andar hi hai, toh guaranteed hai ki par bhi wahi repeat hoga.

  • B2: . Mirror ka match box boundary tak pahunch jaata hai; se aage koi guarantee nahi, isliye se manually compare karna padega: Phir box update karo .

Figure — Z-algorithm — Z-array construction, O(n+m)

Total cost kyun hai?

Pattern matching application

Pattern (length ) ko text (length ) mein dhundhne ke liye: string banao (length ) par compute karo. Jahan bhi ho, wahan pattern mein position par milta hai. Total cost .


Common mistakes


Recall Feynman: 12-saal ke bachche ko samjhao

Socho kisi word ke pehle kuch letters tumhara "secret code" hain. Tum baaki word mein chalo aur har jagah poocho: "Yahan se shuru karke, kitne letters word ke shuru se match karte hain?" Slow tarika hai ki har baar zero se re-check karo. Clever trick yeh hai: agar tumne pehle ek lamba chunk match kiya tha, toh woh chunk shuruat ka ek photocopy hai — toh us chunk ke andar kisi jagah ka behavior bilkul wahi hoga jo shuruat ke matching jagah jaisa hai. Tum bas woh answer dekh lo jo pehle se likha hua hai, dobara count karne ki zarurat nahi. Naya counting sirf tab karo jab photocopied chunk ki edge ke bahar jao — aur kyunki woh edge sirf aage hi jaati hai, zyada kaam kabhi nahi hoga.


Flashcards

Z[i] kya represent karta hai?
Index se shuru hone wale substring ki length jo ka prefix bhi hai, aur jo sabse lamba ho.
Naive Z computation kyun hai?
"aaa...a" jaisi strings ke liye har starting index end tak re-scan karta hai, jo comparisons tak add up hoti hain.
Z-box [l,r] kya hai?
Sabse rightmost (largest ) interval jo prefix se match karna already known hai: .
Case B () mein mirror index kya hai?
; prefix ke andar corresponding position.
Box ke andar copy kyun kar sakte hain bina compare kiye?
ke andar string prefix ke equal hai, isliye ; mirror ka match (aur uska terminating mismatch) exactly repeat hota hai — agar woh box ke andar rahe. :::
kisse bachata hai?
se aage aisi matches claim karne se jo kabhi verify nahi hui; yeh trust ko box boundary par cap karta hai.
Box kab update karte hain?
Sirf jab ho, yaani naya match current box se aage right mein jaaye.
Total cost kyun hai?
Inner while ki har iteration ko 1 se badhati hai; sirf badhta hai aur hai, isliye total extensions hain.
Z se pattern matching kaise karein?
banao, compute karo; jahan (pattern length) ho woh matches hain.
Separator '#' dono strings mein absent kyun hona chahiye?
Warna Z-match boundary ke paas ja sakta hai aur false occurrence report kar sakta hai.

Connections

  • String Hashing — alternate substring-match tool; Z hash collisions se bachata hai.
  • KMP failure function — prefix-match info bhi compute karta hai; Z aur prefix-function aapas mein convert ho sakte hain.
  • Suffix Array / Suffix Automaton — repeated queries ke liye heavier structures.
  • Amortized Analysis — " sirf badhta hai" wala argument ek potential-function classic hai.
  • Manacher's Algorithm — palindromes ke liye same "symmetric/mirror box reuse" trick.

Concept Map

defines

Zi = longest match with prefix

enables

glue pattern + text

worst case aaaa

mirror inside box

avoids re-comparison

i > r

i <= r

extends r

fixed by

String s length n

Z-array

Definition

Pattern matching

Find Z = pattern length

Naive compare

O n^2 cost

Z-box l..r rightmost

Reuse Z at i-l

O n+m linear

Case A compare from scratch

Case B copy mirror