狠狠撸

狠狠撸Share a Scribd company logo
ZDD
グラフをいじってみた
坂部 圭哉
ZDDの簡単な性質
● 組合せ集合を表す
例) {ab, ac, c} (全体はa b c)
●  への経路数が、
組合せ集合の組合せ数。
● 0, 1で非対称なグラフ
0 1
a
b
c
1
実装の概要
● も、子を持たないノードとして扱う。
● 各ノードは
1- 辺の先のポインタ
0- 辺の先のポインタ
1- 辺で接続された親のポインタの集合(std::set)
0- 辺で接続された親のポインタの集合(std::set)
を持つ。
● 1つのグラフは、一番上の頂点へのポインタで表
現される。
0 1
● 「0, 1で非対称なグラフ」
? 「0と1を入れ替えたら面白いかもしれない」
    と考えた。
発想
● 複数のものを選ぶ組み合わせの集合を表すZDDから、
選ばないものを選ぶ組み合わせの集合を表すZDDを
作ってみる。
例) 全体を a, b, c として、
もとの集合が{ab, ac, c}のときの{c, b, ab}
?これを「反転ZDD」と呼ぶことにする。
反転ZDD
反転ZDD
● あるZDDから、その反転ZDDを作るアルゴリズ
ムを考える。
反転ZDD
※入ってくる辺の種類は、上に依存
反転ZDD
0
※入ってくる辺の種類は、上に依存
0
反転ZDD
0
※入ってくる辺の種類は、上に依存
反転ZDD
● これらの作業を、上の頂点?辺から順に行うと
上手くいった。
● これらのことを行っただけでは、新たな等価接
点が生まれる可能性があり、既約ZDDは得られ
ない。
● 計算量は、O(V * N)くらい?(Nは要素数)
否定ZDD
● ある組み合わせ集合を表すZDDから、そこでふさわ
しくないとされる組み合わせの集合を表すZDDを
作ってみる。
例)全体をa, b, cとして、
{ab, ac, c}に対する{λ, a, b, bc, abc}
(λは空の組み合わせ)
?これを「否定ZDD」と呼ぶことにする。
否定ZDD
● あるZDDから、その否定ZDDを作るアルゴリズムを考え
る。
● まず、一番下の    と    を入れ替える。
● 次に、以下の操作を、上の頂点?辺から順に行う。
0 1
否定ZDD
※入ってくる辺の種類は、上に依存
変わらない
否定ZDD
1
※入ってくる辺の種類は、上に依存
否定ZDD
※入ってくる辺の種類は、上に依存
…特に
1 1
1
否定ZDD
● さらにその後、以下の処理を行う。
否定ZDD
※入ってくる辺の種類は、上に依存
00
0
?これらは、圧縮規則と同じ。
否定ZDD
● これらのことを行っただけでは、新たな等価接
点が生まれる可能性があり、既約ZDDは得られ
ない。
● 計算量は、O(V * N)くらい?(Nは要素数)
考察
● 否定ZDDの反転ZDDと、
反転ZDDの否定ZDDは、同じ(定義より)
考察
具体例1
反転
否定 否定
反転
0 1 0 1
0 1 0 1
{ab, ac, c} {c, b, ab}
{a, abc, b, bc, λ}
{bc, λ, ac, a, abc}
a
b
c
a
b
c
a
b
c
a
b
c
考察
具体例1について
● 下の2つのグラフの方が複雑
→下の方が、表している状態数が多いから?
他のグラフで試しても、表している状態数
が
多い方が複雑になる傾向が見られた。
● 反転しても、複雑さはあまり変わらない
考察
具体例2
反転
否定 否定
反転
0 1 0 1
{a, b, c, λ}
{bc, ac, ab, abc}
a
b
c
a
b
c
0 1
{a, b, c, λ}
a
b
c
0 1
{bc, ac, ab, abc}
a
b
c
考察
具体例2について
● 斜めにあるグラフどうしが同じ
→たまたま、表している組み合わせ集合が同じだから
● 右下?左上のグラフの方が、若干複雑
→選ぶ要素の数が多いから?
他のグラフで試しても、選ぶ要素の数が多いと、複雑
になる傾向が見られた。
まとめ
● 反転?否定すると、グラフの複雑さが変わることがあ
る。以下の場合、複雑になる傾向がある。
否定 : 表している組み合わせの数が多い
反転 : 選ぶ要素の数が多い
→反転?否定で得られる4つのZDDのうち、最も
単純であると思われるZDDを扱うのが良い。
● 反転?否定に関する、美しい性質は見つけられなかっ
た。(見つかると思っていたので悲しかった)
例) 反転(or否定)しても、○○の数が変わらない。
例) 反転も否定もしたZDDは、もとのZDDと○○が似てい
る。
● これよりも速いアルゴリズムがあるかもしれない。
以上で終わります。
ご清聴、ありがとうございまし
た。
Ad

Recommended

X hago2 shortcoding 20110827
X hago2 shortcoding 20110827
uskey512
?
翱辫别苍骋尝と行列
翱辫别苍骋尝と行列
miyosuda
?
Divisor
Divisor
Ken Ogura
?
AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説
AtCoder Inc.
?
関数の近似方法(惭础罢尝础叠)
関数の近似方法(惭础罢尝础叠)
Tsuyoshi Horigome
?
関数型プログラミングとモナド
関数型プログラミングとモナド
Masayuki Isobe
?
CG2013 06
CG2013 06
shiozawa_h
?
RUPC2014_Day2_K
RUPC2014_Day2_K
s1190048
?
kagamicomput201704
kagamicomput201704
swkagami
?
Replace
Replace
oupc
?
Cf219 d1e
Cf219 d1e
DEGwer
?
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
AtCoder Inc.
?
楕円曲线セキュリティー
楕円曲线セキュリティー
Jonathan Underwood
?
R_note_02_ver1.0
R_note_02_ver1.0
Satoshi Kume
?
贵#のすすめ
贵#のすすめ
Hiromu Sasaki
?
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
AtCoder Inc.
?
搁で学ぶ回帰分析と単位根検定
搁で学ぶ回帰分析と単位根検定
Nagi Teramo
?
Rの初歩: 6. グラフィックス
Rの初歩: 6. グラフィックス
Teiko Suzuki
?
Ikeph 2-20140730
Ikeph 2-20140730
GM3D
?
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
digitalghost
?
CG2013 11
CG2013 11
shiozawa_h
?

More Related Content

What's hot (18)

CG2013 06
CG2013 06
shiozawa_h
?
RUPC2014_Day2_K
RUPC2014_Day2_K
s1190048
?
kagamicomput201704
kagamicomput201704
swkagami
?
Replace
Replace
oupc
?
Cf219 d1e
Cf219 d1e
DEGwer
?
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
AtCoder Inc.
?
楕円曲线セキュリティー
楕円曲线セキュリティー
Jonathan Underwood
?
R_note_02_ver1.0
R_note_02_ver1.0
Satoshi Kume
?
贵#のすすめ
贵#のすすめ
Hiromu Sasaki
?
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
AtCoder Inc.
?
搁で学ぶ回帰分析と単位根検定
搁で学ぶ回帰分析と単位根検定
Nagi Teramo
?
Rの初歩: 6. グラフィックス
Rの初歩: 6. グラフィックス
Teiko Suzuki
?
Ikeph 2-20140730
Ikeph 2-20140730
GM3D
?
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
digitalghost
?
CG2013 11
CG2013 11
shiozawa_h
?

JOIss2015-ZDD @bekasa001