Proceedings of the Third South American Workshop on String Processing.

Slides:



Advertisements
Similar presentations
Problem J: いにしえの数式 問題作成・解説: 北村 解答作成協力: 八森.
Advertisements

簡潔データ構造 国立情報学研究所 定兼 邦彦.
Collage System 圧縮テキストパターン照合のための統一的枠組み
圧縮テキストに対する文字列照合問題 竹田研究室 博士課程二年 喜田 拓也.
文法変換に基づく圧縮 九州大学附属図書館 研究開発室 喜田拓也.
透過的データ圧縮 Transparent Data Compression
到着時刻と燃料消費量を同時に最適化する船速・航路計画
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
LZ符号化 森田 岳史.
情報生命科学特別講義III (1) 文字列マッチング
情報知識ネットワーク 有村・喜田研究室 ex. 7678, 7679
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
LZ圧縮回路の設計とハード・ソフト 最適分割の検討 電子情報デザイン学科 高性能計算研究室 4回生 中山 和也 2009/2/27.
極小集合被覆を列挙する 実用的高速アルゴリズム
SHA-1の高速化tips 2007/9/15
簡潔データ構造 国立情報学研究所 定兼 邦彦.
第12回 ソート(3): シェルソート、クイックソート
アルゴリズムとデータ構造 第8回 ソート(3).
A: Attack the Moles 原案:高橋 / 解説:保坂.
簡潔データ構造 国立情報学研究所 定兼 邦彦.
全文検索のためのデータ構造と 構成の効率について
Paper from PVLDB vol.7 (To appear in VLDB 2014)
情報工学概論 (アルゴリズムとデータ構造)
文字列探索 2011/5/30.
東京大学大学院情報理工学系研究科 数理情報学専攻 定兼 邦彦 2016年4月7日
データ構造とアルゴリズム 分割統治 ~ マージソート~.
疑似頻出アイテム集合の 多項式遅延列挙アルゴリズム
IIR輪講復習 #5 Index compression
基礎情報科学のトピックス (平成15年度版) 喜田拓也 (
文字列照合アルゴリズム 情報知識ネットワーク特論 喜田拓也 参考文献:
A Unifying Framework for Compressed Pattern Matching
二分探索木によるサーチ.
データ構造とプログラミング技法 (第10回) ー文字列照合(KMP法、BM法)ー.
ネット時代の情報センス 基礎情報科学のトピックス.
九州大学大学院システム情報科学研究科 情報理学専攻 竹田研究室 博士課程3年 喜田 拓也
Pattern Matching on Compressed Texts
生物情報ソフトウェア特論 (1) 文字列マッチング・データ構造
k 個のミスマッチを許した点集合マッチング・アルゴリズム
情報工学概論 (アルゴリズムとデータ構造)
喜田 拓也,竹田 正幸,篠原 歩 九州大学大学院システム情報科学府 情報理学専攻
“Purely Functional Data Structures” セミナー
決定木とランダムフォレスト 和田 俊和.
Fast Pattern Matching Algorithms in Compressed Texts
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
文字列照合を用いた XMLデータアクセス機構の提案
データ構造とアルゴリズム 第14回 文字列の照合.
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(NlogN)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似法
問題:The hik Revolutions 解説:田村(sune2)
IIR輪講復習 #3 Dictionaries and tolerant retrieval (前半)
数理情報工学演習第二B 数理2研 定兼 邦彦 2016/9/30.
半構造化テキストに対する 文字列照合アルゴリズム
プログラミング 4 整列アルゴリズム.
データ圧縮技術による文字列照合処理の高速化に関する研究
アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三
Hoffman符号 2011/05/23.
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
15.cons と種々のデータ構造.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
短い部分文字列の ミスマッチトレランスを 高速計算するアルゴリズム
構造的類似性を持つ半構造化文書における頻度分析
LZW 圧縮テキストに対する 高速文字列照合アルゴリズム 喜田 拓也 竹田 正幸 篠原 歩 九州大学大学院システム情報科学研究科
Amicus: A Group Abstraction for Mobile Group Communications
情報生命科学特別講義III (3)たたみ込みとハッシュに 基づくマッチング
データ構造とアルゴリズム 第14回 文字列の照合.
グラフの列挙 中野 眞一    (群馬大学) 2019/9/14 列挙学校.
8.文字列処理 8.1 C#の文字列 C#では, “ABCD”のように文字列を2重引用符で挟んで指定します。ASCIIコード体系のとき,以下のような内部形式となります。 1 1 文字 ‘A’ ナル文字 1 1 文字 ‘B’ A B C D \ 文字 ‘C’ 1 1 文字 ‘D’ ナル文字‘\0’
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
Presentation transcript:

Proceedings of the Third South American Workshop on String Processing. 2019/1/11 Lempel-Ziv Parsing and Sublinear-Size Index Structures for String Matching Juha Karkkainen ¨ Esko Ukkonen Proceedings of the Third South American Workshop on String Processing. WSP 1996, 141-55, 1996 竹田研究室 修士課程1年 喜田 拓也

研究背景 9 文字列照合問題(パターンマッチング) existence problem all-occurrences problem きだくんのおかあさんがりあかーをひいている さんがりあ

研究背景 KMP O(m+n) m n BM O(m+n) 文字列照合問題(パターンマッチング) existence problem all-occurrences problem existence problem all-occurrences problem existence problem all-occurrences problem KMP O(m+n) m n BM O(m+n)

研究背景 巨大なテキストに対する文字列照合問題 Index を作ることで劇的に速くなる.

研究背景 O(n) 現在知られている index 構造 suffix tree suffix array Over 10n bytes level-compressed trie suffix cactus suffix binary search tree O(n) Over 10n bytes 5n bytes About 11n bytes 9n bytes About 10n bytes

O(n / log n) 研究背景 新しい index 構造が必要 初の sublinear-size index より小さい 前処理をしない場合よりも検索が高速 初の sublinear-size index LZ parsing を用いる これがミソ O(n / log n)

LZ parsing Lempel-Ziv 圧縮 LZ parsing = LZ76 ? LZ77 (移動辞書式圧縮) LZSS, LZH,LZR,LZB LZ78 (登録辞書式圧縮) LZW,LZC,LZT,LZFG LZ parsing = LZ76 ?

LZ parsing ... LZ parse Z of string T の定義 Z (P1,L1,C1) (Pi,Li,Ci) = (P1,L1,C1) (Pi,Li,Ci) (PN,LN,CN) ... Pi, Li 負でない整数 Ci Σ上の記号

Pi < Ui , whenever Li > 0 T[Ui…Ui+Li-1] = T[Pi…Pi+Li-1], LZ parsing LZ parse Z of string T の定義 Z = (P1,L1,C1) (Pi,Li,Ci) (PN,LN,CN) ... = 1, U1 Ui = Ui -1 + Li -1 + 1 for i > 1. Pi < Ui , whenever Li > 0 For 1 ≦ i ≦ N T[Ui…Ui+Li-1] = T[Pi…Pi+Li-1], T[Ui+Li] = Ci . T[Pi...] と T[Ui...] の common prefix が 最大となる Pi < Ui を選ぶ.

LZ parsing aaaabbaaababaaabb a b a a b $ LZ parse の例 T 注意 Z (0,0,a) 2019/1/11 LZ parsing LZ parse の例 T = aaaabbaaababaaabb a b a a b $ 注意 Z = (0,0,a) (1,3,b) (5,1,a) (3,3,a) (6,5,b)

LZ parsing aaaabbaaababaaabb a b a a b LZ parse の例 block T definition 2019/1/11 LZ parsing LZ parse の例 block T = aaaabbaaababaaabb a b a a b definition phrase boundary symbol Z = (0,0,a) (1,3,b) (5,1,a) (3,3,a) (6,5,b)

LZ parsing aaaabbaaababaaabb a b a a b LZ parse の例 T U1 U5 U4 U3 U2 = 2019/1/11 LZ parsing LZ parse の例 T = aaaabbaaababaaabb a b a a b U1 U5 U4 U3 U2 = 1 2 6 8 12 Z = (0,0,a) (1,3,b) (5,1,a) (3,3,a) (6,5,b)

LZ parsing parse Z の特性 どの二つの block も同一ではない

LZ parsing parse Z の特性 どの二つの block も同一ではない パターンP の最初の occurrence は, 必ず Z の boundary symbol を含む

LZ parsing n O(n / log n) parse Z のサイズのオーダー N を長さ n のテキストの LZ parse における block の個数とする. また c = |Σ| とする. N < n logc n - logc logc n - 1 c-1 O(n / log n)

|Σ| LZ parsing for text length n = 300000. English DNA random 77 4 2 8 64 40964 31633 16734 14755 88748 type N |Σ|

Oh! Let’s go

T における Pの occurrence が boundary symbol を含む. 検索アルゴリズム サーチ を2種類に分類する. これがミソ T における Pの occurrence が boundary symbol を含む. Primary occurrence それ以外 Secondary occurrence

検索アルゴリズム Occurrence を2種類に分類する. Primary search Existence problem これがミソ Primary search Existence problem Primary occurrence Secondary search Secondary occurrence

P の primary occurrence を見つけ出す. Primary Search 問題の定義 P の primary occurrence を見つけ出す. T [Ui + Li] = Ci 1 ・・・ u ・・・・・・ m Reference pair (i , u)

P の primary occurrence を見つけ出す. 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 を見つけ出す.

Primary Search Primary Search を解くための工夫 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

i Primary Search Two-Dimensional Prefix Matching(2DPM) {(Xi , Yi)} : 文字列の組の集合 (X , Y) : 質問文字列 i X が Xi の prefix, Y が Yi の prefix. (Xi , Yi) 愛?

Xi = T[Ui…Ui+Li]R = T[Ui…Ui+1 -1]R 2019/1/11 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]

