3.8.2 · D1 · HinglishString Algorithms

FoundationsKMP algorithm — failure function, O(n+m) — full derivation

2,635 words12 min read↑ Read in English

3.8.2 · D1 · Coding › String Algorithms › KMP algorithm — failure function, O(n+m) — full derivation

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 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.


1. Ek string, aur usme point karne ka tarika

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 label hai (orange arrow) aur aakhri box par label hai (plum arrow).

Figure — KMP algorithm — failure function, O(n+m) — full derivation

Toh string ababaca ke liye:

  • , , , … .

2. Length , length

Agar hai toh . Valid indices se lekar tak hain — aakhri index hamesha hota hai, 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: " text index par match khatam hoti hai, isliye yeh par shuru hui thi" jaisi formula sirf 0-based indices ke saath kaam karti hai.)


3. Empty string

Strings ko kaatne se pehle, hume ek special string chahiye jo miss karna aasan hai.


4. Substring aur slice

ababaca ke liye, aur dobara (same letters, alag location).

Figure mein, teen orange-tinted boxes slice 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.

Figure — KMP algorithm — failure function, O(n+m) — full derivation

Parent note bahut baar likhta hai — woh hamesha bilkul shuru se position tak ka slice hota hai, yaani pehle characters. Yeh ek growing window hai jo chhoti shuru hoti hai aur jaise-jaise badhta hai, right ki taraf aur aage jaati hai.


5. Prefix aur suffix — ek slice ke do sire

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.

Figure — KMP algorithm — failure function, O(n+m) — full derivation

6. Proper vs. whole

ababa ke liye: ababa khud ek prefix aur suffix hai, lekin ek proper nahi. Proper prefixes hain — pura word chhod kar sab kuch.


7. Border — ek prefix jo suffix bhi hai

ababa ke liye:

  • (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 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.

Figure — KMP algorithm — failure function, O(n+m) — full derivation

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.


8. Failure function — sab kuch jodna

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.
  • hamesha: slice ek single character hai. Uska ek hi proper prefix hai — empty string , jiski length hai — isliye sabse lambe border ki length hai.

9. Big-O — ka actually kya claim hai


10. Match pointer (ek aage ki jhalak)

Ek aur symbol neeche diye map mein appear karta hai, isliye use abhi meet karo.


11. Pieces topic ko kaise feed karte hain

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 length aur growing slice 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 hai. Aakhir mein, match pointer aur milkar KMP ka fallback dete hain, aur puri machine right mein diye budget ke andar chalti hai.

string S and index S of i

length m and n

slice S from 0 to i

prefix left end

suffix right end

proper strictly shorter

border prefix equals suffix

failure function pi of i

match pointer j chars matched

KMP fallback set j to pi of j minus 1

Big O growth

O of n plus m claim


Equipment checklist

Cover the right side and answer; reveal to check.

ka kya matlab hai, aur counting kahan se shuru hoti hai?
Position par character, 0 se count karte hue — isliye pehla character hai.
aur kya hain?
= pattern ki length; = text ki length.
Length wali string ka last valid index kya hai?
( nahi).
Empty string kya hai, aur uski length kya hai?
Woh string jisme koi character nahi, likhi jaati hai; iski length 0 hai.
Borders ke liye empty string kyun matter karti hai?
Yeh har string ka proper prefix aur suffix dono hai, isliye ek length-0 border hamesha exist karta hai — yahi ka source hai.
Slice mein kya hai?
Pehle characters — shuruat se lekar position tak inclusive.
Ek line mein prefix aur suffix define karo.
Prefix = left end se chunk; suffix = right end se chunk, kuch skip nahi ( dono mein included hai).
Prefix ya suffix ko proper kya banata hai?
Woh puri string se strictly shorter ho (kam se kam ek character bahar chhode).
String ka border kya hota hai?
Ek chunk jo simultaneously proper prefix aur proper suffix dono ho.
exactly kya store karta hai?
Slice ke sabse lambe border ki length (ek number, letters nahi).
hamesha 0 kyun hota hai?
Single character ka proper prefix sirf empty string hai, jiski length 0 hai.
ababa ka sabse lamba border kya hai, aur is tarah kya hai?
aba, length 3, isliye .
KMP mein match pointer kya hai?
Abhi tak kitne pattern characters match hue hain uska count; mismatch par yeh ban jaata hai.
, ke comparison mein kya promise karta hai?
Kaam input sizes ke sum ki tarah badhta hai, unke product ki tarah nahi — bade inputs ke liye kaafi fast.