Burrows Wheeler Transform (BWT)

Michael Burrows と David J. Wheeler によって考えられた可逆変換の一種.

素朴な方法

入力文字列を循環させた文字列から成る表を考える.

例): \(S=banana\)

i 0 1 2 3 4 5
0 b a n a n a
1 a n a n a b
2 n a n a b a
3 a n a b a n
4 n a b a n a
5 a b a n a n

\(S\) を巡回させた文字列から成る表を辞書順にソート

i 0 1 2 3 4 5
0 a b a n a n
1 a n a b a n
2 a n a n a b
3 b a n a n a
4 n a b a n a
5 n a n a b a

この表の \(i=n\) 番目( \(n=|S|\) )の文字をつなげたものが BWTを行った文字列"\(nnbaaa\)"となる.

接尾辞配列を用いる方法

def BWT(S,d):
    SA = []
    BWT = ""

    for k,v in sorted(d.items(), key = lambda x:x[1]):
        SA.append(k)

    for i in range(len(SA)):
        print(S[SA[i]-1])
        BWT += S[SA[i]-1]
        
    return BWT

入力を変換

元のテキストとBWTを行ったテキストの圧縮率の違いを比較

text =
・元テキスト = dummy
・圧縮テキスト = dummy
・圧縮率 = dummy

・BWTテキスト = dummy
・圧縮テキスト = dummy
・圧縮率 = dummy

参考文献

M. Burrows, D.J. Wheeler, A block sorting data compression algorithm, Technical Report, DIGITAL System Research Center,1994 link