Inki trie mein ek root-to-leaf path hota hai har suffix ke liye. Problem yeh hai: isme O(n2) nodes aa sakte hain. Isko hum compression se fix karte hain.
Soch ke ek lambi word likhte ho aur tum chahte ho uske andar chhupi har chhoti piece ka ek magic map. Tum us word ko lete ho aur baar baar aage ka ek letter kaatte jaate ho — banana, anana, nana, … — aur in saari tails ko ek aisi tree mein daal do jahan same se shuru hone wale words ek hi branch share karein. Ab agar koi dost puchhe "kya nan isme hai?", tum bas walk karo: n → a → n, aur agar path complete ho jaata hai, toh haan woh andar hai! Neeche kitne leaf-tags latak rahe hain ginne se pata chalta hai woh kitni baar aata hai. $ end mein ek chhoti si flag hai jo ensure karti hai har tail ko apna leaf mile, taaki koi cheez doosre ke andar na chhup jaaye.
String S\$$ ke saare suffixes ka.
Why append a unique terminal `? ::: Taaki koi suffix doosre ka prefix na ho; har suffix phir apne leaf par khatam hota hai, exactly $n+1$ leaves guaranteed hoti hain. How many leaves does a suffix tree of $S\$ have? ::: Exactly $n+1$ (ek har suffix ke liye, ‘suffixbhiincludehai).Constraintoninternalnodes(besidesroot)?:::Harekkekamsekam2childrenhotehain(yehbranchingpointshain).WhyistotalspaceO(n)andnotO(n^2)?:::EdgelabelsSmeinindexpairs(i,j)keformmeinstorehotihain,copiedsubstringsnahi;O(n)edgeskesaathwohO(n)spacehai.TimetotestifpatternPisasubstring?:::O(\lvert P\rvert)—basPkecharactersmatchkartehueneechewalkkaro.HowdoyoucountoccurrencesofPaftermatchingit?:::Matchpointkeneechesubtreemeinleaveskicountkaro.Whatdoesthedeepestinternalnode(bychardepth)giveyou?:::Skalongestrepeatedsubstring.Whymustedgesoutofanodestartwithdistinctcharacters?:::Taakipatternmatchkarnadeterministicho—harnextcharacterkeliyemostekhiedgefollowkarniho.SubstringofSequalsaprefixofwhat?:::S$ ke kisi suffix ka prefix — isliye suffixes ki tree substring queries answer karti hai.