3.8.7 · HinglishString Algorithms

Suffix array — construction O(n log n), LCP array

2,079 words9 min readRead in English

3.8.7 · Coding › String Algorithms


1. Definitions

Figure — Suffix array — construction O(n log n), LCP array

2. Construction in — derived from scratch

HOW the cost comes out to :

  • Rounds ki sankhya (kyunki double hota hai: ).
  • Har round mein pairs sort hote hain. Radix sort (chhote integer keys par do passes) se har round ka hai. → total .
  • Agar comparison sort use karo har round mein (), total hoga — phir bhi theek hai aur code karna bahut simple.

3. The LCP array — Kasai's algorithm, derived


4. Common mistakes (Steel-man → fix)


Recall Feynman: 12-saal ke bachche ko samjhao

Socho tumne "banana" jaisa ek word liya aur uske saare tails kaate: "banana", "anana", "nana", "ana", "na", "a". Ab in tails ko dictionary order mein rakh do jaise dictionary mein words hote hain. Suffix array sirf us sorted list mein page numbers (starting positions) hai. Unhe fast sort karne ke liye hum lazy hain: pehle sirf pehla letter compare karte hain, phir pehle do letters, phir chaar, har baar double karte hue — kyunki ek tail ke pehle 4 letters jaanne ke liye hum do "pehle 2 letters" ke answers jod lete hain jo hum already compute kar chuke hain. LCP numbers batate hain ki do neighbouring tails ke kitne starting letters same hain — repeats dhundne mein kaam aata hai.


Connections

  • Suffix Tree — same problems, zyada memory; SA uska flattened cousin hai.
  • Radix Sort / Counting Sort — per-round linear sort jo enable karta hai.
  • Binary Search on Suffix Array mein pattern matching.
  • Sparse Table / RMQ — LCP ke saath combine karo kisi bhi do suffixes ka LCP ke liye.
  • Z-Algorithm / KMP — alternative substring tools (single pattern).
  • Burrows–Wheeler Transform — suffix array se directly banta hai.

Flashcards

Suffix array of a string kya hota hai?
Saare suffixes ke starting indices ka array, lexicographically sorted.
Rank array kya hai aur SA se kaise relate karta hai?
rank inverse permutation hai: rank[SA[r]] = r; yeh har suffix ki sorted position deta hai.
suffix array construction ka core idea kya hai?
Prefix-doubling: rank pairs (rank_k[i], rank_k[i+k]) use karke pehle k chars se sort karo, har round mein k double karo.
Agle round ki comparison key ek pair of previous ranks kyun hoti hai?
Suffix i ke pehle 2k chars = (suf i ke pehle k) + (suf i+k ke pehle k), jinke orders already known ranks hain.
Kitne doubling rounds aur total complexity (radix sort ke saath)?
⌈log₂ n⌉ rounds × O(n) each = O(n log n).
rank_k[i+k] ke liye sentinel kya ho jab i+k ≥ n, aur kyun?
−1 (kisi bhi real rank se chhota), kyunki chhota suffix uss longer suffix se pehle sort hona chahiye jo uska prefix share karta hai.
LCP[r] kya measure karta hai?
Do adjacent sorted suffixes suf(SA[r−1]) aur suf(SA[r]) ke longest common prefix ka length.
Kasai ke O(n) LCP algorithm ke peeche key lemma kya hai?
Suffix i se i+1 par jaate waqt, uske predecessor ke saath LCP zyada se zyada 1 se girta hai.
Kasai h ko reset karne ki jagah carry over kyun karta hai?
Amortized O(n) rakhne ke liye; reset karne se O(n²) re-scanning hoti hai.
SA aur LCP se distinct substrings ki sankhya ka formula?
Σ(n − SA[r]) − Σ LCP[r].
LCP kaun se suffixes compare karta hai, yeh common mistake kya hai?
Yeh sorted (SA) order mein neighbors compare karta hai, index r aur r+1 wale suffixes NAHIN.

Concept Map

all suffixes sorted

inverse permutation

inverse of

LCP of adjacent suffixes

same problems, more memory

constructs

uses pair key r_k i, r_k i+k

radix sort each round

log n rounds since k doubles

pattern occurrences form

binary search

enables

String s

Suffix array SA

Rank array

LCP array

Suffix tree

Prefix doubling

Sort by 2k chars

O n log n

Contiguous block

Substring search

Distinct substrings and longest repeat