Hume har shift s, 0 se n−m tak consider karna hai. → outer loop.
Ek fixed s ke liye, "kya yeh shift valid hai?" ka matlab hai: P[0] ko T[s] se compare karo, P[1] ko T[s+1] se, … → inner loop j=0…m−1 par.
Jaise hi koi bhi character mismatch ho, yeh shift khatam — break early (optimization), baaki check karna bekar hai.
Agar inner loop bina break ke khatam ho jaye, toh saare m chars match ho gaye → s 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
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.
Naive matching text length n aur pattern length m ke liye kitne candidate starting positions check karta hai?
n−m+1 (positions 0 se n−m tak); iske baad pattern text se bahar nikal jaata hai.
Naive pattern matching ki worst-case time complexity kya hai?
O(nm) — zyada precisely Θ((n−m+1)m).
Naive matching ke liye ek worst-case input do.
Text mein sab same char jaise "AAAA…A" aur pattern "AAA…AB" — har shift m−1 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 m 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 j=0 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 T[s..s+m−1]=P[0..m−1], matlab saare m characters line up ho jayein.