Primary Search 2DPMの例 1 ・・・ u ・・・・・・ m 1 block

Primary Search 問題の定義 P の primary occurrence を見つけ出す. 2-dimensional prefix matching を解く. 2-dimensional range query を解く.

i Primary Search 質問区間に含まれる点 (xi , yi)を見つける. 2-dimensional range query 2019/1/11 Primary Search 2-dimensional range query {(xi , yi)} : 点の集合 ([xl , xr] , [yl , yr]) : 質問区間. 質問区間に含まれる点 (xi , yi)を見つける. i 愛?

Primary Search 2-dimensional range query {(xi , yi)} : 点の集合 ([xl , xr] , [yl , yr]) : 質問区間. xl xr yl yr

Primary Search 2-dimensional range query {(xi , yi)} : 点の集合 ([xl , xr] , [yl , yr]) : 質問区間. これがミソ 辞書式順序を用いる. xl = X xr = Xzzzzz... yl = Y yr = Yzzzzz... xi = Xi , yi = Yi

Primary Search Y 2-dimensional range query X (a,aaaabb...) aba abazzzz... ab abzzzz... X Y (a,aaaabb...) (baaa,bbaaa...) (ab,aaabab...) (abaa,abaaa...)

N 点の balanced 2-d tree. (Lee, Wong 1977) Primary Search 2-dimensional range query 2DPM N 点の balanced 2-d tree. (Lee, Wong 1977) O( N + l) 2-d tree for string. O(m N + l) O(m + N + l)

