“令 $S=T$$ 为追加唯一最小终止符后的文本,$n= S \ge1$。$L$ 是它的BWT 最后一列,$F$ 是排序后第一列。$C[c]$ 为文本中严格小于字符 $c$ 的字符数,Occ$…”
形式陈述
定义与例子
给定文本字 banana$ 的排序后 BWT 为 annb$aa。
记最后一列为
直觉
BWT 把“字符后面接着什么上下文”转换成排序后相邻行中的局部规律。排序矩阵的首列按字符分组,末列则保留每一行向前一个字符;相同字符的出现次序稳定对应,使 LF 可以沿原文本逐字符后退。这条稳定对应把排序后的行重新连接成文本中的先后关系。
边界与用途
BWT 长度与输入相同,本身没有压缩;它把相似上下文字符聚集,后续 run-length、move-to-front 或熵编码才缩短。没有终止符时,循环移位排序与后缀排序也不等价。
不附终止符的版本可以另外保存原始文本所在的行号,即主索引,用它定位逆变换的起点。
循环移位等价类明确哪些线性记录只相差切口;最小循环表示可在线性时间选取一个规范代表,并在周期串上报告全部并列起点。这种选择会有意忘记原切口,不能代替无终止符 BWT 为恢复原始线性文本保存的主索引。需要把一般词分成唯一的 Lyndon 块时,可使用Duval 算法;该分解与 BWT 的排序末列是不同输出。
例子与边界
banana$ 的完整轨迹
按字典序排列后缀为 $、a$、ana$、anana$、banana$、na$、nana$,对应 suffix array annb$aa。这比显式构造全部循环移位省空间,却与带唯一终止符的移位矩阵定义等价。
首列 $aaabnn。以从 0 开始的下标计,末列中第 2 个 a 位于位置 5,首列中第 2 个 a 位于位置 2,因此
推论与应用
逆变换与区间更新
采用从 0 开始的下标,令
每个字符的各次出现分别占据 $ 所在行出发,反复读取当前末列字符并应用 LF,读取与文本等长的字符后,将序列逆序,就得到带终止符的原文本。
FM-index的 backward search 维护后缀区间
参考资料
- Huw A. Ogilvie, Burrows–Wheeler Transform,Rice COMP 571:BWT 构造、逆变换与半开区间查询。
- Burrows, Wheeler, A Block-sorting Lossless Data Compression Algorithm, 1994.
- Ferragina, Manzini, “Opportunistic Data Structures with Applications,” FOCS 2000.