Exercises — Suffix tree (conceptual)
3.8.8 · D4· Coding › String Algorithms › Suffix tree (conceptual)
Hum EK reference tree banayenge aur use baar baar reuse karenge. Neeche banana$ ka suffix tree hai — isko dekhte rehna.

Level 1 — Recognition
Goal: tree ko padho aur definitions sahi se sunao.
L1.1
banana$ ke saare suffixes unke start indices ke saath list karo.
Recall Solution
Baar baar aage ka letter kaato, $ ko tail par rakhte hue:
| index | suffix |
|---|---|
| 0 | banana$ |
| 1 | anana$ |
| 2 | nana$ |
| 3 | ana$ |
| 4 | na$ |
| 5 | a$ |
| 6 | $ |
Yeh suffixes hain. 7 kyun, 6 kyun nahi? akela $ khud ek suffix hai.
L1.2
banana$ ke suffix tree mein kitne leaves hain, aur bilkul itne hi kyun?
Recall Solution
Exactly ==== leaves — har suffix ke liye ek. $ guarantee karta hai ki koi suffix doosre ka prefix nahi hoga, isliye har suffix apne khud ke leaf par khatam hota hai, kisi edge ke beech mein rukne ki bajay.
L1.3
True/False: suffix tree ke har internal node (root ke alawa) mein kam se kam 2 children hote hain.
Recall Solution
True. Sirf ek child wala node koi decision nahi leta — compression ke dauran yeh ek single edge mein absorb ho jaata hai. Isliye har surviving internal node ek branching point hota hai jisme children hote hain.
Level 2 — Application
Goal: tree par standard walks (search, count) chalao.
L2.1
Kya nan banana mein aata hai? Walk trace karo.
Recall Solution
Root se shuru karo. Pehla edge jiska label n se shuru ho woh na label wala hai. Usse chalo:
nmatch ✔,amatch ✔ — ab humnake baad wale branching node par hain.- ka agla character
nhai. Us node se ek outgoing edgense shuru hoti hai (na$edge).nmatch ✔.
Humne poora nan spell kar diya. Haan, nan ek substring hai. Cost character-steps.
L2.2
banana mein ana ki occurrences count karo.
Recall Solution
a → n → a walk karo. Yeh tumhe exactly us branching node par le jaata hai jiska root-path ana hai (figure mein yellow node dekho). Ab uske subtree mein leaves count karo.
ana ke neeche do leaves hain: ek na$ continue karti hai (leaf 1, suffix anana$) aur ek $ continue karti hai (leaf 3, suffix ana$).
Toh ana 2 baar aata hai — start indices aur par. Check: b(anana) → positions 1 aur 3, aur sach mein banana = b an an a, ana index 1 par (anana) aur index 3 par (ana) hai. ✔
L2.3
Kya nana$ ek leaf tak pahunchta hai, aur woh kaun sa start index identify karta hai?
Recall Solution
n,a,n,a,$ walk karo. Tum ek leaf par khatam hote ho, leaf number — kyunki poora suffix nana$ index par start hota hai. Leaf tak pahunchna (edge ke beech mein rukne ki jagay) matlab yeh hai ki tumne ek poora suffix spell kar diya.
Level 3 — Analysis
Goal: structure, depth, aur bounds ke baare mein reason karo.
L3.1
banana ka longest repeated substring kya hai, aur tree yeh kaise reveal karta hai?
Recall Solution
String-depth se measure karke deepest internal (branching) node dhundho. Branching matlab alag continuations exist hain, isliye uski root-path string baar aati hai.
Hamare tree mein deepest branching node ki string-depth 3 hai, jo ana spell karta hai. Isliye longest repeated substring ana hai (yeh indices 1 aur 3 par aata hai, overlap karte hue). Length .
L3.2
Length ki string ke liye suffix tree (terminated string, toh leaves) mein zyaada se zyaada kitne internal nodes ho sakte hain, aur isliye total kitne nodes? Derive karo.
Recall Solution
leaves wale rooted tree mein jisme har internal node mein children hain, internal nodes hote hain. Yahan , toh internal nodes . Total nodes . -children rule kyun matter karta hai: agar single-child chains bachti, toh count badh jaata. Compression yeh rule enforce karta hai, tree ko linear size par cap karta hai.
L3.3
Explain karo ki suffix tree space kyun leta hai jabki saari edge-label string lengths ka sum hai.
Recall Solution
Har edge apna label do integers ke roop mein store karta hai jiska matlab hai "substring " — copied text kabhi nahi. edges hain (har non-root node ke liye ek), aur integers per edge, toh storage words hai. Conceptual label lamba ho sakta hai (jaise nana$), lekin hum sirf mein do endpoints rakhte hain.
Level 4 — Synthesis
Goal: ideas combine karo aur chhote structures design karo.
L4.1
banana$ ke root se top-level edges draw (describe) karo. Pehle characters kya hain, aur kitne root edges hain?
Recall Solution
Rule 4: ek node se koi bhi do edges ek hi character se shuru nahi ho sakti. banana$ ke suffixes mein distinct first characters hain b, a, n, $. Toh root ke exactly 4 children hain:
banana$→ leaf 0 (starts withb, unique, toh leaf tak ek lamba edge).a…→ branching node (suffixesanana$,ana$,a$sabhiase start hote hain).na…→ branching node (nana$,na$).$→ leaf 6.
L4.2
aaaa$ consider karo (length ). Uske suffix tree mein kitne leaves hain, aur uska longest repeated substring kya hai?
Recall Solution
Suffixes: aaaa$(0), aaa$(1), aa$(2), a$(3), $(4) → leaves.
Longest repeated substring: deepest branching node. String aaa indices 0 aur 1 par aata hai (do baar), aur aaaa ek baar aata hai. Toh longest repeat aaa hai, length . ( identical letters ki run ke liye, longest repeat woh run minus ek letter hai.)
L4.3
Aapko ka suffix tree diya gaya hai. Ek test design karo jo answer kare "kya ek substring of hai?" — aur ek edge case batao jahan ek naive tester break ho jaata hai.
Recall Solution
Algorithm: root se start karo, current position = ki beginning. Baar baar: woh outgoing edge choose karo jiske label ka first character ke current character ke barabar ho (rule 4 ke hisaab se zyaada se zyaada ek hogi); us edge par chalte hue character-by-character compare karo. Agar koi comparison fail ho, ya tum edge ke end par aa jao aur koi matching next edge nahi mili, no jawab do. Agar tum ke saare characters consume kar lo (chahe tum edge ke beech mein ruko ya node par), yes jawab do.
Cost: ka har character zyaada se zyaada ek baar padha jaata hai → , se independent.
Edge case jo naive testers ko tod deta hai: ek edge ke andar rukna. nan ek edge ke middle mein khatam hota hai lekin phir bhi ek valid substring hai. Ek tester jo sirf "yes" tab kahe jab woh exactly ek node par utre, woh nan ko galat reject kar dega. Fix: "yes" jab bhi poori consume ho jaaye, node ya mid-edge.
Level 5 — Mastery
Goal: related structures mein transfer karo aur ek design choice defend karo.
L5.1
banana mein ana ki do occurrences overlap karti hain (indices 1 aur 3, lekin ana 1–3 aur 3–5 tak span karta hai). Kya suffix-tree occurrence count overlapping matches include karta hai? Leaf definition se justify karo.
Recall Solution
Haan, overlaps count hote hain. Count = match ke neeche leaves ki sankhya = un suffixes ki sankhya jo se start hote hain. Suffix anana$ (index 1) aur suffix ana$ (index 3) dono ana se start hote hain, toh dono leaves count hoti hain — chahe spans mein overlap karti hon ya nahi. Tree starting positions count karta hai, aur overlapping matches ke alag starting positions hote hain. ana ka answer: 2.
L5.2
Compare karo, ek ek line mein, ki tum suffix tree versus Suffix Array versus KMP Algorithm ek single search ke liye kab use karoge.
Recall Solution
- KMP Algorithm: ek pattern, ek text, ek baar scan — , tiny memory. Tab use karo jab tum ek known text ek baar search karo.
- Suffix Array: suffix tree jaisi hi substring power lekin fraction of memory; search hai. Tab use karo jab text fixed ho aur kaafi baar query ho aur memory matter kare.
- Suffix tree: richest structure — search, longest-repeat, Longest Common Substring generalized tree se — lekin heaviest memory (bada constant). Tab use karo jab tumhe woh advanced queries chahiye aur space afford kar sako.
L5.3
" internal nodes" bound use karke prove karo ki banana$ ke suffix tree mein total edges zyaada se zyaada hain, aur hamare tree ke liye exact edge count do.
Recall Solution
Kisi bhi rooted tree mein, #edges #nodes . Humne prove kiya ki total nodes , toh edges . banana$ ke liye (): actual tree mein leaves hain plus internal nodes (root, a-branch node, na-branch node… plus deeper ana branch) — figure mein unhe count karo. Nodes ? Precisely count karte hain: leaves = 7; internal nodes = root, a ke baad wala node, ana ke baad wala node, na ke baad wala node = 4. Total , edges , comfortably . ✔
Active Recall
Length- string (terminated) ke suffix tree mein kitne leaves hote hain?
ka occ kitne ki sankhya ke barabar hai?
Longest repeated substring kaun se node se correspond karta hai?
Leaf ki string kabhi repeated substring kyun nahi hoti?
$ par khatam hone wala ek poora suffix hai, isliye yeh exactly ek baar aata hai.Root children count kiske barabar hai?
Kya suffix tree overlapping occurrences count karta hai?
Connections
- Suffix tree (conceptual) — parent concept jise yeh exercises drill karte hain.
- Trie — L1/L3 counting ke peechhe uncompressed structure.
- Suffix Array — memory-lean alternative jise L5 mein compare kiya gaya.
- Ukkonen's Algorithm — tree actually mein kaise banta hai.
- KMP Algorithm — L5 mein single-search contrast.
- Longest Common Substring — generalized-tree application jise L5 mein reference kiya gaya.
- Burrows-Wheeler Transform — related suffix structure.