論文紹介:The wavelet matrix
-
Upload
yuki-igarashi -
Category
Technology
-
view
378 -
download
0
Transcript of 論文紹介:The wavelet matrix
The wavelet matrix :An efficient wavelet tree for large alphabets
Francisco Claude, Gonzalo Navarro, Alberto OrdóñezInformation SystemsVolume 47, January 2015, Pages 15–32
発表者: 篠原・吉仲研究室 五十嵐 祐貴
1
Lab-EMon問題
ある研究室では1分毎に研究室の消費電力を記録している。600年分の時系列データに対して以下の操作を行いたい。
1. 記録開始後10,000分後の値
2. 10年後までに90Wを記録した回数
3. 1,000回目に90Wを記録した時間
2 / 67
Lab-EMon問題 解法アルゴリズム
A. 時間順に値を配列に格納
必要なメモリ: 𝒏 𝐥𝐨𝐠𝝈 315MB(取りうる電力消費量が0~255の場合)
1. 記録開始後10,000分後の値 𝑶(𝟏)
2. 10年後までに90Wを記録した回数 𝑶(𝒏)
3. 1,000回目に90Wを記録した時間 𝑶(𝒏)
i 0 1 2 3 4 5 6 7 8 …
S[i] 80 87 90 80 83 79 90 90 80 …
3 / 67
Lab-EMon問題 解法アルゴリズム
B. 電力量で値をソートして格納
必要なメモリ: 𝒏 𝐥𝐨𝐠𝒏 + 𝒏 𝐥𝐨𝐠𝝈 1428MB(取りうる電力消費量が0~255の場合)
1. 記録開始後10,000分後の値 𝑶(𝒏)
2. 10年後までに90Wを記録した回数 𝑶(𝐥𝐨𝐠𝒏)
3. 1,000回目に90Wを記録した時間 𝑶(𝐥𝐨𝐠𝒏)
[W] 91 90 90 90 … 90 … 89 89 …
[m] 154 2 6 7 … 171 … 15 19 …
4 / 67
Lab-EMon問題 解法アルゴリズム
C. 電力量毎に事前に計算して格納
必要なメモリ: 𝝈𝒏 𝐥𝐨𝐠𝝈 80732MB(取りうる電力消費量が0~255の場合)
1. 記録開始後10,000分後の値 𝑶(𝝈)
2. 10年後までに90Wを記録した回数 𝑶(𝟏)
3. 1,000回目に90Wを記録した時間 𝑶(𝐥𝐨𝐠𝒏)
i 0 1 2 3 4 5 6 7 8 …
𝒓𝟖𝟎 1 1 1 2 2 2 2 2 3 …
𝒓𝟗𝟎 0 0 1 1 1 1 2 3 3
…
5 / 67
Lab-EMon問題 解法アルゴリズム
???????必要なメモリ:𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈 + 𝑶(𝝈 𝐥𝐨𝐠𝒏)
(取りうる電力消費量が0~255の場合)?????MB
1. 記録開始後10,000分後の値 𝑶(𝐥𝐨𝐠𝝈)
2. 10年後までに90Wを記録した回数 𝑶(𝐥𝐨𝐠𝝈)
3. 1,000回目に90Wを記録した時間 𝑶(𝐥𝐨𝐠𝝈)
6 / 67
Lab-EMon問題 解法アルゴリズム
???????必要なメモリ:𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈 + 𝑶(𝝈 𝐥𝐨𝐠𝒏)
(取りうる電力消費量が0~255の場合)379MB(実測値)
1. 記録開始後10,000分後の値 𝑶(𝐥𝐨𝐠𝝈)
2. 10年後までに90Wを記録した回数 𝑶(𝐥𝐨𝐠𝝈)
3. 1,000回目に90Wを記録した時間 𝑶(𝐥𝐨𝐠𝝈)
7 / 67
Lab-EMon問題 解法アルゴリズム
Wavelet tree必要なメモリ:𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈 + 𝑶(𝝈 𝐥𝐨𝐠𝒏)
(取りうる電力消費量が0~255の場合)379MB(実測値)
1. 記録開始後10,000分後の値 𝑶(𝐥𝐨𝐠𝝈)
2. 10年後までに90Wを記録した回数 𝑶(𝐥𝐨𝐠𝝈)
3. 1,000回目に90Wを記録した時間 𝑶(𝐥𝐨𝐠𝝈)
8 / 67
Lab-EMon問題 解法アルゴリズム
Wavelet tree必要なメモリ:𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈 + 𝑶(𝝈 𝐥𝐨𝐠𝒏)
電力消費量の取りうる値
0~𝟐𝟓𝟓
0~𝟐𝟎𝟎𝟎𝟎𝟎
0~𝟐𝟎𝟎𝟎𝟎𝟎𝟎
0~𝟐𝟎𝟎𝟎𝟎𝟎𝟎𝟎
0~𝟐𝟎𝟎𝟎𝟎𝟎𝟎𝟎𝟎 ≅ 𝒏
Wavelet tree
367MB
973MB
1162MB
1409MB
2228MB
9 / 67
Lab-EMon問題 解法アルゴリズム
Wavelet matrix必要なメモリ:𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈 + 𝑶(𝐥𝐨𝐠𝝈 ⋅ 𝐥𝐨𝐠𝒏)
電力消費量の取りうる値
0~𝟐𝟓𝟓
0~𝟐𝟎𝟎𝟎𝟎𝟎
0~𝟐𝟎𝟎𝟎𝟎𝟎𝟎
0~𝟐𝟎𝟎𝟎𝟎𝟎𝟎𝟎
0~𝟐𝟎𝟎𝟎𝟎𝟎𝟎𝟎𝟎 ≅ 𝒏
Wavelet tree
367MB
973MB
1162MB
1409MB
2228MB
Wavelet matrix
367MB
972MB
1155MB
1339MB
1521MB
10 / 67
この論文の概要
• Wavelet matrixの提案と検証o 空間計算量がWavelet treeより改善
ノード間のポインターなしで実現
o 時間計算量はWavelet treeと同等
o 実装が容易かつオーバーヘッドが少ない
ノードに対応する範囲を求める必要がない
(Pointerless wavelet treeと比較した場合)実装が容易 かつ 定数倍高速化
11 / 67
この論文の目次
• 基本概念の紹介o Wavelet treeo Pointerless wavelet treeo ハフマン形を用いたWavelet treeo グリッドにおけるWavelet treeの利用
• Pointerless Huffman shaped wavelet treeの紹介
• Wavelet matrixの導入
• Wavelet matrixの圧縮
• 実験o 系列データ / グリッドにおける検証
12 / 67
Lab-EMon問題(再掲)
ある研究室では1分毎に研究室の消費電力を記録している。60年分の時系列データに対して以下の操作を行いたい。
1. 記録開始後10,000分後の値
2. 10年後までに90Wを記録した回数
3. 1,000回目に90Wを記録した時間
13 / 67
問題定義
値0~255を取りうる時系列データについて
1. 10000分後の値
2. 10年後までに90Wが出現した回数
3. 1000回目に90Wが出現した時間
整数[0, 256)を取りうる𝑺[𝟏: 𝒏] について
1. S[10000] の値
2. S[1:60×24×365×10]に90が出現した回数
3. 1000回目に90が出現した位置
15 / 67
問題定義
値0~255を取りうる時系列データについて
1. 10000分後の値
2. 10年後までに90Wが出現した回数
3. 1000回目に90Wが出現した時間
整数[0, 𝝈)を取りうる𝑺[𝟏: 𝒏]について
1. S[𝒊] の値
2. S[1:𝒊]に𝒂が出現した回数
3. 𝒋回目に𝒂が出現した位置
16 / 67
問題定義
整数[0, 𝝈)を取りうる𝑺[𝟏: 𝒏]について
𝒂𝒄𝒄𝒆𝒔𝒔(𝑺, 𝒊) S[𝒊] の値
𝒓𝒂𝒏𝒌(𝑺, 𝒂, 𝒊) S[1:𝒊]に𝒂が出現した回数
𝒔𝒆𝒍𝒆𝒄𝒕(𝑺, 𝒂, 𝒋) 𝒋回目に𝒂が出現した位置
𝝈をアルファベットサイズという
17 / 67
完備辞書
• ビット列に対する簡潔データ構造o簡潔データ構造簡潔:
データを保持するために必要な最小ビット数 𝒁 に対して𝒁 + 𝒐(𝒁)ビットの領域で表現
元のデータ𝑍と補助データ𝑜(𝑍)を利用することで高速な操作を実現したデータ構造
1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 1 0 1 1ビット列Zビット
0 256
0 143 … 9951
256 504 512
0 … 101 0 … 130
00 00 00 00 0
00 00 00 01 1
… …
00 00 00 00
補助データ𝑜(𝑍)ビット
18 / 67
完備辞書のメリット
• 3つの操作を定数時間で実現可能o 𝒃_𝒂𝒄𝒄𝒆𝒔𝒔 𝑩, 𝒊 𝐵[𝑖]を返す
o 𝒃_𝒓𝒂𝒏𝒌 𝑩, 𝒃, 𝒊 𝐵[1: 𝑖]から𝑏 ∈ {0,1}の数を返す
o 𝒃_𝒔𝒆𝒍𝒆𝒄𝒕(𝑩, 𝒃, 𝒋) 𝐵の先頭から数えて𝑗番目に出現した
𝑏 ∈ {0,1}の位置
1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 1 0 1 1ビット列 𝐵
𝑏_𝑟𝑎𝑛𝑘(𝐵, 1, 5)= 𝟑
𝑏_𝑎𝑐𝑐𝑒𝑠𝑠(𝐵, 7)= 𝟏
𝑏_𝑠𝑒𝑙𝑒𝑐𝑡(𝐵, 1,8)= 𝟏𝟏
19 / 67
Wavelet tree [R. Grossi et al., 2003]
• 整数列に対するデータ構造o 各ノードに完備辞書を持つ
o 二分木であれば高さは log𝜎
• 応用例o 系列データ解析
o 二次元グリッド
o 全文検索など
20 / 67
Wavelet treeの計算量
• 以下の操作を𝑂(log 𝜎)で実現o 𝒂𝒄𝒄𝒆𝒔𝒔 𝑺, 𝒊 S[𝑖]を返す
o 𝒓𝒂𝒏𝒌 𝑺, 𝒂, 𝒊 S[1: 𝑖]から𝑎 ∈ {0, … , 𝜎 − 1} の数を返す
o 𝒔𝒆𝒍𝒆𝒄𝒕(𝑺, 𝒂, 𝒋) 𝑆の先頭から𝑗番目に出現した
𝑎 ∈ {0,… , 𝜎 − 1} の位置
(再掲)完備辞書は以下の操作を𝑶(𝟏)で実現可能
𝒃_𝒂𝒄𝒄𝒆𝒔𝒔 𝑩, 𝒊 𝐵[𝑖]を返す
𝒃_𝒓𝒂𝒏𝒌 𝑩, 𝒃, 𝒊 𝐵[1: 𝑖]から𝑏 ∈ {0,1}の数を返す
𝒃_𝒔𝒆𝒍𝒆𝒄𝒕(𝑩, 𝒃, 𝒋) 𝐵の先頭から𝑗番目に出現した𝑏 ∈ {0,1}の位置
21 / 67
Wavelet treeの問題点
•空間計算量
𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈 + 𝑶(𝝈 𝐥𝐨𝐠𝒏)
𝜎が増加 空間計算量が激増
Wavelet treeの問題点
ビット列の補助データ
ノード間のポインタビット列の保存領域
23 / 67
0
1000
2000
3000
4000
1.0E+2 1.0E+3 1.0E+4 1.0E+5 1.0E+6 1.0E+7 1.0E+8
nlogσ o(nlogσ) O(σlogn) TOTAL
Wavelet treeの問題点
𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈 + 𝑶(𝝈 𝐥𝐨𝐠𝒏)
[MB]
ビット列の補助データ
ノード間のポインタビット列の保存領域
Alphabet sizeσ
24 / 67
• Wavelet matrix
𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈
+ 𝑶(𝐥𝐨𝐠𝝈 ⋅ 𝐥𝐨𝐠𝒏)
Wavelet matrixとの比較
• Wavelet tree
𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈
+𝑶(𝝈 𝐥𝐨𝐠𝒏)
ビット列の補助データ
各ノードのポインタ
ビット列の保存領域
仕切り位置
ビット列の補助データ
ビット列の保存領域
25 / 67
• Wavelet matrix
𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈
+ 𝑶(𝐥𝐨𝐠𝝈 ⋅ 𝐥𝐨𝐠𝒏)
Wavelet matrixとの比較
• Wavelet tree
𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈
+𝑶(𝝈 𝐥𝐨𝐠𝒏)
0.00001
0.0001
0.001
0.01
0.1
1
10
100
1000
10000
1.0E+2 1.0E+3 1.0E+4 1.0E+5 1.0E+6 1.0E+7 1.0E+8 1.0E+9
O(σlogn) O(lognlogσ)Alphabet sizeσ
[MB]
26 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
①ビット列の構築値の1番目のビットを抽出ex. (4)10 = (100)2 : 1
(3)10 = (011)2 : 0
28 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
②系列データの安定ソートこのとき①で作成したビット列の値が
0であれば左へ1であれば右へ
移動する
29 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
③仕切り位置の記録ビット列の計算で出現した0の個数を仕切り位置として記録
7
30 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
④①に戻る高さlog 𝜎になるまで繰り返し
7
31 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
①ビット列の構築値の2番目のビットを抽出ex. (4)10 = (100)2 : 0
(3)10 = (011)2 : 1
7
32 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
②系列データの安定ソート0であれば左へ1であれば右へ
73 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
33 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
③仕切り位置の記録0の個数を仕切り位置として記録
7
7
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
34 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
④①に戻る高さlog 𝜎になるまで繰り返し
7
7
35 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
①ビット列の構築
7
7
36 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
0 4 4 2 2 6 1 1 1 5 3 7 7
②系列データの安定ソート
7
71 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
37 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
0 4 4 2 2 6 1 1 1 5 3 7 7
③仕切り位置の記録
6
7
71 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
38 / 67
Wavelet matrixの構築
• 例として次の系列について構築
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
0 4 4 2 2 6 1 1 1 5 3 7 7
7
7
6
39 / 67
Wavelet matrixの構築
1 1 1 1 0 0 0 0 0 0 1 0 1
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 0 1 0 1 0 0 1 0 1
𝑛 log𝜎
𝑜(𝑛 log𝜎)
7
7
6
𝑂 log𝑛 log𝜎
𝑛 log 𝜎 + 𝑜 𝑛 log 𝜎 + 𝑂(log 𝜎 ⋅ log 𝑛)
40 / 67
Wavelet matrixの各種計算量
• 構築時o時間: 𝑂(𝑛 log 𝜎)
o空間: 𝑛 log𝜎 +max(𝑛, 𝑜(𝑛 log 𝜎))
• 構築後o時間: 𝑂 log 𝜎
o空間: 𝑛 log𝜎 + 𝑜 𝑛 log 𝜎 + 𝑶(𝐥𝐨𝐠 𝝈 ⋅ 𝐥𝐨𝐠𝒏)
(再掲)Wavelet treeの空間計算量
𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈 + 𝑶(𝝈 𝐥𝐨𝐠𝒏)
41 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
42 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
答えは5になるはず
43 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
44 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 1, 4 = 4
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 0, 𝑛 = 仕切り位置 = 7
45 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 1, 4 = 4
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 0, 𝑛 = 仕切り位置 = 7
෨𝐵0[4]に位置する値は෩𝑩𝟏[11]になる
46 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
47 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵1, 0, 11 = 6
48 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵1, 0, 11 = 6
෨𝐵1[11]に位置する値は෩𝑩𝟐[6]になる
49 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
50 / 67
Wavelet matrixの利用
• 例:𝑎𝑐𝑐𝑒𝑠𝑠(𝑆, 4)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[4]の値
6
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
(101)2 =(5)10
51 / 67
Wavelet matrixの利用
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[1:10]に4が出現する回数
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
52 / 67
Wavelet matrixの利用
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[1:10]に4が出現する回数
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
答えは1になるはず
53 / 67
Wavelet matrixの利用
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
S[1:10]に4が出現する回数
54 / 67
S[1:10]に4が出現する回数
Wavelet matrixの利用
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 1, 10 = 4
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 0, 𝑛 = 仕切り位置 = 7
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 1, 0 = 0
55 / 67
S[1:10]に4が出現する回数• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
Wavelet matrixの利用
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
(4)10 = (100)26
7
7
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 0, 𝑛 = 仕切り位置 = 7
0 4 4 2 2 6 1 1 1 5 3 7 7
෨𝐵0[1:10]に含まれる4のビット列は෩𝑩𝟏[7+1:11]に含まれる
𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 1, 10 = 4𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 1, 0 = 0
56 / 67
Wavelet matrixの利用
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[1:10]に4が出現する回数
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
57 / 67
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10) S[1:10]に4が出現する回数
Wavelet matrixの利用
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵1, 0, 11 = 6𝑏_𝑟𝑎𝑛𝑘 ෨𝐵1, 0, 7 = 4
58 / 67
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10) S[1:10]に4が出現する回数
Wavelet matrixの利用
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵1, 0, 11 = 6
෨𝐵1[8:11]に含まれる4のビット列は෩𝑩𝟐[4+1:6]に含まれる
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵1, 0, 7 = 4
59 / 67
Wavelet matrixの利用
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[1:10]に4が出現する回数
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
60 / 67
Wavelet matrixの利用
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[1:10]に4が出現する回数
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵2, 0, 6 = 2𝑏_𝑟𝑎𝑛𝑘 ෨𝐵2, 0, 4 = 1
61 / 67
Wavelet matrixの利用
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[1:10]に4が出現する回数
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵2, 0, 6 = 2𝑏_𝑟𝑎𝑛𝑘 ෨𝐵2, 0, 4 = 1
෨𝐵2[5:6]に含まれる4のビット列は
𝒗[1+1:2]に含まれる
62 / 67
Wavelet matrixの利用
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
4 7 6 5 3 2 1 0 2 1 4 1 7
1 1 1 1 0 0 0 0 0 0 1 0 1
3 2 1 0 2 1 1 4 7 6 5 4 7
1 1 0 0 1 0 0 0 1 1 0 0 1
1 0 1 1 4 5 4 3 2 2 7 6 7
1 0 1 1 0 1 0 1 0 0 1 0 1
S[1:10]に4が出現する回数
(4)10 = (100)26
7
7
0 4 4 2 2 6 1 1 1 5 3 7 7𝑣
𝑆
෨𝐵0
෨𝐵1
෨𝐵2
63 / 67
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
Wavelet matrixの利用
𝑟𝑎𝑛𝑘 𝑆, 4,10 = 𝟐 − 1= 𝟏
S[1:10]に4が出現する回数
𝑣 0 4 4 2 2 6 1 1 1 5 3 7 7
64 / 67
• 例:𝑟𝑎𝑛𝑘(𝑆, 4,10)
Wavelet matrixの利用
𝑆のアルファベットサイズ 𝜎 = 8
S[1:10]に4が出現する回数
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵1, 0, 11 = 6
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 1, 10 = 4
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵2, 0, 6 = 2
𝑂(log 𝜎)
𝑶(𝐥𝐨𝐠𝝈)
𝑂(1)
𝑂(1)
𝑂(1)
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵1, 0, 7 = 4
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵0, 1, 0 = 0
𝑏_𝑟𝑎𝑛𝑘 ෨𝐵2, 0, 5 = 1
𝑂(log 𝜎)
𝑂(1)
𝑂(1)
𝑂(1)
65 / 67
Wavelet matrixの各種計算量(再掲)
• 構築時o時間: 𝑂(𝑛 log 𝜎)
o空間: 𝑛 log𝜎 +max(𝑛, 𝑜(𝑛 log 𝜎))
• 構築後o時間: 𝑶 𝐥𝐨𝐠𝝈
o空間: 𝑛 log𝜎 + 𝑜 𝑛 log 𝜎 + 𝑶(𝐥𝐨𝐠 𝝈 ⋅ 𝐥𝐨𝐠𝒏)
66 / 67
まとめ
• Wavelet matrixの提案o 空間計算量がWavelet treeより改善
o 時間計算量はWavelet treeと同等
o 実装が容易かつオーバーヘッドが少ない
時間計算量 空間計算量
Wavelet tree 𝑂 log𝜎 𝑛 log𝜎 + 𝑜 𝑛 log𝜎 + 𝐎(𝛔 𝐥𝐨𝐠𝐧)
Wavelet matrix 𝑂 log𝜎 𝑛 log𝜎 + 𝑜(𝑛 log𝜎) + 𝐎 𝐥𝐨𝐠𝛔 ⋅ 𝐥𝐨𝐠𝐧
67 / 67
Lab-EMon
• 電気系一号館電力可視化システムo 研究室単位での電力消費量を可視化
o 過去の電力消費量をアニメーションで閲覧可能
o 学内からのみアクセス可能・API提供有
http://localweb.ecei.tohoku.ac.jp/Lab-EMon/
69 / 67