lecture5

Advanced Data Structures
Lecture 5
発表者:後藤順一
目次

オイラー路木とは
Dynamic connectivity 問題の概観
他の動的グラフ問題の概観

HLT 法


目次

オイラー路木とは
Dynamic connectivity 問題の概観
他の動的グラフ問題の概観

HLT 法


オイラー路木 (Euler tour tree) (1)

(木に対する)オイラー路:木の周りを一周する路



どの枝も2度ずつ通る
オイラー路で訪れた順に平衡2分探索木(BST)に格納
各節点は最初と最後に訪れた所へのポインタを持つ
ABCDCECB・・・・A
2分探索木に格納
・・・
A
D
B
J
C
B
C
F
K
A
D
E
G
H
I
L
C
E
オイラー路木 (Euler tour tree) (2)

3つの基本操作

find root(v) :節点v の根を見つける
cut(v) :節点v とその親の間の枝を削除
link(v, w) :根である節点v を、節点w の新しい子として追加

BST に対する操作を定数回ずつ使っている。



これらは Olg n の時間でできる
Euler tour tree の find root(v)

v が含まれる木の根を見つける

BST の最小(or 最大)の節点を返せばよい
a
a・・・v・・・v・・・a
v
findroot
a
Euler tour tree の cut(v)

節点 v を親の節点から切り離す。

v の最初と最後に訪れた節点を切り離し、その前後を繋げる
a
a・・・v・・・v・・・a
× cut
v
cut
a・・・・・・a
v・・・v
Euler tour tree の link(v, w)

根である節点 v を、節点 w の新たな子とする

w の木を、w を最後に訪れる前の部分で分け、「w の前」「w」
「v の木」「w以降」を繋げる。
a
link
v
a・・・w・・・w・・・a
v・・・v
link
w
a・・・w・・・wv・・・vw・・・a
Euler tour tree

Euler tour tree では、各節点に定数領域の記憶を持た
せることにより、自らの子サブツリーに対する演算を記憶
することができる。




演算:和、最小値、最大値、etc.
cut , link の操作中に書き換える。
計算時間 Olg n を保ったまま。
後に紹介する HLT 法では、この性質を用いて拡張する。
目次

オイラー路木とは
Dynamic connectivity 問題の概観
他の動的グラフ問題の概観

HLT 法


Dynamic Connectivity:問題の説明


無向グラフが繋がっているかどうかを判定する。
普通のグラフとの違い



記憶領域量や、挿入、削除時にかかる時間を多少犠牲にして、
検査にかかる時間を短くする。
2点(v, w) 間の問題
グラフ G 上の問題
Dynamic Connectivity:概観 (1)

次の上界や未解決問題がある。


埋め込み固定の平面に対して
更新、クエリともに Olg n [Eppstein et al. 92]
OPEN: 一般のグラフに Olg n でできるか?
Dynamic Connectivity:概観 (2)

一般のグラフに対するならし計算量
3
 更新に Olg n(lg lg n) 、クエリに Olg n / lg lg lg n


[Thorup 00]
更新に O lg n ,クエリに Olg n / lg lg n [Holm et al. 01]
→HLT法
 Ox lg n の更新には lg n / lg x のクエリが必要、
Ox lg n のクエリには lg n / lg x の更新が必要

2
[Patrascu et al. 04]

ワーストケースの計算量
 更新に O n 、クエリ O1[Eppstein et al. 97]
 
Dynamic Connectivity:単純化

incremental :挿入のみ

ならし計算量:O (n)


最悪計算量:


 n は逆アッカーマン関数
x の更新には lg n / lg xのクエリ計算量が必要
( x  1)
decremental : 削除のみ
 更新に Om lg n  n  poly (lg n) 、クエリ計算量 O1
(m : 枝の数)[Thorup 99]
目次

オイラー路木とは
Dynamic connectivity 問題の概観
他の動的グラフ問題の概観

HLT 法


他の dynamic graph problem (1)

最小全域木問題
•
•
•

