透過的データ圧縮 transparent data compression
DESCRIPTION
透過的データ圧縮 Transparent Data Compression. K. Sadakane and R. Grossi: Squeezing Succinct Data Structures into Entropy Bounds, Proc. ACM-SIAM SODA 2006, to appear. 九州大学システム情報科学研究院 定兼 邦彦 2005 年 11 月 22 日. 背景. データ圧縮の目的 ( 過去 ) ディスク容量の節約 通信コスト ( 料金,時間 ) の削減 データ圧縮の目的 ( 現在 ) - PowerPoint PPT PresentationTRANSCRIPT
透過的データ圧縮Transparent Data Compression
九州大学システム情報科学研究院定兼 邦彦
2005 年 11 月 22 日
K. Sadakane and R. Grossi: Squeezing Succinct Data Structures intoEntropy Bounds, Proc. ACM-SIAM SODA 2006, to appear.
2
背景
• データ圧縮の目的 ( 過去 )– ディスク容量の節約– 通信コスト ( 料金,時間 ) の削減
• データ圧縮の目的 ( 現在 )– アクセスの高速化 (CPU 速度 > ディスク速度 )– 連続的なアクセスに限られる
• ランダムアクセスができたらどうなるか
保存用
3
透過的データ圧縮もし圧縮データの任意部分を高速に復元できれば• データを圧縮したまま保存できる
– ディスク容量の節約– 高速なアクセスが可能
• 圧縮されていることを意識しなくていい
4
本研究の結果• 長さ n の文字列 S を圧縮 ( アルファベットサイ
ズ )
• サイズ: LZ78 [Ziv, Lempel 78] と漸近的に同じ
• S の i 文字目からの連続する log n 文字
(log n ビット ) を定数時間で復元可能 (decode(S,i))
( 計算モデル : word RAM ( 語長 log n ビット ))
• このアクセス時間は未圧縮の場合と同じ
bits
log
logloglogO
n
knnnH k
(Hk: S の k 次経験的エントロピー )
5
研究の動機• Succinct データ構造を更に圧縮したい
– bit vector– 検索木– グラフ– 圧縮接尾辞木
6
Succinct データ構造• あるデータ集合 D を格納するデータ構
造• データ構造のサイズ : 情報理論的下限に
近い– 情報理論的下限 L = log (D の場合の数 )
• 高速な問合せが可能– 補助的なデータ構造 ( 索引 ) を使用– サイズ : 漸近的に無視できる (o(L) bits)
7
集合の Succinct データ構造• 集合 D {1,2,...,n} を格納• 問合せ ( 定数時間 )
– member(D,i): D 中に i が存在するか– rank(D,i): D 中の i 以下の要素の数– select(D,j): D 中で j 番目に小さい要素
• サイズ : n + o(n) bits [J89] [M96]
S: 010001100010010000011 ni
rank(D,i) = 3
8
木の Succinct データ構造• n 節点の順序木 T を格納
– 通常のデータ構造は O(n log n) bits
• T は 通り存在 (Catalan 数 ) – 情報理論的下限 = 2n (log n) bits
• 問合せ ( 定数時間 )– 長男,兄弟,親,深さ, preorder ,子孫の数
など• サイズ : 2n o(n) bits [MR01] [GRR04]
n
n
n
n4
2
1
1
a
eb
c d
((()())())ba c d e
S
木を括弧列 S で表現
9
問 : Succinct データ構造はそれ以上圧縮できないか ?
• 答 : 場合によっては可能• 例 : 集合 D {1,2,...,n} の要素数が少ない場合• 要素数が m の集合は 通り
• bits のデータ構造で member, rank, select を定数時間で返すものが存在 [RRR02]
m
n
mn
nmn
m
nm
m
nnmB
logloglog, bits で表現できるはず
nnnnmB log/loglogO,
FID (Fully Indexable Dictionary) と呼ばれる
10
FID を用いたポインタの圧縮ある n ビットのデータ構造 ( ビット列 ) へのポ
インタ m 個を格納する場合• ポインタの値 i を S[i] = 1 で表現• S を FID で圧縮.ポインタは select で求まる• m = O(n/log n) のとき, FID のサイズは
ビット列000000010000000000001000000000001000000000000100000000S
n
nn
n
nn
nn
n
n
n
nn
n
log
loglogO
log
loglogO
log/log
logO
)log/(Olog
11
問 : 木の Succinct データ構造は圧縮できるか ?
• FID では不可能– ( と ) が同数ある ⇒ B(n,2n) = 2n bits 必要– 2n + O(n log log n/log n) bits [GRR04]
• データ間の相関を考慮する必要がある– FID では 0 次のエントロピーまで圧縮
– k 次のエントロピーまで圧縮したい
0
loglog,
nHmn
nmn
m
nmnmB
12
本研究の圧縮法の応用
• 集合 D {1,2,...,n} に対する member, rank, select を定数時間で返すデータ構造
• サイズ : nHk+O(n log log n/log n) bits (k=O(log log n))
– Hk は D を表す 0,1 列 S の k 次経験的エントロピー
• EID (Entropy-Bound Indexable Dictionary) と呼ぶ• FID よりもさらに小さい nmBnHnHnH kk ,01
13
EID のデータ構造とアルゴリズム
• データ構造– D を表す 0,1 列 S を圧縮したもの nHk+O(n log log n/log n)
bits
( 任意の連続する log n ビットを定数時間で復元可 )
– FID の補助データ構造 O(n log log n/log n) bits
• 問合せアルゴリズム– FID とほぼ同じ (S[i,i+log n1] へのメモリ参照を de
code(S,i) に置き換える )
• どんな問合せの計算量も漸近的には同じ
14
木の Succinct データ構造の圧縮• FID では不可能
– 2n + O(n log log n/log n) bits [GRR04]
• EID では可能– 木を表現する括弧列 S の Hk まで圧縮可 (k=O(log l
og n))
– 2nHk + O(n log log n/log n) bits
– 問合せの計算量は圧縮前と同じ– 構造が同じ部分木があると Hk は小さくなる
( 接尾辞木で特に有効 )
15
EID の圧縮サイズの限界• S = 010101...010101 を圧縮する場合
– FID: nH0 = n bits (+ O(n log log n/log n))
– EID: nH1 = O(log n) bits (+ O(n log log n/log n))
• エントロピーが小さいと第 2 項が無視できない
• rank を定数時間で返すデータ構造のサイズは
(n log log n/log n) bits [Miltersen 05]
つまり第 2 項は最適
16
従来の圧縮法
17
従来の圧縮法辞書式圧縮法LZ77 [Ziv, Lempel 77]
LZ78 [Ziv, Lempel 78]
LZW[Welch 84]
compress
LZSS [Storer, Szymanski 82]
gzip
統計的圧縮法PPM[Cleary, Witten 84]
PPMD [Howard 93]
PPM*[Cleary, Teahan, Witten 95]
block sorting
[Burrows, Wheeler 94]
高圧縮率、 PPM より高速 (bzip2)
context tree weighting
[Willems, Shtarkov, Tjalkens 95]
PPM より高圧縮率
18
LZ77 圧縮法• 文字列を辞書へのポインタで置き換える• 辞書 = すでに圧縮した文字列
....a compressed suffix tree consists of a compressed suffixarray, a Pat tree and edge-length information.
....a compressed suffix tree consists of [l=19, d=36]array, a Pat [l=4, d=51] and edge-length information.
圧縮率は文字列のエントロピーに収束
19
PPM
• 文字を 1 文字ずつ符号化• 各文字の符号は文脈から決まる
– 文脈:符号化する文字の直前の k 文字
• 圧縮サイズ:
文脈 符号化する文字
abcababc
kAs Ac c
csk ppnnH
1log
20
高次圧縮の問題点• k 次のエントロピーの圧縮率を達成するには隣
接する文字列の情報を用いて圧縮する必要がある
• 一部分を復元する場合も全体を復元ことになる
c m sp ro e s ni o
k = 4
21
従来の圧縮法との比較漸近的圧縮率 log n ビットの復号時間
LZ77 [ZL77] nHk O(n)
LZ78 [ZL78] nHk O(n)
PPM [CW84] nHk O(n)
CTW [WST95] nHk O(n)
Block Sorting [BW94]
nHk
本研究 nHk O(1)
loglog
loglog
logO
2
nn
n[GGV03]
22
新圧縮法の概要
LZ78 の改良 + 補助データ構造
23
LZ78 圧縮法• 文字列を辞書中のフレーズに分割• 数字に置き換えて符号化• 辞書を更新
1
2
a
3
a
7
b 4
b
5
b
8
b
S = aaabbbaaaabbbb2 3 4 5
6
a
6 7 8
出力 1 a 2 a 1 b 4 b 3 a 2 b 5 b
LZ-trie
24
LZ78 の圧縮率長さ n の文字列 S を分解したフレーズの数 c
は
• 圧縮後のサイズ : bits
• S が定常エルゴード情報源 ( エントロピー H) から生成されるなら
• S の k 次経験的エントロピー Hk に対し
)( log
nHn
cc
loglog cc
)(loglog ckcc
ncnHcc k [Kosaraju, Manjini 99]
n
ncn
log
[Ziv, Lempel 78]
( : アルファベットサイズ )
25
本研究のデータ構造
6
4
5
2
3
1
7
8
a
a
a
b
b
b
b
S = aaabbbaaaabbbbR 2 3 6 7 4 5 8
P 1 2 4 5 7 10 12
2 3 6 74 5 8
E (((())())((())))1
C a a a b b b b
T
T を表現する括弧列
T の枝ラベル
フレーズの添字を格納添字が T の preorder と一致するように付け替える
フレーズの開始位置を格納
26
decode アルゴリズムS[i,i+log n1] を復号する場合1. S[i] を含むフレーズ p を求める2. p を表す LZ-trie のノード v を求める3. v から根に向かうパス上のラベルを復
号
6
4
5
2
3
1
7
8
a
a
a
b
b
b
b
S = aaabbbaaaabbbbR 2 3 6 7 4 5 8
P 1 2 4 5 7 10 12
27
Long phrase の復号• Long phrase: 長さ w = ½ log n 以上のフレー
ズbranching node ( 根へのパスを格納 )
枝分かれ無し ( 定数時間で復号可 )
jump node ( 子孫を w/2 個以上持つ )
micro tree (jump node の子孫 )
定数時間で復号可
28
Short phrase の復号• Short phrase: 長さ w = ½ log n 未満のフレーズ• S の長さ ½ log n の部分列は short phrase を O(lo
g n) 個含む可能性あり ⇒ 定数時間で復号できない
• r > 1 個の連続する short phrase をそのまま格納– 対応する R は格納しない
• データ構造のサイズは増加しない– R を格納する場合 : r log c bits– そのまま格納する場合 : ½ log n bits– ½ log n < r log c ( )∵
cn
29
まとめ新圧縮法の提案• 任意の文字列を高次エントロピー限界まで圧
縮• 部分列の定数時間復号 ( 未圧縮と同じ時間 )
応用• 既存の索引構造のサイズを改善• 検索速度も同じ• 個々の索引ごとに圧縮法を考える必要がない課題• 文字列の更新• LZ77 などの改良