3.8.1 · D2 · HinglishString Algorithms

Visual walkthroughNaive pattern matching — O(nm)

2,442 words11 min read↑ Read in English

3.8.1 · D2 · Coding › String Algorithms › Naive pattern matching — O(nm)

Yeh Naive pattern matching — O(nm) ka companion note hai. Pehle woh padhna pseudocode ke liye; yeh padhna isse dekhne ke liye.


Step 1 — Kaagaz ki do strips

KYA. Hum do cheezein se shuru karte hain aur kuch nahi. Ek lambi strip — text — aur ek chhoti strip — pattern. Har chhota box exactly ek character hold karta hai.

KYUN. Kisi bhi formula se pehle, humein raw ingredients ke liye naam chahiye. Poora problem yeh hai: chhoti strip lambi strip ke upar exactly kahan baith ti hai? Agar hum dono strips ko picture nahi kar sakte, toh koi bhi baad ka symbol kuch matlab nahi rakhega.

PICTURE. Figure dekho. Upar ki row text hai; maine har box ke neeche ek chhota number likha hai — woh number us box ki position hai, se ginti karte hue. Hum se count karte hain ( se nahi) kyunki code mein array indexing aise hi kaam karti hai, aur yeh poora page asal mein code ki ek picture hai.

Figure — Naive pattern matching — O(nm)

Step 2 — "Mil gaya" ka matlab kya hai?

KYA. Hum chhoti strip ko slide karte hain taaki uska left edge text ke box number ke upar baith jaye. Woh number shift kehlata hai. Hum kehte hain shift kaam karta hai (yaani valid hai) jab pattern ka har box seedha uske neeche wale box se match karta hai.

KYUN. "Word dhundho" vague hai. Isse kuch aisa banana ke liye jo ek machine check kar sake, humein ise ek number ke baare mein ek precise haan/na ke sawaal mein badalna hoga. Figure pe parked pattern dikhata hai: pattern box text box ke upar, pattern box text box ke upar, pattern box text box ke upar.

PICTURE. Teen violet arrows follow karo. Har ek pattern box ko us text box se pair karta hai jise usse equal hona chahiye.

Figure — Naive pattern matching — O(nm)

Step 3 — Strip kitna slide ho sakti hai?

KYA. Hum poochhte hain: left edge ke liye legal resting places kya hain? Strip bilkul shuru se slide ho sakti hai () us aakhri jagah tak jahan uska right box ek real text box pe land karta hai.

KYUN. Agar hum zyada slide kar dein, toh pattern ka right end text ke edge se aage "empty air" mein chala jaata hai — compare karne ke liye koi box nahi hoga, aur code array se aage padhne pe crash ho jaayega. Toh ek last legal shift hota hai, aur legal shifts ko count karna poori time analysis ka beej hai.

PICTURE. Figure teen positions dikhata hai: sabse left (), ek middle wala, aur sabse right legal wala. Notice karo ki pattern ka right box us last position mein exactly last text box pe land karta hai. Ek aur step right aur woh gir jaata hai (faded/red draw kiya hua).

Figure — Naive pattern matching — O(nm)

Step 4 — EK shift check karna: spell it out

KYA. Strip ko ek shift pe freeze karo. Ab hum counter use karke pattern ke andar ek chhota left-to-right scan chalate hain: box compare karo, phir box , phir box ... Jaise hi ek pair disagree kare, ruk jaao.

KYUN. Ek single failed letter hi prove kar deta hai ki yeh shift dead hai — yeh poora match nahi ho sakta, toh baki check karna wasted breath hai. Jaldi rokna early break hai. Isse answer kabhi nahi badalta (dead shift dead rehti hai); sirf kaam bachta hai.

PICTURE. Figure pe hamare example ka scan dikhata hai. Pehle do boxes pe green checks (A=A, B=B), phir pe red cross jahan . Scan ruk jaata hai — daayein faded box pe nazar bhi nahi jaati.

Figure — Naive pattern matching — O(nm)

Step 5 — Lucky case: pehle hi box pe mismatch

KYA. Kabhi kabhi pehla hi comparison () fail ho jaata hai. Tab poora inner scan sirf ek comparison lamba hota hai.

KYUN. Humein yeh case cover karna hai kyunki yahi naive matching ko real life mein fast banata hai. Ordinary English ya random text pe, zyaataar shifts box ya box pe mar jaate hain — pattern ka pehla letter rarely random text letter se match karta hai.

PICTURE. Figure dikhata hai (B under A → instant red cross at ) aur (C under A → instant cross). In shifts mein se har ek ko sirf ek comparison lagta hai, nahi. "Kaam kiya" wala green bar ek sliver hai.

Figure — Naive pattern matching — O(nm)

Step 6 — Killer case: mismatch hamesha LAST box pe