Primary Search Y 2-d tree の例 X a X 値で判別 b c Y 値で判別 d g e f g e c b f d (x1 , y1) (x2 , y2) (x3 , y3) (x4 , y4) (x5 , y5) (x7 , y7) (x6 , y6) X 値で判別 Y 値で判別 X Y g e c b f d a

T [Ui + Li - u + 1 … Ui + Li - u + m] = P となるような canonical な i を見つける. Primary Search T [Ui + Li - u + 1 … Ui + Li - u + m] = P となるような canonical な i を見つける. 1 ・・・ u ・・・・・・ m O(m + N + l) O(m2 + m N + L)

T [Ui + Li - u + 1 … Ui + Li - u + m] = P となるような canonical な i を見つける. Primary Search T [Ui + Li - u + 1 … Ui + Li - u + m] = P となるような canonical な i を見つける. 1 ・・・ u ・・・・・・ m O(m2 + m N + L) O(m2 +m log N + Nm log m + L)

Ok? No!

Secondary Search 問題の定義 Secondary occurrence Known occurrence これがミソ Secondary occurrence

Secondary Search 問題の定義 Known occurrence Secondary occurrence (Pi , Li , Ci) Pi Pi+Li-1

Known occurrence O = T[v…v + m - 1] T[Ui - Pi + v…Ui -Pi + v + m - 1] Secondary Search 問題の定義 T[v…v + m - 1] Secondary occurrence 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 xi ≦ x, yi ≧ y となるような すべての区間 [xi , yi] を見つける. Interval containment problem {[xi , yi]}i=1,…,N : 区間の集合 [x , y] : 質問区間 xi ≦ x, yi ≧ y となるような すべての区間 [xi , yi] を見つける. i 愛?

Secondary Search xi = Pi , yi = Pi + Li - 1 x = v , y = v + m - 1 問題の定義 Secondary occurrence O = T[v…v + m - 1] T[Pi] T[Pi+Li-1] xi = Pi , yi = Pi + Li - 1 x = v , y = v + m - 1 offset oi = Ui - Pi T[ x + oi … y + oi ]

トータルでは, すべての occurrenceに対して interval containment problem が行われるので 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 より大きい.

Secondary Search 2-d heap の例 [2,5] [3,6] [4,5] [5,7] [1,7] [4,8] [6,9] 10 11 2 4 5 6 7 3 [1,7] [4,8] [6,9] [9,12] [1,9] [7,12] [6,11] 11 9 7 8 5 6 6 7 9

Secondary Search 2-d heap の例 O(log N + l log N) [2,5] [3,6] [4,5] 1 [2,5] [3,6] [4,5] [5,7] 8 9 10 11 2 4 5 6 7 3 [1,7] [4,8] [6,9] [9,12] [1,9] [7,12] [6,11] [2,3] [2,3] [2,3] [2,3] O(log N + l log N) [2,3] [2,3] [2,3] 1 2 3 4 5 6 7 8 9 10 11 12

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(L log N)

さいごに 18 N 新しい Index 構造の構成 bytes LZ parse Z O(N) 本当に小さいのか? 18 N bytes 1 2 新しい Index 構造の構成 LZ parse Z O(N) 2-d tree for string O(N) 2-d heap と offset O(N) Suffix array = 5n bytes n > 103 小さい

さいごに 本当に小さいのか? 他の index 構造よりも一般的に小さくなるだろう. 検索時間の practical な評価は? 謎

さいごに 一番の謎 本当に小さいのか? 検索時間の practical な評価は? 実現可能か? 他の index 構造よりも一般的に小さくなるだろう. 検索時間の practical な評価は? 実現可能か? 謎 一番の謎 これがミソ