Burrows–Wheeler Transform (简称BWT,也称作 块排序压缩 ),是一个被应用在 数据压缩 技术(如 bzip2 )中的 算法 。该算法于1994年被 Michael Burrows 和 David Wheeler 在位于加利福尼亚州帕洛阿尔托的 DEC系统研究中心 发明 [1] 。
当一个 字符串 用该算法转换时,算法只改变这个字符串中字符的顺序而并不改变其字符。如果原字符串有几个出现多次的 子串 ,那么转换过的字符串上就会有一些连续重复的字符,这对压缩是很有用的。该方法能使得基于处理字符串中连续重复字符的技术(如 MTF变换 和 游程编码 )的编码更容易被压缩。
(上述摘自维基百科)
本篇文章主要讲解BWT的具体算法,具体参考论文 :
主要目的是理清算法的具体思路,进而了解BWA-MEM算法。
设源字符串为X,X = google 表示空串),
设将X进行单字符字典排序后的字符串为Y,Y = $eggloo, 我们先将X,Y生成如下字符串数组:
取字符串数组2的每个元素的最后一个字符构成BWT变换字符串,令其为B,则B = lo$goge .
如果W是源字符串X的一个子串, -R-(W) 表示区间的下界, +R+(W) 表示区间的上界。
令aW为在W之前加上字符a形成的新字符串,则 :
当且仅当-R-(W) <= +R+(W)时,aW也是源字符串X的子串。
终止一般有两种情况:Exact Match 和 Inexact Match