LZW 圧縮テキストに対する 高速文字列照合アルゴリズム 喜田 拓也 竹田 正幸 篠原 歩 九州大学大学院システム情報科学研究科 はじめに • 文字列照合問題 (Pattern Matching Problem) パターン : ヲトコ テキスト : ヲモイコンダラシレンノミチヲイクガヲトコノ・・・ Knuth-Morris-Pratt 法 (1974) Boyer-Moore 法 (1977) Aho-Corasick 法 (1975) Uratani-Takeda 法 (1992) ・ ・ ・ O( テキストの長さ + パターンの長さ ) 目的 文書ファイル群 起動実験「やります。 僕が乗ります」「起 動確率は0.0000000001%」 セントラルドグ マ「初号機、完全に沈黙」せめて、人間ら しく「僕はもうエヴァには乗りません」覚醒 強迫観念「ダメなのね・・・もう」シンクロ率 400%「逃げちゃだめだ、逃げちゃだめ だ・・・」アンビリカルケーブル断線「活動限 界まで4分53秒」「私には他に何もないも の・・・」ヤシマ作戦 決戦、第3新東京市 「あんたバカァ」セカンドインパクト「私達は 選ぶ余裕なんてないのよ。生き残るため の手段をね」強羅絶対防衛線 完璧なユニ ゾン「命令があればそうするわ」自己修復 中 ジェリコの壁 人類補完計画「とれない や。血の匂い」「帰れ!」ディラックの海 「駄目です。停止信号受け付けません」 「歌はいいねぇ。リリスの生み出した文化 目的 圧縮文書ファイル群 aldoghqu385 0pcxps;lafd jaeqw09bjz pafq05^@62: z9 0rwDEVcx083 2nkl;pzp9 9O:eDfja Previous studies year researcher 1988 Eliam-Tsoreff and Vishkin 1992 Amir, Landau, and Vishkin 1992 Amir and Benson 1995 1996 1996 1997 1997 compression method run-length two-dimensional run-length two-dimensional run-length Farach and Thorup LZ77 Gasieniec, et al. LZ77 Amir, Benson and Farach LZW Karpinski, et al. straight-line programs Miyazaki, Takeda, Shinohara straight-line programs Kida, Takeda, Shinohara, 1998 Miyazaki, Arikawa LZW Lempel-Ziv-Welch 圧縮法 (Unix の compress コマンド、 GIF形式の画像圧縮など) テキスト: a b ab ab ba b c aba bc abab 圧縮されたテキスト: 1 2 4 4 5 23 O(辞書木の大きさ) 4 O( 圧縮テキストの長さ ) 5 a b b 6 7 b 11 2 11 c b a b 9 0 a 1 6 3 c 9 10 a 8 a 12 辞書木: D アルゴリズムの概要 (KMP法による文字列照合の場合) パターン : ヲトコ テキスト : ヲモイコンダラシレンノミチヲイクガヲトコノ・・・ 探索の状態 0 ヲ 1 ト 2 コ 3 1. テキストから文字を読み込む。 2. 状態を更新する。 3. パターンが出現したかどうかを判断する。 4. 「1.」へ戻る。 アルゴリズムの概要 (LZW圧縮されたテキスト上の文字列照合の場合) パターン : ヲトコ テキスト : ヲモイコンダラシレンノミチヲイクガヲトコノ・・・ 探索の状態 0 ヲ 1 ト 2 コ 3 1. 圧縮テキストから数字(文字列)を読み込む。 2. 辞書木と状態を更新する。 3. パターンが出現したかどうかを判断する。 4. 「1.」へ戻る。 アルゴリズムの概要 (LZW圧縮されたテキスト上の文字列照合の場合) 探索の状態 0 ヲ 1 ト 2 コ 3 ・・・ ヲト コノドコンジヨウ ・・・ 状態: 2 状態: 0 パターンの出現を検知する関数が必要 Output( 現在の状態, 圧縮テキストの整数一個 ) O(とりうる状態の個数×辞書木の大きさ) O(辞書木の大きさ) 実験の結果 CPU time (s) T. Kida, M. Takeda, A Shinohara, M.miyazaki, and S. Arikawa. Multiple pattern matching in LZW compressed text. In J. A. Atorer and M. Cohn eds., Proceedings of Data Compression Conference ’98, pp. 103-112. IEEE Computer Society, March 1998 テキストを一時ファイルに展開後検索 30 25 テキストを展開しながら検索 20 15 10 テキストを展開せずに検索 5 0 0 5 10 15 20 25 Occurrence rate ( % ) (number of pattern occurrences / original text length) Shift-And 法 (Abrahamson 1987, Wu-Manber 1992) パターン:= a a b a c マスクビット テキスト:= aabaacaabacab a a b a c 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 0 1 0 &0 1 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 abc 1 0 1 0 0 1 1 0 0 0 0 0 0 0 1 O( テキスト長 ) で照合可能 実験の結果(テキスト約 6.5Mb, 圧縮時約 3.4Mb) CPU時間(s) (Shift-And 法を利用したアルゴリズム) 展開後Shift-And法 4.0 3.5 Kida, et al. 1998 3.0 2.5 2.0 1.5 今回のアルゴリズム 1.0 0.5 Sun SPARCstation20 0 0.000 0.001 0.014 0.066 0.151 0.498 1.460 パターンの出現回数(出現 / テキスト長) (%) まとめ • 提案アルゴリズムの計算量 – O(圧縮テキストの長さ+パターンの長さ+出現回数) 時間 – O( 辞書木の大きさ ) 領域 • 展開後検索を行うよりも約 1.5 倍高速である。 またAho-Corasick法を利用したアルゴリズムより 1.3 倍高速である。 • 一般化した文字列照合問題やミスマッチを許した文字 列照合も扱うことができる。 今後の課題 • 近似(文字の挿入・削除・置換を許す)文字列照合への対応 1 NATTO 2 例: NATO GTO NAGOYA 1 KATO 3 一般化された文字列照合問題 Σ を文字の有限集合, Δ= { X ⊆Σ| X ≠φ} とする。 パターン P = X1 ... Xm (Xi ∈Δ) と テキスト T = T [1 : n] が与えられたとき、 T [ j : j+m-1 ] ⊆ P となるような j を求めよ。 例: (a+b)cde(f+g+h)i 092-627-72XX ( X は 0~9 の数字 ) **えもん ( *は任意の文字 ) ミスマッチを許した文字列照合 パターン文字列のうち、 k 個以下の文字が 置き換わった文字列もパターンと一致する とみなした検索。 例: Pattern : ムーミン, k = 1 とした場合 正 誤 ユーミン ノーミン ムーラン ラーメン ローソン ノーシン
© Copyright 2024 ExpyDoc