BWT(Burrows-Wheelter Transform)算法

最近看论文的时候,遇到了BWT算法。

部分内容转载自http://www.cnblogs.com/xudong-bupt/p/3763814.html

1.概述

BWT是一种以数据块为操作对象的可逆的数据变换方法,其核心思想是对字符串轮转后得到的字符矩阵进行排序和变换。它本身不会减少数据量,但是变换后的数据更容易压缩,所以BWT是对数据进行压缩的预处理。

2.原理

2.1 BWT正变换

设输入字符串T="banana"(‘#’为标识符,并规定其在词典序中最小,这样每一次右移得到结果都不相同)。

(1)对字符串进行循环右移操作,每次循环一位。对于长度为n 的字符串,循环右移n次。获得下图中的"Rotate Right"列。

(2)对循环右移后得到的n个字符串按照词典序排序,得到Sorted(M)列。

(3)Sorted(M)列中每个字符串的最后一个字符组成L列;第一个字符组成F列


上表具有的性质:

(1)L的第一元素是字符串的最后一个元素

(2)对于M的每一行(第一行除外)第一个元素都是最后一个元素的下一个元素,也就是说,从字符串的角度来看,同一行中F是L的下一个元素,L是F的前一个元素。

L就是最终要存储的结果(F可以有L排序得到)。

2.2 BW逆变换

逆变换从最后一个字符开始还原字符串。

我们利用2.1中的性质

由性质(1)可知字符串的最后一个元素为a。

a的前一个元素可能是n、n、b,该如何确定呢?现在我们考虑一下排序过程,具有相同前缀的字符串显然“#”所在位置越靠前的字符串排序也越靠前,而“#”靠前,则说明右移操作进行的越早,说明该右移得到的字符串最后一个元素在原字符串中的位置越靠后。总的来说,具有相同前缀的字符串,排序操作不会改变它们的相对次序。每次我们只要在相同前缀字符串(如果有相同的话)中找排在最前面的即可。

这样,我们就能确定a的前一个元素是n。同理可推出其他字符。

a

n

a

n

a

b

将上述序列逆序,即可得原字符串banana。





阅读更多
文章标签: 算法 压缩
个人分类: 日记
上一篇sbt下载jar包速度慢
下一篇L1、L2正则化
想对作者说点什么? 我来说一句

BWT完整算法

2014年06月03日 5.63MB 下载

没有更多推荐了,返回首页

不良信息举报

BWT(Burrows-Wheelter Transform)算法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