Submit Search
Upload
FM-indexによる全文検索
•
6 likes
•
10,902 views
Sho IIZUKA
Follow
FM-indexによる全文検索
Read less
Read more
Software
Report
Share
Report
Share
1 of 18
Download now
Download to read offline
Recommended
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
ローリングハッシュとサフィックスアレイ
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
HCPC: 北海道大学競技プログラミングサークル
グラフ:フロー&カット
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Union find(素集合データ構造)の解説です
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
プログラムを高速化するためのテクニックをまとめました。
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
How to implement a fast double presicion exponential function for x64 see http://github.com/herumi/fmath
公開鍵暗号5: 離散対数問題
公開鍵暗号5: 離散対数問題
Joe Suzuki
双対性
双対性
Yoichi Iwata
JOI春合宿2018講義資料
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
Proof Summit 2015 <http: /> で発表した、SAT/SMTソルバの仕組みです。 Proofということで、論理学的側面からの面白さを出来るだけ紹介しています。
Recommended
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
ローリングハッシュとサフィックスアレイ
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
HCPC: 北海道大学競技プログラミングサークル
グラフ:フロー&カット
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Union find(素集合データ構造)の解説です
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
プログラムを高速化するためのテクニックをまとめました。
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
How to implement a fast double presicion exponential function for x64 see http://github.com/herumi/fmath
公開鍵暗号5: 離散対数問題
公開鍵暗号5: 離散対数問題
Joe Suzuki
双対性
双対性
Yoichi Iwata
JOI春合宿2018講義資料
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
Proof Summit 2015 <http: /> で発表した、SAT/SMTソルバの仕組みです。 Proofということで、論理学的側面からの面白さを出来るだけ紹介しています。
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
BIT
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
Kensuke Otsuki
日本情報オリンピック (JOI) の主催する、 JOI 2021 夏季セミナーでの講義資料です。 拙著『問題解決力を鍛える!アルゴリズムとデータ構造』 の 5.6 節に相当する内容を掘り下げた講義です。 「区間分割の仕方を最適化する動的計画法」を題材として、さまざまな問題に対して汎用的な見方をする数理工学の考え方を紹介しました。
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
catupper
灘校パソコン研究部の夏合宿(2022)でしゃべった内容です。
最大流 (max flow)
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
Nov 05, 2018 北海道大学競技プログラミングサークル勉強会
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
続き (動的木編) はこちら http://www.slideshare.net/iwiwi/2-12188845
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
Deep Learning JP
2022/03/25 Deep Learning JP: http://deeplearning.jp/seminar-2/
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Shiqiao Du
18 Mar. 2012 第3回Tokyo.Scipyにて発表したスライドです。 CythonだけではなくF2Pyにも触れていてかなりカオスな内容です。
Quine・難解プログラミングについて
Quine・難解プログラミングについて
mametter
第 379 回 PTT の発表で使った資料です。 http://www.ci.i.u-tokyo.ac.jp/~sasada/ptt/arc/379/
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
様々な全域木問題
様々な全域木問題
tmaehara
2013 JOI春合宿 二日目講義
[Dl輪読会]dl hacks輪読
[Dl輪読会]dl hacks輪読
Deep Learning JP
2016/11/25 Deep Learning JP: http://deeplearning.jp/seminar-2/
直交領域探索
直交領域探索
okuraofvegetable
JOI夏季セミナー2016 コンピュータ・ジオメトリ
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
最小カットを使って「燃やす埋める問題」を解く方法について、問題とソースコードつきで、まとめました。ニコニコ生放送「TopCoderでプログラムしてみた」2000回記念放送の資料です。
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
東京大学 松尾研究室が主催する深層強化学習サマースクールの講義で今井が使用した資料の公開版です. 強化学習の基礎的な概念や理論から最新の深層強化学習アルゴリズムまで解説しています.巻末には強化学習を勉強するにあたって有用な他資料への案内も載せました. 主に以下のような強化学習の概念やアルゴリズムの紹介をしています. ・マルコフ決定過程 ・ベルマン方程式 ・モデルフリー強化学習 ・モデルベース強化学習 ・TD学習 ・Q学習 ・SARSA ・適格度トレース ・関数近似 ・方策勾配法 ・方策勾配定理 ・DPG ・DDPG ・TRPO ・PPO ・SAC ・Actor-Critic ・DQN(Deep Q-Network) ・経験再生 ・Double DQN ・Prioritized Experience Replay ・Dueling Network ・Categorical DQN ・Noisy Network ・Rainbow ・A3C ・A2C ・Gorila ・Ape-X ・R2D2 ・内発的報酬 ・カウントベース ・擬似カウントベース ・RND(Random Network Distillation) ・ICM(Intrinsic Curiosity Module) ・Go-Explore ・世界モデル(World Models) ・MuZero ・SimPLe ・NGU(Never Give Up) ・Agent57 ・AlphaGo ・AlphaGo Zero ・AlphaZero ・OpenAI Five ・AlphaStar ・マルチエージェント強化学習
【DL輪読会】GradMax: Growing Neural Networks using Gradient Information
【DL輪読会】GradMax: Growing Neural Networks using Gradient Information
Deep Learning JP
2022/05/27 Deep Learning JP: http://deeplearning.jp/seminar-2/
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
情オリ2012春合宿講義資料
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
そのロリハ(Rolling Hash)、大丈夫ですか? 衝突するケースが構成できるかもしれません・・
並列化による高速化
並列化による高速化
sakura-mike
JOI夏季セミナー
HDDの返品保証を使ってみた
HDDの返品保証を使ってみた
Sho IIZUKA
HDDの返品保証を使ってみた
円と円の外接線の求め方
円と円の外接線の求め方
Sho IIZUKA
More Related Content
What's hot
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
BIT
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
Kensuke Otsuki
日本情報オリンピック (JOI) の主催する、 JOI 2021 夏季セミナーでの講義資料です。 拙著『問題解決力を鍛える!アルゴリズムとデータ構造』 の 5.6 節に相当する内容を掘り下げた講義です。 「区間分割の仕方を最適化する動的計画法」を題材として、さまざまな問題に対して汎用的な見方をする数理工学の考え方を紹介しました。
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
catupper
灘校パソコン研究部の夏合宿(2022)でしゃべった内容です。
最大流 (max flow)
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
Nov 05, 2018 北海道大学競技プログラミングサークル勉強会
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
続き (動的木編) はこちら http://www.slideshare.net/iwiwi/2-12188845
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
Deep Learning JP
2022/03/25 Deep Learning JP: http://deeplearning.jp/seminar-2/
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Shiqiao Du
18 Mar. 2012 第3回Tokyo.Scipyにて発表したスライドです。 CythonだけではなくF2Pyにも触れていてかなりカオスな内容です。
Quine・難解プログラミングについて
Quine・難解プログラミングについて
mametter
第 379 回 PTT の発表で使った資料です。 http://www.ci.i.u-tokyo.ac.jp/~sasada/ptt/arc/379/
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
様々な全域木問題
様々な全域木問題
tmaehara
2013 JOI春合宿 二日目講義
[Dl輪読会]dl hacks輪読
[Dl輪読会]dl hacks輪読
Deep Learning JP
2016/11/25 Deep Learning JP: http://deeplearning.jp/seminar-2/
直交領域探索
直交領域探索
okuraofvegetable
JOI夏季セミナー2016 コンピュータ・ジオメトリ
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
最小カットを使って「燃やす埋める問題」を解く方法について、問題とソースコードつきで、まとめました。ニコニコ生放送「TopCoderでプログラムしてみた」2000回記念放送の資料です。
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
東京大学 松尾研究室が主催する深層強化学習サマースクールの講義で今井が使用した資料の公開版です. 強化学習の基礎的な概念や理論から最新の深層強化学習アルゴリズムまで解説しています.巻末には強化学習を勉強するにあたって有用な他資料への案内も載せました. 主に以下のような強化学習の概念やアルゴリズムの紹介をしています. ・マルコフ決定過程 ・ベルマン方程式 ・モデルフリー強化学習 ・モデルベース強化学習 ・TD学習 ・Q学習 ・SARSA ・適格度トレース ・関数近似 ・方策勾配法 ・方策勾配定理 ・DPG ・DDPG ・TRPO ・PPO ・SAC ・Actor-Critic ・DQN(Deep Q-Network) ・経験再生 ・Double DQN ・Prioritized Experience Replay ・Dueling Network ・Categorical DQN ・Noisy Network ・Rainbow ・A3C ・A2C ・Gorila ・Ape-X ・R2D2 ・内発的報酬 ・カウントベース ・擬似カウントベース ・RND(Random Network Distillation) ・ICM(Intrinsic Curiosity Module) ・Go-Explore ・世界モデル(World Models) ・MuZero ・SimPLe ・NGU(Never Give Up) ・Agent57 ・AlphaGo ・AlphaGo Zero ・AlphaZero ・OpenAI Five ・AlphaStar ・マルチエージェント強化学習
【DL輪読会】GradMax: Growing Neural Networks using Gradient Information
【DL輪読会】GradMax: Growing Neural Networks using Gradient Information
Deep Learning JP
2022/05/27 Deep Learning JP: http://deeplearning.jp/seminar-2/
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
情オリ2012春合宿講義資料
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
そのロリハ(Rolling Hash)、大丈夫ですか? 衝突するケースが構成できるかもしれません・・
並列化による高速化
並列化による高速化
sakura-mike
JOI夏季セミナー
What's hot
(20)
Binary indexed tree
Binary indexed tree
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
最大流 (max flow)
最大流 (max flow)
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Quine・難解プログラミングについて
Quine・難解プログラミングについて
冬のLock free祭り safe
冬のLock free祭り safe
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
様々な全域木問題
様々な全域木問題
[Dl輪読会]dl hacks輪読
[Dl輪読会]dl hacks輪読
直交領域探索
直交領域探索
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
【DL輪読会】GradMax: Growing Neural Networks using Gradient Information
【DL輪読会】GradMax: Growing Neural Networks using Gradient Information
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Rolling Hashを殺す話
Rolling Hashを殺す話
並列化による高速化
並列化による高速化
More from Sho IIZUKA
HDDの返品保証を使ってみた
HDDの返品保証を使ってみた
Sho IIZUKA
HDDの返品保証を使ってみた
円と円の外接線の求め方
円と円の外接線の求め方
Sho IIZUKA
円と円の交点の求め方
円と円の交点の求め方
Sho IIZUKA
About Pointer
About Pointer
Sho IIZUKA
当スライドには過激な主張が含まれています。
勝手に解説 TopCoder Marathon Match 82 ColorLinker
勝手に解説 TopCoder Marathon Match 82 ColorLinker
Sho IIZUKA
grepについて
grepについて
Sho IIZUKA
姫路IT系勉強会 Vol.17 LT資料
More from Sho IIZUKA
(6)
HDDの返品保証を使ってみた
HDDの返品保証を使ってみた
円と円の外接線の求め方
円と円の外接線の求め方
円と円の交点の求め方
円と円の交点の求め方
About Pointer
About Pointer
勝手に解説 TopCoder Marathon Match 82 ColorLinker
勝手に解説 TopCoder Marathon Match 82 ColorLinker
grepについて
grepについて
FM-indexによる全文検索
1.
FM-Indexによる全文検索 計算機実習E 自由課題
2.
• 文書から文字列を検索する方法は2通りに分類できる A. 前処理が不要な方法
(力任せな方法, KMP法, BM法) B. 前処理が必要な方法 (転置インデックス, 接尾辞配列) • Bは前処理の時間が必要なかわりに, 同じ文書から何回も検索する場合はAよりも高速 • FM-IndexはBに分類される方法で, 文書の長さに依存しない時間で検索できる
3.
前処理1:接尾辞配列の構築 文書 mississippi mississippi$ エンドマーカ$を追加 mississippi$ ississippi$ ssissippi$ sissippi$ issippi$ ssippi$ sippi$ ippi$ ppi$ pi$ i$ $ 接尾辞の列挙
4.
前処理1:接尾辞配列の構築 0 mississippi$ 1 ississippi$ 2
ssissippi$ 3 sissippi$ 4 issippi$ 5 ssippi$ 6 sippi$ 7 ippi$ 8 ppi$ 9 pi$ 10 i$ 11 $ 11 $ 10 i$ 7 ippi$ 4 issippi$ 1 ississippi$ 0 mississippi$ 9 pi$ 8 ppi$ 6 sippi$ 3 sissippi$ 5 ssippi$ 2 ssissippi$ 辞書順でソートする ※$は任意のアルファベットよりも 順位が小さいとする 接尾辞配列SA
5.
前処理2:BWT (Burrows-Wheeler Transform) 11 $ 10
i$ 7 ippi$ 4 issippi$ 1 ississippi$ 0 mississippi$ 9 pi$ 8 ppi$ 6 sippi$ 3 sissippi$ 5 ssippi$ 2 ssissippi$ 元の文字列における ひとつ前の文字にする i p s s m $ p i s s i i BWT文字列T
6.
検索処理 • BWT文字列T =
ipssm$pissii について, 次の関数を定義する • Rank(c,p) : T[0,p)の範囲で, アルファベットcの出現数を返す • RankLT(c) : T全体で, cよりも順位が小さい アルファベットの出現数を返す
7.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA
8.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA 'i'+"ppi$"の 接尾辞配列上での 出現位置は?
9.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA 'i'+"ppi$"の 接尾辞配列上での 出現位置は?
10.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA 'i'+"ppi$"の 接尾辞配列上での 出現位置は? LF-mapping c=T[p] に続く文字列の SA上での出現位置は RankLT(c)+Rank(c,p)
11.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA "ssi"の検索 [RankLT('i')+Rank('i', 0), RankLT('i')+Rank('i',
12)) 'i'で始まる 文字列
12.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA "ssi"の検索 [RankLT('s')+Rank('s', 1), RankLT('s')+Rank('s',
5)) 's'+"i"で始まる 文字列
13.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA "ssi"の検索 [RankLT('s')+Rank('s', 8), RankLT('s')+Rank('s',
10)) 's'+"si"で始まる 文字列
14.
検索処理 • FM-indexは, 検索文字列に対応する位置の絞り込みを LF-mappingの繰り返しによって行う •
LF-mappingは Rank と RankLT で行える • この2つの処理は, ウェーブレット木やウェーブレット行列を使えば O(log σ) 時間で可能 (σ はアルファベットの種類数) • LF-mappingを検索文字列Qの長さ分だけ繰り返すので, 一回の検索がO(m log σ) 時間で可能 (m は Q の文字数) • 検索時間が文書の長さに依存しない
15.
制作物 • 青空文庫で人気がある図書500冊を対象とした ウェブブラウザから使えるインクリメンタル検索を制作 • 接尾辞配列の構築はsais.hxx
(高速なライブラリ) を使用 • ウェーブレット行列とFM-Indexは自分で実装 (C++), boost-pythonによりPython用の拡張モジュールに変換 • Flask (Web App Framework@Python) から呼び出す
16.
うまくいかなかったところ • あいまい検索を実装しようとして文献を探してみた → 編集距離に対して指数時間かかるらしい… •
作成した索引をファイルから読み込む処理で, 既存のライブラリを使ったら使用メモリの量が爆発 (原因不明)
17.
まとめ • 高速な文字列検索のアルゴリズムを実装してみた • ブラウザから使えるようにしてみた ! •
参考文献 • 岡野原 大輔. 高速文字列解析の世界. 岩波書店. 2012.
18.
(補足) ウェーブレット木 3101212213 1000101101 10111 32223 10111
10001 下位2ビット目 → 下位1ビット目 → 0 1111 222 33 0 1 0 1 0 1
Download now