Upload
toshiyuki-maezawa
View
760
Download
2
Embed Size (px)
Citation preview
それ、 ウェーブレット行列でできるよ
� ウェーブレット行列は 任意のデータ列に対して ある範囲内に 特定のデータがいくつあるかを 定数時間(=データ数に依存しない時間)で計算 することができます!(再掲)
つまり ウェーブレット行列があると
� 2000万のユーザデータの ID1,000,000からID5,000,000の範囲で 年齢が20歳以上のユーザが何人いるかが 定数時間でわかる
� 5000人の社員データの 社員番号2000から5000の範囲で 年収が500万以上の社員が何人いるかが 定数時間でわかる
� この中に1人、妹がいる!かどうかが 定数時間でわかる
ウェーブレット行列って デメリットとかないの?
� 定数時間で計算ってことは インデックスとか余計なデータが必要なんじゃないの? →簡潔データ構造を使っているので データ数に対して充分に小さいインデックスで大丈夫 →簡潔データ構造はデータの動的更新は向いてないので 固定された大きなデータに対して参照が多い場合に有効
� 定数時間っていってもデータ数に依存しないだけで そんなに速くないんじゃないの? →ウェーブレット木(既存手法)の2倍高速
ウェーブレット行列の 活用例(1)
� FM-Index � 接尾辞配列(Suffix Array)型の検索アルゴリズムでは
最も性能が良いと言われている � データサイズを小さくするために
テキストをBWT(Burrows Wheeler変換)で圧縮している � 検索時にRBWT(逆Burrows Wheeler変換)で
必要な部分だけ解凍
� RBWTは内部でデータの特定範囲に クエリ内の文字がいくつ含まれるかを計算している
� ウェーブレット行列で大幅に効率化!
ウェーブレット行列の 活用例(2)
� gwt � tb_yasu氏による
大規模グラフ類似度計算ソフトウェア � 当初はウェーブレット木が利用されていたが
最近ウェーブレット行列に置き換わった � 詳しくはブログをチェック!
� tb_yasuの日記 http://d.hatena.ne.jp/tb_yasu/20120909/1347196146
ウェーブレット行列の ライブラリ
� libcds: 論文著者(F. Claude)の実装 様々な簡潔データ構造が実装されたすごいライブラリ https://github.com/fclaude/libcds
� wavelet-matrix-cpp: takeda25さんの実装 wat-array互換。rank高速化(後述)あり。他にも工夫がたくさん https://github.com/hiroshi-manabe/wavelet-matrix-cpp
� shellinford: echizen_tmの実装 FM-Indexライブラリ。rank高速化したウェーブレット行列を含む https://code.google.com/p/shellinford/