540 likes | 684 Views
String Matching in Lempel-Ziv Compressed Strings. 論文紹介. Algorithmica (1998) 20: 388-404. M. Farach and M. Thorup. 竹田研究室 修士課程 2 年 喜田 拓也. Preliminaries. 用語の説明. prefix, substring, suffix. 用語の説明. F.E.R.C. ある文字列 w に対して、. w = xyz. サフィクス. プレフィクス. サブストリング.
E N D
String Matching in Lempel-Ziv Compressed Strings 論文紹介 Algorithmica (1998) 20: 388-404 M. Farach and M. Thorup 竹田研究室 修士課程2年 喜田 拓也
Preliminaries 用語の説明
prefix, substring, suffix 用語の説明 F.E.R.C ある文字列w に対して、 w = xyz サフィクス プレフィクス サブストリング プレフィクス、サブストリング、サフィクス (あるいは前、中、後)
prefix, substring, suffix 用語の説明 F.E.R.C prefix substring suffix a i n ta bita no nob obita nobi bin bita nobi nobinobi inobita obinobi nobinobita nobinobita nobinobita プレフィクス、サブストリング、サフィクス (あるいは前、中、後) w = nobinobita
Pattern Matching 用語の説明 F.E.R.C • existence problem • existence problem all-occurrences problem all-occurrences problem TEXT: テクマクマヤコンテクマクマヤコン Pattern: クマクマ パターンマッチング - 文字列照合 クマクマ Yes
Pattern Matching 用語の説明 F.E.R.C • existence problem all-occurrences problem クマクマ クマクマ TEXT: テクマクマヤコンテクマクマヤコン Pattern: クマクマ パターンマッチング - 文字列照合 2,10
Data Compression 用語の説明 F.E.R.C データ圧縮 起動実験「やります。 僕が乗ります」「起動確率は0.0000000001%」 セントラルドグマ「初号機、完全に沈黙」せめて、人間らしく「僕はもうエヴァには乗りません」覚醒 強迫観念「ダメなのね・・・もう」シンクロ率400%「逃げちゃだめだ、逃げちゃだめだ・・・」アンビリカルケーブル断線「活動限界まで4分53秒」「私には他に何もないもの・・・」ヤシマ作戦 決戦、第3新東京市「あんたバカァ」セカンドインパクト「私達は選ぶ余裕なんてないのよ。生き残るための手段をね」強羅絶対防衛線 完璧なユニゾン「命令があればそうするわ」自己修復中 ジェリコの壁 人類補完計画「とれないや。血の匂い」「帰れ!」ディラックの海 「駄目です。停止信号受け付けません」「歌はいいねぇ。 テキストデータ
Data Compression 用語の説明 F.E.R.C データ圧縮 aldoghqu3850pcxps;lafdjaeqw09bjzpafq05^@62:vzZIAPF’(90rwDEVcx0832nkvl;pzp99OPF:eDfja 圧縮テキストデータ
Goal of this paper 論文の目的 圧縮テキストに対してパターンマッチを行うには?
Idea 論文の目的 F.E.R.C search 起動実験「やります。 僕が乗ります」「起動確率は0.0000000001%」 セントラルドグマ「初号機、完全に沈黙」せめて、人間らしく「僕はもうエヴァには乗りません」覚醒 強迫観念「ダメなのね・・・もう」シンクロ率400%「逃げちゃだめだ、逃げちゃだめだ・・・」アンビリカルケーブル断線「活動限界まで4分53秒」「私には他に何もないもの・・・」ヤシマ作戦 決戦、第3新東京市「あんたバカァ」セカンドインパクト「私達は選ぶ余裕なんてないのよ。生き残るための手段をね」強羅絶対防衛線 完璧なユニゾン「命令があればそうするわ」自己修復中 ジェリコの壁 人類補完計画「とれないや。血の匂い」「帰れ!」ディラックの海 「駄目です。停止信号受け付けません」「歌はいいねぇ。 元のテキストデータ aldoghqu3850pcxps;lafdjaeqw09bjzpafq05^@62:vzZIAPF’(90rwDEVcx0832nkvl;pzp99OPF:eDfja 圧縮テキストデータ
Idea 論文の目的 F.E.R.C search aldoghqu3850pcxps;lafdjaeqw09bjzpafq05^@62:vzZIAPF’(90rwDEVcx0832nkvl;pzp99OPF:eDfja 圧縮テキストデータ
論文の目的 F.E.R.C Kida Kida Kida Previous studies year researcher compression method run-length two-dimensional run-length LZ77 LZ77 LZW straight-line programs straight-line programs LZW Eilam-Tsoreff and Vishkin Amir, Landau, and Vishikin Amir and Benson Farach and Thorup Gasieniec, et al. Amir, Benson and Farach Karpinski, et al. Miyazaki, et al. Kida, et al. 1988 1992 1992 1995 1996 1996 1997 1997 1998 Kida
LZ77 Compression LZ77 圧縮
LZ77 圧縮 F.E.R.C 圧縮テキストZ = C1・・・Cj・・・CM(P0 ,L1)・・・(Pi ,Li)・・・(PN ,LN) Cj:テキストで使用される文字 (アルファベットΣ上の記号. |Σ|=M) Pi , Li : 整数 contents
LZ77 圧縮 F.E.R.C アルファベットΣ={a,b,c} テキストT = a b a b c a b a b c b a c a b a b -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 a b c a b a b c a b a b c b a c a b a b ブロック (-3,1) (-2,1) (0,2) (-1,1) (0,5) (1,2) (4,5) example 圧縮テキストZ = a b c
LZ77 圧縮 F.E.R.C Pattern: b a c a a b a b c a b a b c b a c a b a b T = useful property テキスト中の最も左の位置に現れるパターンは、 必ずブロックとブロックの境目をまたぐ。 b a c a
Main Algorithm 圧縮テキストに対する 文字列照合アルゴリズム
メイン アルゴリズム F.E.R.C Basic Idea テキスト中の最も左の位置に現れるパターンは、 必ずブロックとブロックの境目をまたぐ。 圧縮テキストの全てを展開せずとも、ブロックの境界付近の文字列だけをしらべれば existence problemを解くことができる。
メイン アルゴリズム F.E.R.C Pi Pi Pi Pi+1 Basic Idea i番目のブロックの prefixのうち、 パターンの substringになっている 最長のもの。 テキストの先頭からi番目のブロックの終端まで文字列の suffixのうち、 パターンの substringになっている 最長のもの。 ある iについて、 の substringがパターン になっていれば「Yes」と答えることができる。
メイン アルゴリズム F.E.R.C Pi Pi+1 Pi Pi+1 = b a c a c a Basic Idea Pattern: b a c a ・・・a b c c b c b a c a c a c b a b・・・ i+1番目のブロック i 番目のブロック b a c a Yes
メイン アルゴリズム F.E.R.C 6 5 5 4 a b a b c a b a b c b a c a b a b b c a b T = 0 1 3 0 1 2 3 2 4 7 6 4 5 6 7 5 Winding Phase
メイン アルゴリズム F.E.R.C a b c 7 7 0 1 3 0 1 7 4 3 5 6 2 4 5 6 2 7 Winding Phase
メイン アルゴリズム F.E.R.C a b c 0 6 7 7 0 1 5 1 6 2 3 4 5 2 4 3 Winding Phase
メイン アルゴリズム F.E.R.C a b c 0 5 6 6 7 2 7 3 4 0 1 2 3 4 5 1 Winding Phase
メイン アルゴリズム F.E.R.C a b c 6 7 4 4 5 3 5 0 2 1 3 0 1 2 6 7 Winding Phase
メイン アルゴリズム F.E.R.C a b c 6 7 4 5 5 3 3 0 0 1 2 2 4 6 7 1 Winding Phase
メイン アルゴリズム F.E.R.C 6 7 2 a b c 0 2 3 4 5 7 1 0 3 4 6 5 1 Winding Phase
メイン アルゴリズム F.E.R.C 6 7 2 a b c 5 4 0 0 1 6 2 3 3 7 5 4 1 Winding Phase
メイン アルゴリズム F.E.R.C 6 7 2 a b c Pattern: 2 1 4 6 3 3 2 7 5 4 1 0 4 0 0 4 3 5 c a = Pi Pi+1 Winding Phase a b a b c a b a b c b a c a b a b b c a b i = 3
メイン アルゴリズム F.E.R.C Pi Pi Winding の手順をそのまま逆にたぐる。 最終的に、それぞれの旗は元の位置に戻り は の情報をもつ i i の情報をもつ は ようにする。 Unwinding Phase
メイン アルゴリズム F.E.R.C 0 1 5 3 5 4 2 3 7 1 7 2 4 6 6 0 Unwinding Phase a b c a b a b c ab a b c b a c a b a b b c a b Pattern: b a c a
メイン アルゴリズム F.E.R.C 6 7 2 2 a b c 4 1 0 4 6 3 3 7 1 2 5 4 0 0 5 5 0 Unwinding Phase a b a b c a b a b c b a c a b a b b c a b Pattern: b a c a
メイン アルゴリズム F.E.R.C 6 7 2 a b c 5 1 1 5 4 0 6 0 3 3 2 4 7 Unwinding Phase a b a b c a b a b c b a c a b a b b c a b Pattern: b a c a
メイン アルゴリズム F.E.R.C a b c 7 0 2 7 4 5 0 5 2 4 6 3 3 6 1 1 Unwinding Phase 5 5 a b a b c a b a b c b a c a b a b b c a b Pattern: b a c a
メイン アルゴリズム F.E.R.C a b c 7 4 6 3 3 5 5 4 7 0 1 0 1 2 2 6 Unwinding Phase a b a b c a b a b c b a c a b a b b c a b Pattern: b a c a
メイン アルゴリズム F.E.R.C a b c 1 6 2 6 7 4 4 0 2 5 5 7 0 3 1 3 Unwinding Phase 6 a b a b c ab a b c b a c a b a b b c a b Pattern: b a c a
メイン アルゴリズム F.E.R.C 5 a b c 3 6 6 7 7 0 5 1 2 3 4 2 4 1 0 Unwinding Phase a b a b c ab a b c b a c a b a b b c a b Pattern: b a c a
メイン アルゴリズム F.E.R.C 5 a b c 3 6 6 7 7 1 5 1 2 3 4 2 4 0 0 Unwinding Phase a b a b c ab a b c b a c a b a b b c a b Pattern: b a c a
メイン アルゴリズム F.E.R.C 5 a b c 0 7 7 0 1 5 6 2 3 4 2 4 6 3 1 Unwinding Phase a b a b c ab a b c b a c a b a b b c a b Pattern: b a c a
メイン アルゴリズム F.E.R.C i 0 a b 1 b a 2 b c 3 c a 4 c b a Pi Pi+1 5 b a c a 6 b b Final operation Yes
Complexity of Algorithm アルゴリズムの計算量
アルゴリズムの計算量 F.E.R.C a b c 7 7 0 1 3 0 1 7 4 3 5 6 2 4 5 6 2 7 Winding Phase
アルゴリズムの計算量 F.E.R.C 7 3 0 1 3 0 1 6 7 5 6 2 4 5 4 2 Winding Phase O( log|Z|) L : Balanced tree
アルゴリズムの計算量 F.E.R.C 7 3 0 1 3 0 1 6 7 5 6 2 4 5 4 2 Winding Phase O( log|Z|) L : O( 1 )
アルゴリズムの計算量 F.E.R.C 7 4 0 1 3 0 1 2 7 7 6 2 4 5 6 7 5 3 Winding Phase O( |Z| log|T|) L : Segment-Merge
アルゴリズムの計算量 F.E.R.C O(|Z| log|Z| + |Z| log|T|) = O(|Z|( log|Z|・|T| ) ) O(|Z| log2(|T| |Z|)) Winding Phase
アルゴリズムの計算量 F.E.R.C 6 7 2 a b c 6 7 4 5 0 1 0 1 4 2 3 6 5 7 2 2 5 3 Unwinding Phase 5 5 a b a b c a b a b c b a c a b a b b c a b Pattern: b a c a
アルゴリズムの計算量 F.E.R.C 6 7 2 a b c 6 4 2 7 4 5 0 0 1 1 5 2 7 5 2 3 6 3 前処理 O( |P| ) Unwinding Phase O( |Z| ) 5 5 a b a b c a b a b c b a c a b a b b c a b O( log|P| ) Pattern: b a c a
アルゴリズムの計算量 F.E.R.C O(P+|Z|log(|T| |Z|) log|P|) Unwinding Phase O(P +|Z| (|Z| + log|P| ) )
アルゴリズムの計算量 F.E.R.C i 0 a b 1 b a 2 b c 3 c a 4 c b a 前処理 O( |P| ) Pi Pi+1 5 b a c a 6 b b final operation O( |Z| log|P| ) O( log|P| ) O( log|P| ) O( log|P| ) O( log|P| ) O( log|P| ) O( log|P| ) O( log|P| )