Skip to content

定义Definition

Burrows–Wheeler 变换

施工中 · 内容逐步修订

Burrows-Wheeler transform · BWT

对带唯一终止符文本的循环移位排序,并取最后一列形成可逆排列。

形式陈述 ​

定义与例子 ​

给定文本字 T,字符采用固定全序。接上唯一且小于所有正文字符的终止符,得到 S=T$,记 n=|S|≥1。把 S 的全部循环移位按字典序排序成矩阵,BWT 是最后一列。等价地,也可由后缀数组取每个后缀起点的前一字符。banana$ 的排序后 BWT 为 annb$aa。

记最后一列为 L,第一列 F 就是对 L 排序的结果。相同字符在 L 中第 k 次出现,对应 F 中同字符第 k 次出现,称 LF 性质;从末列中终止符所在的行反复 LF,即可逆向恢复文本。唯一终止符固定起始行,否则循环串只能恢复到旋转等价类。

直觉

BWT 把“字符后面接着什么上下文”转换成排序后相邻行中的局部规律。排序矩阵的首列按字符分组,末列则保留每一行向前一个字符;相同字符的出现次序稳定对应,使 LF 可以沿原文本逐字符后退。这条稳定对应把排序后的行重新连接成文本中的先后关系。

BWT 排序矩阵与 LF 映射

边界与用途 ​

BWT 长度与输入相同,本身没有压缩;它把相似上下文字符聚集,后续 run-length、move-to-front 或熵编码才缩短。没有终止符时,循环移位排序与后缀排序也不等价。

不附终止符的版本可以另外保存原始文本所在的行号,即主索引,用它定位逆变换的起点。

循环移位等价类明确哪些线性记录只相差切口;最小循环表示可在线性时间选取一个规范代表,并在周期串上报告全部并列起点。这种选择会有意忘记原切口,不能代替无终止符 BWT 为恢复原始线性文本保存的主索引。需要把一般词分成唯一的 Lyndon 块时,可使用Duval 算法;该分解与 BWT 的排序末列是不同输出。

例子与边界

banana$ 的完整轨迹 ​

按字典序排列后缀为 $、a$、ana$、anana$、banana$、na$、nana$,对应 suffix array (6,5,3,1,0,4,2)。每个起点取前一字符(起点 0 取终止符)得到 BWT annb$aa。这比显式构造全部循环移位省空间,却与带唯一终止符的移位矩阵定义等价。

首列 F 为 $aaabnn。以从 0 开始的下标计,末列中第 2 个 a 位于位置 5,首列中第 2 个 a 位于位置 2,因此 LF(5)=2。这两个位置对应原文中同一次字符出现,所在的循环行相差一次向前移位。

推论与应用

逆变换与区间更新 ​

采用从 0 开始的下标,令 C[c] 表示文本中严格小于 c 的字符数,rankc(L,i) 统计半开前缀 L[0,i) 中的 c。则

LF(i)=C[L[i]]+rankL[i](L,i).

每个字符的各次出现分别占据 F 中互不重叠的连续编号,因此 LF 是行号上的排列。它把当前行的最后一个字符移到开头,跳到对应的循环行。从末列中 $ 所在行出发,反复读取当前末列字符并应用 LF,读取与文本等长的字符后,将序列逆序,就得到带终止符的原文本。

FM-index的 backward search 维护后缀区间 [l,r);前加字符 c 后变为 [C[c]+rankc(L,l),C[c]+rankc(L,r))。这里模式不含终止符,以免把跨文本末尾的循环片段算成普通出现。区间空表示模式不存在。区间更新使用 C 与 rank 查询;若还要报告匹配在原文中的位置,可以配合采样的后缀数组值进行定位。

参考资料
  • 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.
关系图谱13 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具

被这些条目使用