lecture6

Advanced Data Structure
Lecture6
岩間研究室M1
太田圭亮
概要
• 動的連結性判定の下界 Ω(lg n)(Th.1)の証明
– Cell Probe Model の導入
– 対象とするグラフ:パスグリッド
– パスグリッドに対する操作
– Claim.2 の証明
• 時間木
• Claim.3 の証明
– 情報理論を用いた符号化
Cell Probe Model
• データ構造をwビットのセルの列としたモデル
– 1つのセルが、1つの頂点に対応
• このモデルでの計算量は、セルに対する読み
書きの回数のみで計る
パスグリッド
• √n × √n の格子(グリッド)状に頂点を並べる
• 隣り合う列の間には完全マッチングがある
・・・
・・・
・・・
・
・
・
・
・
・
・
・
・
・
・
・
・・・
パスグリッド
• 各列の間を渡る √n 個のdisjoint なパスをもつ
• πは隣り合う列を結ぶ枝の並び(=置換)
・・・
・・・
・・・
・
・
・
・
・
・
・
・
・
・
・
・
・・・
パスグリッドに対する操作
• パスグリッドに対して以下の操作を定義する
• UPDATE(i, π)
– i 番目の置換
を
で置き換える
• VERIFY_SUM(i, π)
– i 番目までの置換の合成が
と同じか判定
• これらパスに対する操作とセル探査に関して
最悪計算量で下界を考える
パスグリッドに対する操作
• UPDATE(i, π)
– i 番目の置換
を で置き換える
– O(√n)回の枝の削除と追加
UPDATE(2, π)
パスグリッドに対する操作
• VERIFY_SUM(i, π)
–
かどうかを判定する
– O(√n)回の連結性判定クエリ
VERIFY_SUM(2, π)
Claim 2
• √n 回のUPDATE + √n 回のVERIFY_SUMの最
悪計算量は
(cell probes)
• 成立するならば・・・
– 動的連結性判定は
• 1回のVERIFY_SUMに
アクセス列を組み合わせる
かかるよう
アクセス列の構成
• QUERYとUPDATEを交互に行うとする
• 引数を以下のように選ぶ
• UPDATE(π, i)のπ
– 一様ランダム
• VERIFY_SUM(π, i)のπ
– TRUEを返す正しい π
• i の順番
– ビット反転列
アクセス列の構成
• UPDATE(π, i)のπ
– 一様ランダム
– 操作SUM(i)の結果がランダムに変わる
• SUM(i)はVERIFY_SUM中で使われるサブルーチン
• i番目までの置換の合成
– 結果、次のVERIFY_SUMのセル探査回数が悪くな
る
アクセス列の構成
• VERIFY_SUM(π, i)のπ
– TRUEを返す正しいπ
– O(√n)のクエリ全てを実行する時が最もセル探査
回数が多くなる
• 途中でFALSEが返るとその時点で終了してしまう
アクセス列の構成
• i の順番
– ビット反転列
– n ビットの数を二進数で表示した後ビットを反転さ
せ、新たな数とする
0
1
2
3
00
01
10
11 ビットを
反転
00
10
01
11
0
2
1
3
時間木
• 入力列を完全二分木の葉に格納
• 左から右に時間に沿って並んでいる
0
4
2
6
1
5
3
7
時間
時間木
注目しているノードv
vの部分木より過去の部分木
Past Subtree
vの左部分木
Left Subtree
0
4
2
6
1
vの右部分木
Right Subtree
V
5
3
7
時間
ノードvの部分木の葉の数=
時間木
• 右部分木の各ノードは、左部分木で行われた
UPDATEについて知る必要がある
• 言い換えると、左部分木の操作で書き込まれ
たセルを読む必要がある
Claim 3
• 左部分木の間に書き込まれたセルを、右部
分木の操作が読む計算量は、期待値として
である
v
1
5
3
7
Claim 3
• 木の全ての階層に渡って足し合わせる
– Ω(lg n)階層
Claim 3
1操作当たりの
セル探査数
Claim 2
操作の数
v=root のとき
• 情報の符号化のアイデアを用いて証明する
情報理論を用いた証明
• 左部分木は
個のランダム置換で
UPDATEしている
• この置換をどのように符号化しても、
ビット必要(Kolmogorov複雑性の定理)
回
• 上記の置換の情報が得られるように、右部分
木のVERIFY_SUMの一部を同じ情報量で符号
化する
– 過去部分木の情報は既知とする
SUMでの証明
• R = {右部分木で読まれたセル}
• W = {左部分木で書かれたセル}
• R ∩ W を符号化する→左部分木のUPDATE
– |R ∩ W| ・ lg n ビット必要
• Claim3 が成立
VERIFY_SUMでの証明
• 設定
– R, W を同様に定義
– 過去部分木は既知
– 左部分木のUPDATEのπは未知
– 右部分木のQUERYのπは未知
• ただし、そのQUERYがTRUEを返すことは既知
• そのようにアクセス列を作っている
VERIFY_SUMでの証明
• SUMと同様にR ∩ W の符号化でよいか?
• QUERYの π も得る必要がある
– 右部分木の各 QUERY に対して、全ての置換の入
力をシミュレートする
– TRUEを返す π を選ぶ
• この方法はうまくいくか?
VERIFY_SUMでの証明
• FALSEを返すQUERYのシミュレートがアクセス
するセルをR’ (≠ R)とする
– セル
–
にアクセスしたとき、
か
か?
R’
W
R
VERIFY_SUMでの証明
• RやWを符号化すれば判定できるが、左部分
木の符号化のビット数を超えてしまう
• もっと安価な符号化で判定したい
– セパレータを導入する
セパレータ
• 全体集合 U, 自然数 m
• 任意の集合A, B⊂U, (|A|, |B|≦ m) に対して、
,
を満たす
が存在
する時、
をサイズmの集合に対する
セパレータ族という
U
A
• 定理:
–
ビットで符号化できる
B
VERIFY_SUMでの証明
• 符号化:R∩W + セパレータ
• 復号化: 読んでいるセルが最後にいつ書き
込まれたかで場合分け
–
–
–
–
(右部分木) : アクセスできる
(左部分木): 符号化した情報を使用
(過去部分木) : 既知
: Rに属さない→誤りなので中断して次へ
VERIFY_SUMでの証明
• 情報量
– R∩W + セパレータ(
–
–
–
、
)
の場合:Claim3が成立
の場合:
左右合計の操作数
Theo.1