論文紹介:The wavelet matrix

69
The wavelet matrix : An efficient wavelet tree for large alphabets Francisco Claude, Gonzalo Navarro, Alberto Ordóñez Information Systems Volume 47, January 2015, Pages 15–32 発表者: 篠原・吉仲研究室 五十嵐 祐貴 1

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が出現した時間

14 / 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の問題点

•空間計算量

𝒏 𝐥𝐨𝐠𝝈 + 𝒐 𝒏 𝐥𝐨𝐠𝝈 + 𝑶(𝝈 𝐥𝐨𝐠𝒏)

ビット列の補助データ

ノード間のポインタビット列の保存領域

22 / 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

27 / 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の個数を仕切り位置として記録

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 𝜎になるまで繰り返し

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

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の個数を仕切り位置として記録

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 𝜎になるまで繰り返し

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

①ビット列の構築

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

②系列データの安定ソート

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

③仕切り位置の記録

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]の値

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]の値

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]の値

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]の値

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]の値

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]の値

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]の値

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]の値

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]の値

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]の値

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

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

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

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

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

𝑏_𝑟𝑎𝑛𝑘 ෨𝐵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

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

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

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

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

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

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

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

付録

68

Lab-EMon

• 電気系一号館電力可視化システムo 研究室単位での電力消費量を可視化

o 過去の電力消費量をアニメーションで閲覧可能

o 学内からのみアクセス可能・API提供有

http://localweb.ecei.tohoku.ac.jp/Lab-EMon/

69 / 67