コンテンツにスキップ

ブロックソート

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Burrows-Wheeler (Burrows-Wheeler Transform; BWT) 1994 (Michael Burrows)  (David Wheeler) 

Move To Front (MTF) (RLE)

bzip2

[]


 n n×n  nBWTBWT

[]


:
cacao

:
A B C D E
1 c a c a o
2 o c a c a
3 a o c a c
4 c a o c a
5 a c a o c


ソートされた行列:

A B C D E
5 a c a o c
3 a o c a c
1 c a c a o
4 c a o c a
2 o c a c a


BWT:
ccoaa, 3

5×55(E)

[]




BWTccoaaA (AE, A)

1
A B C D E
1 a ? ? ? c
2 a ? ? ? c
3 c ? ? ? o
4 c ? ? ? a
5 o ? ? ? a

各行は元の文字列を巡回シフトしたものであるため、各行のE列、A列の文字は元の文字列で連続しているか、先頭と末尾の文字であったはずである。 この性質から、全列右シフトを行い、左端の列(ここではE列)をキーにソートすることでD列を得ることができる。このとき、左端の文字が同じ行については、他の列の文字によらず、元の表での順序を保ったままにする。すなわち、ソートは安定ソートでなければならない。

右シフトした状態:(表2)

E A B C D
1 c a ? ? ?
2 c a ? ? ?
3 o c ? ? ?
4 a c ? ? ?
5 a o ? ? ?

ソート後の状態:(表3)

E A B C D
4 a c ? ? ?
5 a o ? ? ?
1 c a ? ? ?
2 c a ? ? ?
3 o c ? ? ?

このときBWT系列の性質から、右端となったD列には表1の右端と同様にBWT系列の文字列「ccoaa」が順番に入ることになる。

右端を埋めた状態:(表4)

E A B C D
4 a c ? ? c
5 a o ? ? c
1 c a ? ? o
2 c a ? ? a
3 o c ? ? a

CB

[]




23

23
ソート前 ソート後
1 4
2 5
3 1
4 2
5 3

331,4,2,5,3

BWTccoaacacao

[]


()  

   ,  

bzip2  使100k900k-1  -9 900k

[]


MTF (Move-To-Front) RLE

BWTMTFRLE

外部リンク[編集]