O(lg 4 n)の更新[Holm et al. 01]
ワーストケースで O ( n ) の更新[Eppstein et al. 97]
埋め込み固定グラフで O (lg n) [Eppstein et al. 92]
二部性検査
•
最小全域木問題に還元できる
他の dynamic graph problem (2)

平面性検査
•
O n 2 / 3 [Galil et al. 97]
 
•
•
•


埋め込み固定 : O lg 2 n [Eppstein et al. 97]
incremental : Om   m, n  n [la Poutre 94]
OPEN: fixed minor に対する検査
他の dynamic graph problem (3)

2点間の k-連結性



k  2 に対して、 O poly lg n [Holm et al. 01]
planar decremental で 3-枝連結 Olg 2 n  [Giammaresi et al. 96]
worst case:






[Eppstein et al. 97]
2-枝連結: O n
2-点連結、3-点連結:On 
3-枝連結: On 2 / 3 
k=4: On   (n)
O1 枝連結:On lg n
OPEN:
か?
 
k  O1, poly (lg n)
に対して
O( poly (lg n))
でできる
他の dynamic graph problem (4)

グラフ全体の k-連結性

O( poly (lg n)) -枝連結: O( n  poly (lg n)) [Thorup 01]


最小カットは O( poly (lg n)) のサイズ
OPEN: k  O1, poly (lg n) に対して O( poly (lg n)) でできる
か?
目次

オイラー路木とは
Dynamic connectivity 問題の概観
他の動的グラフ問題の概観

HLT 法


HLT 法:概要

Dynamic connectivity に対するデータ構造。
[Holm, de Lichtenberg, Thorup 2001]

グラフにできる操作は、枝の挿入、削除のみ。




節点の挿入・削除は考えない
初期状態では、グラフ中に枝がないものとする。
query: Olg n / lg lg n
update: O lg 2 n


HLT 法に入る前に



グラフを扱うための準備。
オイラー路森に対して、
次のような操作も Olg n でできる。

木の根を変える:change root(v)

木の中の枝を削除:delete(e=(v, w))


v
delete
どちらが親か分からなくてもよい。
木を繋ぐ枝の挿入:insert(e=(v, w))

w
根でなくてもよい。
v
w
insert
HLT 法:データ構造

アイデア


枝を lg n レベルの階層に分け、各レベル以下の枝からなる
グラフのスパニング森をオイラー路木に格納する。
lg n 個のオイラー路森と、グラフの隣接リストを記憶する。
0
グラフ
1
lgn
・・・・・
↓
スパニング森
・・・・・
↓
オイラー路森
・・・・・
HLT 法:定義

各枝に対して、レベルを定義する。


Gi :レベルが i以下の枝からなるサブグラフ


枝をグラフに張ったときに lg n 、時間とともに減少。
i
2
Invariant 1: 繋がっている部品の節点数はどれも
以下
Fi : Giのスパニング森
 Flg n が全体のグラフ G のスパニング森

Invariant 2: F0  F1    Flg n 、すなわち Fi  Flg n  Gi
つまり Flg n は枝のレベルを重みとした最小スパニング森
(cf. Kruskal のアルゴリズム)
HLT 法: クエリ計算量

問い合わせに速く答えるため、 Flg n のオイラー路森を収
める木を変える。

B 木(度数 Olg n )




lg n
深さ Olg n / lg lg n、枝の張り替えに O
find root : Olg n / lg lg n
( 更新: Olg 2 n / lg lg n )
グラフの連結性を調べる
には、2つの節点に対して
find root を用いればよい。
オイラー路木 (Euler tour tree) (1)(再掲)

(木に対する)オイラー路:木の周りを一周する路



どの枝も2度ずつ通る
オイラー路で訪れた順に平衡2分探索木(BST)に格納
各節点は最初と最後に訪れた所へのポインタを持つ
ABCDCECB・・・・A
2分探索木に格納
B木に格納
・・・
A
D
B
J
C
B
C
F
K
A
D
E
G
H
I
L
C
E
HLT 法: insert の例


