关闭

BWT(Burrows-Wheelter Transform)算法

标签: 算法压缩
101人阅读 评论(0) 收藏 举报
分类:

最近看论文的时候,遇到了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。





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1752次
    • 积分:76
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档