510 likes | 542 Views
Juha Karkkainen. ¨. ¨. Lempel-Ziv Parsing and Sublinear-Size Index Structures for String Matching. Esko Ukkonen. Proceedings of the Third South American Workshop on String Processing. WSP 1996, 141-55, 1996. 竹田研究室 修士課程1年 喜田 拓也. existence problem. existence problem. existence problem.
E N D
Juha Karkkainen ¨ ¨ Lempel-Ziv Parsing and Sublinear-Size Index Structures for String Matching Esko Ukkonen Proceedings of the Third South American Workshop on String Processing. WSP 1996, 141-55, 1996 竹田研究室 修士課程1年 喜田 拓也
existence problem • existence problem • existence problem all-occurrences problem all-occurrences problem all-occurrences problem 研究背景 • 文字列照合問題(パターンマッチング) 9 きだくんのおかあさんがりあかーをひいている さんがりあ
existence problem • existence problem • existence problem all-occurrences problem all-occurrences problem all-occurrences problem 研究背景 • 文字列照合問題(パターンマッチング) KMP O(m+n) BM O(m+n) n m
研究背景 • 巨大なテキストに対する文字列照合問題 • Index を作ることで劇的に速くなる.
About 11n bytes 9n bytes About 10n bytes 研究背景 O(n) • 現在知られている index 構造 • suffix tree • suffix array • level-compressed trie • suffix cactus • suffix binary search tree Over 10n bytes 5n bytes
研究背景 • 新しい index 構造が必要 • より小さい • 前処理をしない場合よりも検索が高速 • 初の sublinear-size index これがミソ LZ parsing を用いる O(n / log n)
LZ parsing • Lempel-Ziv 圧縮 • LZ77 (移動辞書式圧縮) • LZSS, LZH,LZR,LZB • LZ78 (登録辞書式圧縮) • LZW,LZC,LZT,LZFG LZ parsing = LZ76 ?
... ... (P1,L1,C1) (Pi,Li,Ci) (PN,LN,CN) Z = LZ parsing • LZ parse Z of string Tの定義 負でない整数 Pi, Li Σ上の記号 Ci
... ... (P1,L1,C1) (Pi,Li,Ci) (PN,LN,CN) Ui= Ui -1 + Li -1 + 1 for i > 1. U1 = 1, Pi < Ui , whenever Li > 0 For 1 ≦ i ≦ N T[Ui…Ui+Li-1] = T[Pi…Pi+Li-1], Z = T[Ui+Li] = Ci . T[Pi...] と T[Ui...] の common prefix が 最大となる Pi < Ui を選ぶ. LZ parsing • LZ parse Z of string Tの定義
aaaabbaaababaaabb T = Z = LZ parsing • LZ parse の例 b a a a b $ 注意 (0,0,a) (1,3,b) (5,1,a) (3,3,a) (6,5,b)
aaaabbaaababaaabb T = Z = (0,0,a) (1,3,b) (5,1,a) (3,3,a) (6,5,b) LZ parsing • LZ parse の例 block b a a a b phrase definition boundary symbol
aaaabbaaababaaabb T = U1 U3 U4 U2 U5 = = = = = 1 2 6 8 12 Z = (0,0,a) (1,3,b) (5,1,a) (3,3,a) (6,5,b) LZ parsing • LZ parse の例 b a a a b
LZ parsing • parse Z の特性 • どの二つの block も同一ではない
LZ parsing • parse Z の特性 • どの二つの block も同一ではない • パターンP の最初の occurrence は, 必ず Z の boundary symbol を含む
n N < logc n- logc logc n - 1 c-1 LZ parsing • parse Z のサイズのオーダー N を長さ nのテキストの LZ parse における block の個数とする.また c = |Σ|とする. O(n / log n)
type N |Σ| 77 4 2 8 64 40964 31633 16734 14755 88748 English DNA random random random LZ parsing • N の目安 for text length n = 300000.
Oh! Let’s go
検索アルゴリズム • サーチ を2種類に分類する. これがミソ Tにおける Pの occurrence が boundary symbol を含む. Primary occurrence それ以外 Secondary occurrence
検索アルゴリズム • Occurrence を2種類に分類する. これがミソ Primary search Existence problem Primary occurrence Secondary search Secondary occurrence
1 ・・・ u ・・・・・・ m T [Ui + Li] = Ci Primary Search • 問題の定義 P の primary occurrence を見つけ出す. Reference pair(i , u)
Primary Search • 問題の定義 P の primary occurrence を見つけ出す. 1 ・・・ u ・・・・・・・・・ u′・・ m Canonical reference pair (i , u)
Primary Search • 問題の定義 P の primary occurrence を見つけ出す. O(mN) (i,u) が primary occurrence の canonical reference pair であるような iを見つけ出す.
1 ・・・ u ・・・・・・ m T [Ui + Li-u + 1 … Ui + Li ] = P[1…u] T [Ui + Li… Ui + Li -u + m] = P[u…m] Primary Search • Primary Search を解くための工夫
1 ・・・ u ・・・・・・ m Primary Search • Primary Search を解くための工夫
i Primary Search • Two-Dimensional Prefix Matching(2DPM) {(Xi , Yi)} : 文字列の組の集合 (X , Y) : 質問文字列 Xが Xiの prefix, Yが Yiの prefix. (Xi , Yi) 愛?
Primary Search • Two-Dimensional Prefix Matching(2DPM) {(Xi , Yi)} : 文字列の組の集合 (X , Y) : 質問文字列 Xi = T[Ui…Ui+Li]R = T[Ui…Ui+1-1]R Yi = T[Ui+Li...] = T[Ui+1-1...] X = P[1…u]R Y = P[u…m]
1 ・・・ u ・・・・・・ m Primary Search • 2DPMの例 1 block
Primary Search • 問題の定義 P の primary occurrence を見つけ出す. 2-dimensional prefix matching を解く. 2-dimensional range query を解く.
i Primary Search • 2-dimensional range query {(xi, yi)} : 点の集合 ([xl, xr] , [yl, yr]) : 質問区間. 質問区間に含まれる点 (xi , yi)を見つける. 愛?
yr yl xl xr Primary Search • 2-dimensional range query {(xi, yi)} : 点の集合 ([xl, xr] , [yl, yr]) : 質問区間.
xl = X yl = Y xr = Xzzzzz... yr = Yzzzzz... xi= Xi , yi = Yi Primary Search • 2-dimensional range query {(xi, yi)} : 点の集合 ([xl, xr] , [yl, yr]) : 質問区間. これがミソ 辞書式順序を用いる.
Y abzzzz... ab aba X abazzzz... Primary Search • 2-dimensional range query (a,aaaabb...) (baaa,bbaaa...) (ab,aaabab...) (abaa,abaaa...)
O( N + l) O(m N + l) O(m + N + l) Primary Search • 2-dimensional range query • 2DPM N 点の balanced 2-d tree. (Lee, Wong 1977) 2-d tree for string.
a X 値で判別 (x2, y2) (x1, y1) c b Y 値で判別 (x3, y3) g d e X 値で判別 f (x4, y4) (x5, y5) (x6, y6) (x7, y7) Y g e c b f d a X Primary Search • 2-d tree の例
T [Ui + Li-u + 1 … Ui + Li -u + m] = P となるような canonical な iを見つける. O(m + N + l) O(m2 + mN + L) 1 ・・・ u ・・・・・・ m Primary Search
T [Ui + Li-u + 1 … Ui + Li -u + m] = P となるような canonical な iを見つける. O(m2 + mN + L) O(m2 +m log N + Nm log m + L) 1 ・・・ u ・・・・・・ m Primary Search
Ok? No!
Secondary Search • 問題の定義 Secondary occurrence Known occurrence これがミソ Secondary occurrence
Known occurrence Secondary occurrence Pi+Li-1 Pi Secondary Search • 問題の定義 (Pi , Li , Ci)
Secondary occurrence Secondary Search • 問題の定義 T[v…v + m - 1] Known occurrence O = T[v…v + m - 1] Pi ≦v, Pi + Li-1≧v + m - 1 となる すべての i をみつける. O(N) Secondary occurrence T[Ui - Pi + v…Ui -Pi + v + m - 1]
i Secondary Search • Interval containment problem {[xi , yi]}i=1,…,N : 区間の集合 [x , y] : 質問区間 xi ≦x, yi ≧ y となるような すべての区間[xi , yi]を見つける. 愛?
O = T[v…v + m - 1] Secondary occurrence T[Pi+Li-1] T[Pi] Secondary Search • 問題の定義 xi = Pi , yi = Pi + Li- 1 x = v , y = v + m - 1 offset oi = Ui-Pi T[ x + oi … y + oi ]
Secondary Search • Interval containment problem • Priority search tree (McCreight 1985) O(log N + l) • 2-d heap O(log N + l log N) トータルでは, すべてのoccurrenceに対して interval containment problem が行われるので O(L log N)
Secondary Search binary tree の構造を持つ. • 2-d heap 各ノードは区間のうちの1つを中に持つ. 区間[xi , yi]を持つノードの… 左のsubtree のすべてのノードが持つ 区間の yの値はyiより小さい. 右のsubtree のすべてのノードが持つ 区間の xの値はxiより大きい.
6 11 [6,11] 1 [1,9] 9 7 [7,12] 2 3 [1,7] 7 [4,8] 8 4 5 6 7 [9,12] 9 6 [6,9] 5 6 7 [5,7] [2,5] [3,6] [4,5] 5 8 9 10 11 Secondary Search • 2-d heap の例
[6,11] [1,9] [7,12] 1 [1,7] [4,8] 2 3 [9,12] [6,9] 4 5 [2,5] [3,6] [4,5] [5,7] 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11 12 Secondary Search [2,3] • 2-d heap の例 [2,3] [2,3] [2,3] O(log N + l log N) [2,3] [2,3] [2,3]
I saw every thing Mmmmm...
検索アルゴリズムのまとめ • parse Zにより,サーチを 2 part に分割 • primary search -> 2DPM -> 2-dimensional range query • 2-d tree for string.O(N)領域 • search time O(m2 + m log N + Nm log m ) • secondary search -> interval containment problem • 2-d heap. O(N)領域 • search time O(LlogN)
18 N bytes 新しい Index 構造の構成 LZ parse Z O(N) 2-d tree for string O(N) 2-d heap と offsetO(N) 1 2 さいごに • 本当に小さいのか? Suffix array = 5n bytes 小さい n > 103
さいごに • 本当に小さいのか? • 他の index 構造よりも一般的に小さくなるだろう. • 検索時間の practical な評価は? • 謎