スパニング森に対する操作を見る。
insert(e=(A, B))



A と B は既に繋がっているため、ス
パニング森に対しては何もしない。
隣接行列に記憶するのみ。
insert(e=(D, G))



D と G が繋がっていないため、スパ
ニング森にも枝を張る。
レベルは最大のものを使う (lg n)。
Flg n のみに枝を追加する。
C
B
A
3
4
1
E
D
2
4
3
H
G
F
4
I
2
J
Flg n
HLT 法: insert

insert(e=(v, w))
1.
2.
3.


v と w が繋がっているか?




e を v と w の隣接リストに追加する。
e のレベルを lg n とする。
Flg n で v と w が繋がっていなかったら
e を Flg n に加える。
終。
それぞれに対して find root を用いれば良い。
find root: Olg n / lg lg n
枝の追加: Olg n
Olg n
v
e
w
Flg n
HLT 法: delete の例 (1)


スパニング森に対する操作を見る。
delete(e=(A, B))


スパニング森に含まれていないため、
何もしない。
隣接行列から削除するのみ。
C
B
A
3
4
1
E
D
2
4
3
H
G
F
4
I
2
J
Flg n
HLT 法: delete の例 (2)

delete(e=(D, F))




スパニング森から枝を削除する。木
が2つに分けられる。
D の木と F の木は、レベル3 以上の
他の枝により繋がっている可能性が
ある。
他の枝があれば、それによってスパ
ニング森を再構築する。
HLT 法の delete 中では、代わりの枝
を探すときに、さらに別の作業も行う。
C
B
A
3
4
1
E
D
4
3
2
4
(3)
H
G
F
4
I
2
J
Flg n
HLT 法: delete (1) 全体

delete(e=(v, w))
1.
2.
e を v と w の隣接リストから削除する。
e が Flg n にあるなら、
 e を Flevel ( e ) , , Flg n から削除。




v と w を繋げる代わりの枝を探す。
終。
代わりの枝のレベルは消される枝 e のレベル以上。
あり得る中でレベルが最小のものを探す。

Invariant 2 (最小スパニング木)を保守するため
HLT 法: delete (2) 枝探し

枝探しは次のように行う。

for i=level(e), … , lg n



Tv を Fi 中で v を含む木とする。
Tv  Tw となるように v と w を入れ替える。(⇒拡張1)
x が Tv にある、レベルが i の枝 (x, y) に対して (⇒拡張2)

if y が Tw に含まれていれば
 (x, y)


を Fi , , Flg n に加えて終了。
else 枝(x, y) のレベルを i -1 にする。(charge)
枝探しと同時に、 v 側の枝
のレベルを下げている。
v
w
HLT 法: delete (2) 枝探し・レベル下げ

Invariant 1: Gi で繋がっている部品の節点数はどれも

枝のレベルを下げて良いのか?
2i 以下
i
と
の節点の和は
以下
2
Tv Tw
i 1
 Tv  Tw より、T の節点数は 2
以下
v
 したがって、 Tv と Tw が繋がっていない場合、
Tv 中の枝の最大レベルは i-1 で良い。

v
w
HLT 法: delete (3) オイラー路木の拡張

オイラー路森の各節点の記憶領域を拡張する。

拡張1:サブツリーのサイズ
 Tv と Tw の節点数を O1 で比較する。

拡張2:サブツリーがレベルi の枝と繋がっている節
点を含んでいるか (true/false)
 Tv 中の節点 x に繋がっている、次のレベル i の枝を Olg n
で探すことができる。
HLT 法: delete (4) 計算量




最初に枝の削除をするのに O lg 2 n
 1つの枝削除に Olg n 、それを lg n 回以下

2
O
lg
n
枝探しに



次の枝を探すのに Olg n 、それを charge の回数だけ繰り返す。
各枝が charge されるのは lg n 回以下


代わりの枝がある場合、枝の追加に O lg 2 n

2
O
lg
n
したがって、全体でも


