Question bank — Naive pattern matching — O(nm)
3.8.1 · D5· Coding › String Algorithms › Naive pattern matching — O(nm)
Ye bank naive pattern matching ki boundaries aur misconceptions drill karta hai. Algorithm ki machinery ke liye parent note dekho; iske weaknesses fix karne wale algorithms ke liye KMP Algorithm, Boyer-Moore Algorithm, aur Rabin-Karp Algorithm dekho.
In questions mein jo vocabulary use hoti hai
Koi bhi trap try karne se pehle, un paanch symbols ko pakad lo jo har jagah neeche dikhenge. Inme se har ek kisi specific cheez ka naam hai jise tum point kar sakte ho.
Neeche ki figure ek matching shift aur ek failing shift dikhati hai taaki tum "slide" aur "spell" ka matlab picture kar sako.
True ya false — justify karo
Naive matching ek valid match miss kar sakta hai agar pattern do baar ek saath aaye.
Candidate shifts ki sankhya hai.
Early break yeh change karta hai ki algorithm kaun se matches report karta hai.
Naive matching hamesha hoti hai.
Agar ho toh algorithm zero matches report karta hai.
range(n - m + 1) empty ho jaata hai (uska argument hai), toh koi bhi shift test nahi hoti, jo sahi hai kyunki pattern fit hi nahi ho sakta.Early break hatane se algorithm incorrect ho jaata hai.
Naive matching uss characters ko reuse karta hai jo pichle shift mein already compare ho chuke hain.
Ek empty pattern () ko har position par match report karna chahiye.
range(n - m + 1) range(n+1) hai, toh shifts hain ( se tak) aur inner while zero baar chalta hai, har shift ko vacuously valid banaata hai; yeh conventional convention hai.Worst case mein text aur pattern mein koi common characters nahi hote.
Error dhundo
for s in range(n): outer loop bound ke roop mein.
range(n - m + 1) taaki pattern text se bahar na nikal jaaye."Maine saare chars compare kiye aur 3 match hue, toh main skip kar lunga."
Inner loop likha while j <= m and T[s+j]==P[j]:.
j < m (strict) hona chahiye; par koi nahi hai (valid indices se tak hain), toh <= pattern ke end se aage padhta hai aur off-by-one hai.Match tab hi report karo jab j > m.
j == m hai: inner loop ke tak pahunchte hi ruk jaata hai (saare chars match), toh kabhi se zyada nahi hota; j > m kuch bhi report nahi karta."Outer loop dominant hai, toh cost hai."
Poore substrings T[s:s+m] == P se compare karo aur use kaho.
Why questions
Outer loop par kyun ruk jaata hai ki jagah?
Naive matching "correct by exhaustion" kyun hai?
Algorithm har nayi shift par se restart kyun karta hai?
Same algorithm English par lekin "AAAA" par kyun ho sakta hai?
Early break ek optimization kyun hai, correctness fix nahi?
Alphabet bada hone par practice mein naive matching tend kyun karta hai faster hone ke liye?
Naive matching ko sliding window per step kyun classify nahi kiya jaata?
Edge cases
Jab pattern poore text ke barabar ho () toh algorithm kya output karta hai?
range(n-m+1) range(1) hai), aur woh match karta hai, toh par ek single match report hoti hai.Empty text () par non-empty pattern ke saath kya hota hai?
range(n - m + 1) ka argument hai toh yeh empty hai; koi comparison nahi chalta aur koi match report nahi hota, jo sahi hai.Jab dono text aur pattern empty hon ( aur ) toh kya hota hai?
range(n - m + 1) range(1) ban jaata hai, toh exactly shift test hoti hai; inner while zero baar chalta hai, toh j == m (dono ) succeed karta hai aur par ek match report hota hai — empty pattern empty text mein position 0 par milta hai.Agar pattern single character ka ho (), toh complexity kya hai?
(bilkul aakhri legal shift) par match report hoti hai kya?
range(n-m+1) mein included hai, toh final aligned position kisi bhi aur shift ki tarah test hoti hai aur match hone par report hoti hai.Kya do reported matches text mein overlap kar sakte hain?
Agar ka har character ke har character ke barabar ho (dono "A" se bhare)?
Recall Traps ka ek-line summary
Boundary dhyan rakho, worst case ko average se kabhi confuse mat karo, aur yaad rakho break time bachata hai correctness nahi — jis pal tum comparisons reuse karna chahte ho, tum naive matching chhodkar KMP Algorithm ki taraf ja rahe ho.
Connections
- Naive pattern matching — O(nm) — woh parent jise yeh bank drill karta hai.
- KMP Algorithm — "har shift par restart" ka fix.
- Boyer-Moore Algorithm — worst case beat karne ke liye aage skip karta hai.
- Rabin-Karp Algorithm — expected compares ke liye windows hash karta hai.
- Big-O Notation — yahan worst vs average ki language.
- Sliding Window Technique — kyun naive per slide nahi hai.
- Substring Search Problem — umbrella problem.