“给文本 $T[0..n)$ 追加唯一且全局最小的终止符 $$$。目标输出后缀数组 $SA$,使 $T[SA[i]..]$ 按字典序递增;同时可构造逆数组 $ISA$。”
形式陈述 ​
字符串
直觉
后缀数组把一个字符串的所有后缀按字典序排列,并只保存起始位置。任意子串都是某个后缀的前缀;拥有共同模式前缀的后缀在数组中聚成连续区间,因此子串问题转为有序数组和区间问题,可用二分搜索。相邻后缀的公共前缀又由 LCP 数组压缩。相比后缀树,它表示紧凑、缓存友好,但查询需额外结构。
例子与边界
对附加最小且唯一终止符的 banana$,完整索引为:
| 后缀 | ||
|---|---|---|
| 0 | 6 | $ |
| 1 | 5 | a$ |
| 2 | 3 | ana$ |
| 3 | 1 | anana$ |
| 4 | 0 | banana$ |
| 5 | 4 | na$ |
| 6 | 2 | nana$ |
这里 ana$ 位于第 ana 时,下界与上界夹出
必须明确是否附加全局最小终止符;它能保证所有后缀不同并简化构造。直接存完整后缀并排序会产生
推论与应用
词、数组与字典序定义结构,LCP 数组另行支持公共前缀与重复子串查询。倍增、诱导排序等构造及其工作空间由后缀数组构造分层说明;本页只把构造结果当作索引对象。
Burrows–Wheeler 变换可由后缀序导出,压缩后缀数组用简洁结构减少显式
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
- Dan Gusfield, Algorithms on Strings, Trees, and Sequences, Cambridge University Press, 1997,Chs. 1–8。