3.8.1 · HinglishString Algorithms

Naive pattern matching — O(nm)

1,614 words7 min readRead in English

3.8.1 · Coding › String Algorithms


Problem KYA hai?

  • = "ABABCABABA", = "ABA". Hume har woh jagah chahiye jahan "ABA" ke andar baithta hai.
  • Ek shift valid hai agar saare characters line up ho jayein.

Naive method kaam KYUN karta hai?


Yeh RUN kaise karta hai? (pseudocode scratch se derive karo)

Hum ise definition se step by step banate hain.

  1. Hume har shift , se tak consider karna hai. → outer loop.
  2. Ek fixed ke liye, "kya yeh shift valid hai?" ka matlab hai: ko se compare karo, ko se, … → inner loop par.
  3. Jaise hi koi bhi character mismatch ho, yeh shift khatam — break early (optimization), baaki check karna bekar hai.
  4. Agar inner loop bina break ke khatam ho jaye, toh saare chars match ho gaye → record karo.
NAIVE-MATCH(T, P):
    n = len(T);  m = len(P)
    for s = 0 to n - m:           # candidate start positions
        j = 0
        while j < m and T[s+j] == P[j]:
            j = j + 1
        if j == m:                # inner loop ran to completion
            report match at s

Yeh O(nm) KYUN hai? (bound derive karo)

Figure — Naive pattern matching — O(nm)


Recall Feynman: 12-saal ke bacche ko samjhao

Socho tumhare paas ek lamba sentence hai aur ek chhota word ek transparent ruler par likha hai. Tum ruler ko sentence ki bilkul shuruat mein rakhte ho aur letter by letter check karte ho: pehla letter match karta hai? doosra? Agar chhote word ke saare letters neeche wale letters se match karein, toh tumne dhundh liya! Agar koi bhi letter galat ho, tum ruk jaate ho, ruler ko ek step daayein slide karte ho, aur word ki shuruat se dobara try karte ho. Tum tab tak slide karte rehte ho jab tak ruler sentence ke end tak na pahunch jaye. Yahi sliding-and-checking poori trick hai. Yeh simple hai lekin slow ho sakta hai kyunki har baar slide karne par tum scratch se check shuru karte ho.


Active Recall

Naive matching text length n aur pattern length m ke liye kitne candidate starting positions check karta hai?
(positions se tak); iske baad pattern text se bahar nikal jaata hai.
Naive pattern matching ki worst-case time complexity kya hai?
— zyada precisely .
Naive matching ke liye ek worst-case input do.
Text mein sab same char jaise "AAAA…A" aur pattern "AAA…AB" — har shift chars match karta hai phir aakhri par fail hota hai.
Naive matching practice mein O(n) jaisa kyun behave karta hai?
Typical/random text par, mismatches pehle 1–2 characters mein hi hote hain, toh inner loop kabhi ke kareeb nahi chalta.
Naive matching ko KMP se alag kaarne wala ek idea kya hai?
Naive saari comparison info bhool kar har shift par se restart karta hai; KMP already-matched info reuse karke redundant comparisons skip karta hai.
Inner loop mein early break ka kya role hai?
Jaise hi ek character mismatch ho, compare karna band karo — result change kiye bina kaam bachta hai.
"Valid shift" s ko kya define karta hai?
Woh shift jahan , matlab saare characters line up ho jayein.

Connections

  • KMP Algorithm — prefix function use karke redundant rechecks hatata hai → .
  • Boyer-Moore Algorithm — bad-character/good-suffix rules use karke aage skip karta hai.
  • Rabin-Karp Algorithm — windows ko hash karta hai taaki expected mein compare ho.
  • Big-O Notation analysis ka aadhar.
  • Sliding Window Technique — "pattern slide karna" wala view yahan generalize hota hai.
  • Substring Search Problem — parent problem jo yeh solve karta hai.

Concept Map

find all

only from 0 to n-m

try every one

correct by

outer loop

inner loop

mismatch

all m match

runs n-m+1 times

up to m per shift

worst case

Pattern matching problem

Valid shifts s

n-m+1 candidates

Naive brute force

Correct by exhaustion

Slide pattern each s

Compare char by char

Break early

Report match at s

Time O nm

Theta nm on AAA...A