(注:本文大多数内容摘自中文/英文维基百科)
一.什么是BWT算法?
Burrows–Wheeler变换(BWT,也称作块排序压缩),是一个被应用在数据压缩技术(如bzip2)中的算法。该算法于1994年被Michael Burrows和David Wheeler在位于加利福尼亚州帕洛阿尔托的DEC系统研究中心发明。它的基础是之前Wheeler在1983年发明的一种没有公开的转换方法。
当一个字符串用该算法转换时,算法只改变这个字符串中字符的顺序而并不改变其字符。如果原字符串有几个出现多次的子串,那么转换过的字符串上就会有一些连续重复的字符,这对压缩是很有用的。该方法能使得基于处理字符串中连续重复字符的技术的编码更容易被压缩。
举个栗子:
input:SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES
output:TEXYDST.E.IXXIIXXSSMPPS.B..E.S.UESFXDIIOIIIT
该算法的输出因为有更多的重复字符而更容易被压缩了,例如使用游程编码:Run-length encoding。
二.变换过程
2.1 对原文本转码
简单来讲,就是a)循环移位生成矩阵,b)对矩阵中的行按字典序排序,c)输出最后一列得到变换结果。直接上栗子
input:^BANANA|
其中^和|分别标记字符串的头和尾。
实现过程:
//encode过程
//朴素的方法,即:轮转构造矩阵->排序->输出矩阵最后一列
public String