Yeh the KMP topic ka foundations page hai. Hum har woh symbol build karte hain jo parent note use karta hai, "string kya hoti hai" se shuru karke "what does π[i] mean" tak pahunchte hain. Agar ek samajhdar 12-saal-ka baccha line one padhna shuru kare, toh use koi bhi aisa symbol nahi milna chahiye jise define nahi kiya gaya ho.
Yeh baat karne ke liye ki kaun sa moti hai, hum positions ko number karte hain. Programmers 0 se count karna shuru karte hain, 1 se nahi.
Neeche diya figure string ababaca ko saat rounded boxes mein dikhata hai. Har box ek character rakhta hai; har box ke neeche teal number uska index hai. Dekho pehle box par 0 label hai (orange arrow) aur aakhri box par 6 label hai (plum arrow).
Agar P=abab hai toh m=4. Valid indices P[0] se lekar P[m−1]=P[3] tak hain — aakhri index hamesha m−1 hota hai, m nahi. Yeh "off-by-one" sabse common bug ka source hai, isliye isse achhi tarah pakad lo. (Yahi reason hai kyun hum indexing 0 se shuru karte hain: "i text index par match khatam hoti hai, isliye yeh i−m+1 par shuru hui thi" jaisi formula sirf 0-based indices ke saath kaam karti hai.)
Figure mein, teen orange-tinted boxes slice S[0..2] mark karte hain; teal double-headed arrow exactly un teen cells ko span karta hai yeh dikhane ke liye ki slice positions 0, 1, 2 inclusive ko cover karti hai — teen characters, word aba.
Parent note bahut baar S[0..i] likhta hai — woh hamesha bilkul shuru se position i tak ka slice hota hai, yaani pehle i+1 characters. Yeh ek growing window hai jo chhoti shuru hoti hai aur jaise-jaise i badhta hai, right ki taraf aur aage jaati hai.
Yeh do words KMP ka dil hain. Sab kuch inhi par depend karta hai.
Dekho dono lists ε se shuru hoti hain (kuch nahi pakdo) aur puri string par khatam hoti hain (sab kuch pakdo). Empty string hamesha appear hoti hai — yahan se length-0 borders aati hain.
Figure mein ababa ki do copies stack ki gayi hain. Upar wali copy par orange highlight ek prefix mark karta hai (aba, left se liya gaya); neeche wali copy par teal highlight ek suffix mark karta hai (aba, right se liya gaya). Same letters, opposite ends.
ε (empty string) hamesha ek border hai — length 0. ✓
a ek border hai (prefix a, suffix a). ✓
aba ek border hai (prefix aba, suffix aba). ✓
abab ek prefix hai lekin suffix nahi hai → border nahi.
Kyunki ε hamesha ek border hai, kisi bhi string ke liye border lengths ki list kabhi empty nahi hoti — usme kam se kam 0 hota hai.
Figure mein ababa ki ek copy dikhti hai jisme prefix aba upar orange mein bracket kiya gaya hai aur suffix aba neeche teal mein bracket kiya gaya hai. Woh alag positions par hain lekin same letters rakhte hain — yahi coincidence aba ko border banati hai, aur uski length (3) neeche plum color mein answer hai.
ababa ka sabse lamba border aba hai, length 3. Woh number 3 dimag mein rakho — yeh exactly wahi value hai jo failure function report karega.
Ab har ingredient define ho chuka hai, isliye parent ki definition clearly padhti hai.
π numbers ki ek array hai, ek number har position ke liye.
π[0]=0 hamesha: slice S[0..0] ek single character hai. Uska ek hi proper prefix hai — empty string ε, jiski length 0 hai — isliye sabse lambe border ki length 0 hai.
Diagram top to bottom padho. Har arrow ka matlab hai "neeche wale box ko samajhne ke liye upar wale box ki zarurat hai". String / index se shuru karo: yeh tumhe lengthm,n aur growing sliceS[0..i] ke baare mein baat karne deta hai. Ek slice ke do sire hote hain — ek prefix aur ek suffix; sirf proper wale rakhna aur poochna ki prefix kaahan suffix ke barabar hai, ek border define karta hai; har position par sabse lambe border ki length π[i] hai. Aakhir mein, match pointer j aur π milkar KMP ka fallback j←π[j−1] dete hain, aur puri machine right mein diye O(n+m) budget ke andar chalti hai.