KYA. Ab hum jaan-boojhkar sabse bura input banate hain. Text sab ek letter ka ho, "AAAAAAAAA", aur pattern ho "AAAB". Har shift pe pehle boxes match karte hain (saare A's), aur sirf last box fail karta hai (B vs A).

KYUN. Yahan early break bekaar hai — yeh kabhi jaldi trigger nahi hota, kyunki failure bilkul last box pe chhupi hoti hai. Har single shift marne se pehle poore comparisons pay karta hai. Yahi case headline number force karta hai, aur exactly yahi redundancy hai jo KMP Algorithm aur Boyer-Moore Algorithm mitate karne ke liye banaye gaye the.

PICTURE. Figure kai shifts stacked dikhata hai. Har row mein pehle teen boxes green hain (A=A) aur chautha red cross hai (B≠A). Green work-bars saari full width hain — maximum kaam, har baar.

Figure — Naive pattern matching — O(nm)

Step 7 — Strips ke neeche ka area = running time

KYA. Har shift ko horizontal bar ki tarah stack karo, uski length = us shift ne kitne comparisons kiye. Total kaam saari bars ki total length hai — literally picture ka area.

KYUN. Yeh "kitna slow?" ko "shaded region kitna bada hai?" mein convert karta hai — kuch jo tum dekh sako. Sabse uncha possible tower mein bars hain (ek per shift), har ek zyaada se zyaada lamba. Toh shaded area kabhi bhi height aur width ke rectangle se zyaada nahi ho sakta.

PICTURE. Left panel: real text — zyaataar bars chhote slivers hain, shaded area chhota hai ( jaisa behave karta hai). Right panel: killer text — har bar full width hai, shaded area poora rectangle fill karta hai.

Figure — Naive pattern matching — O(nm)

Ek-picture summary

Upar sab kuch compressed: candidate shifts (Step 3) → inner scan with early break (Step 4) → lucky-vs-killer (Steps 5–6) → area = time (Step 7).

Figure — Naive pattern matching — O(nm)
Recall Poori walkthrough ki Feynman retelling

Socho ek lambi sentence table pe tape ki hui hai aur ek chhota word ek see-through ruler pe likha hai. Main ruler ka left edge box pe rakhta hoon aur left se right padhta hoon: kya yeh letter match karta hai? Agla? Agar koi letter galat ho toh main turant rok leta hoon (time kyun barbaad karoon?) aur ruler ko ek box daayein slide kar deta hoon, apni reading ruler ke pehle letter se dobara shuru karke. Main tab tak hi slide kar sakta hoon jab tak ruler ka right end sentence ke last box tak pahunche — isse mujhe exactly jagahein milti hain try karne ke liye.

Total reading kitni? Har jagah ke liye ek bar draw karo, utna lamba jitne letters maine wahan padhe. Normal sentence pe zyaataar bars tiny hote hain — ruler ka pehla letter usually mismatch karta hai, toh har try basically ek glance hai, aur poora kaam sirf sentence walk karne jaisa lagta hai ( kaam). Lekin ek sneaky sentence jaise "AAAAA…" ruler "AAAB" ke saath, har try almost poori tarah match karta hai aur sirf last letter pe fail hota hai, toh har bar full length ka hota hai. Ab bars height (jagahon ki sankhya) times width (word ki length) ka poora rectangle fill karte hain — yahi worst case hai. Ek kami jo main baar baar karta rehta hoon: har slide pe main abhi jo seekha ushe phenk deta hoon aur scratch se padhta hoon. Isse yaad rakhna KMP ki taraf leap hai.


Active Recall

Shift ki last legal value kya hai, aur kyun?
, kyunki pattern ka right box pe baith ta hai aur woh (last real text index) hona chahiye.
Bar-tower picture mein, total shaded area kya represent karta hai?
Character comparisons ki total sankhya, yaani running time.
Killer input "AAAA…A" / "AAA…B" worst case kyun hai?
Har shift last pattern box ke alawa sab match karta hai, toh early break kabhi jaldi fire nahi hota aur har shift poore comparisons pay karta hai.
Naive matching "AAAAAAAAA", "AAAB" pe kitne comparisons karta hai?
.

Connections

  • Naive pattern matching — O(nm) — parent note with pseudocode aur full trace.
  • KMP Algorithm — matched info yaad rakhta hai pe restart karne ki jagah → .
  • Boyer-Moore Algorithm — worst case ko aage skip karke khatam karta hai.
  • Rabin-Karp Algorithm — poori windows ko hash se expected mein compare karta hai.
  • Big-O Notation — area-to-time argument ki language.
  • Sliding Window Technique — "strip slide karo" mental model generalized.
  • Substring Search Problem — parent problem jo yeh solve karta hai.

Concept Map

left edge at s

s from 0 to n-m

inner scan j

first mismatch

all m match

dies on box 0

dies on last box

bars stacked

full rectangle

Two strips text and pattern

Shift s

n-m+1 candidates

Compare box by box

Early break

Report match

Lucky near O n

Killer full m each

Area equals time

O n times m