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
© Copyright 2024 ExpyDoc