フロンティア法 - 組合せ問題の解を列挙索引化するZDD構築アルゴリズム

Slides:



Advertisements
Similar presentations
組合せ最適化輪講 2.3 連結性 川原 純. 2.3 連結性 内容 – グラフ上の節点をすべてたどるアルゴリズム 計算機上でのグラフの表現 – 強連結成分を求めるアルゴリズム トポロジカル順序を求める方法も – k- 連結、 k- 辺連結について – 2- 連結グラフの耳分解について.
Advertisements

模擬国内予選2013 Problem F テトラ姫のパズル 原案:須藤 解答:大友、須藤 解説:須藤.
あみだくじを数え上げる 省領域アルゴリズム ◯中嶋章裕,斎藤寿樹,山口一章,増田澄男 (神戸大学) 1.
エンティティ・リレーションシップ・モデル
到着時刻と燃料消費量を同時に最適化する船速・航路計画
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
2009/12/4 グラフ (2) 第10講: 平成21年12月4日 (金) 4限 E252教室 コンピュータアルゴリズム.
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
Bipartite Permutation Graphの ランダム生成と列挙
極小集合被覆を列挙する 実用的高速アルゴリズム
ネットワーク理論講義補助資料 Text. 組合せ最適化とアルゴリズム 4.5 節 主・双対法 pp
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
ラベル付き区間グラフを列挙するBDDとその応用
フロンティア法 - 組合せ問題の解を列挙索引化するZDD構築アルゴリズム
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
    有限幾何学        第8回.
On the Enumeration of Colored Trees
An Algorithm for Enumerating Maximal Matchings of a Graph
Permutationグラフと Distance-Hereditaryグラフの 再構築アルゴリズム
組合せ最適化 輪講 第1回 ERATO研究員 川原 純.
Extremal Combinatrics Chapter 4
宇野 毅明 国立情報学研究所 2002年3月 東北大大学院 情報科学研究科ワークショップ
システム開発実験No.7        解 説       “論理式の簡略化方法”.
データ構造とアルゴリズム 第6回の2 木 ~ データ構造(3)~.
第11講: 平成18年12月 8日 (金) 4限 E352教室 グラフ (1).
第4章 空間解析 2.ネットワーク分析 (3) ネットワーク構造分析
s a b f c e d 2016年度 有限幾何学 期末試験 問1:15点
5.5 The Linear Arboricity of Graphs (グラフの線形樹化数)
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.
シャノンのスイッチングゲームにおけるペアリング戦略について
遺伝的アルゴリズムへの 統計力学的アプローチ 大阪大学 大学院理学研究科 鈴木譲 CISJ2005 於早稲田大学理工学部
PROGRAMMING IN HASKELL
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
b f c a d e g h a b c d e f g 図1 図2 2012年度 有限幾何学 期末試験
First Course in Combinatorial Optimization
決定木 Decision Tree DT 明治大学 理工学部 応用化学科 データ化学工学研究室 金子 弘昌.
A Simple Algorithm for Generating Unordered Rooted Trees
離散数学 07. 木 五島.
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
情報生命科学特別講義III (13) 固定パラメータアルゴリズムと 部分k木
絡み目の不変量 カウフマンブラケット多項式 の効率的な実装
色塗りゲームとゲームカラーリング数 慶應義塾大学大学院 理工学研究科   関口 陽介.
九州大学大学院 情報学専攻特別講義 (6) 固定パラメータアルゴリズムと 部分k木
2016年度 有限幾何学 中間試験 問1 次のグラフを描け.(描けない場合は理由を述べよ) 各20点
14. The Basic Method M1 太田圭亮 14.3 Spaces of polynomials
ベイジアンネットワーク概説 Loopy Belief Propagation 茨城大学工学部 佐々木稔
JAVAバイトコードにおける データ依存解析手法の提案と実装
重み付き投票ゲームにおける 投票力指数の計算の高速化
離散数学 06. グラフ 序論 五島.
Max Cut and the Smallest Eigenvalue 論文紹介
アルゴリズムとデータ構造 2011年6月16日
情報工学概論 (アルゴリズムとデータ構造)
2009/11/27 グラフ (1) 第9講: 平成21年11月27日 (金) 4限 E252教室 コンピュータアルゴリズム.
アルゴリズムとデータ構造 第2章 リスト構造 5月24日分
分枝カット法に基づいた線形符号の復号法に関する一考察
ヒープソート.
生命情報学特論 (6) 固定パラメータアルゴリズムと 部分k木
コストのついたグラフの探索 分枝限定法 A*アルゴリズム.
卒業研究 Treedecompositionを生成するヒューリスティックアルゴリズムの幅に関する評価実験
卒業研究 木分解ヒューリスティック アルゴリズムの性能評価実験 ~アルゴリズムの改良の考察と そのプログラム作成~
アルゴリズムとデータ構造 2013年6月20日
13.近似アルゴリズム.
MPIを用いた 並列処理 情報論理工学研究室 06‐1‐037‐0246 杉所 拓也.
グラフの列挙 中野 眞一    (群馬大学) 2019/9/14 列挙学校.
生物情報ソフトウェア特論 (10)固定パラメータアルゴリズムと 部分k木
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
Presentation transcript:

フロンティア法 - 組合せ問題の解を列挙索引化するZDD構築アルゴリズム 川原 純 科学技術振興機構 ERATO湊離散構造処理系プロジェクト 北海道大学 情報科学研究科

列挙問題 例:グラフ上の2点間のパスを列挙 s t 既存の 列挙Alg. 列挙結果は1つずつ出力

列挙結果を1つずつ出力すると… 保存ができない 欲しい解を検索、絞り込みが難しい 活用が難しい s … t 17×17 グリッドグラフ 6344814611237963971310297540795524400449443986866480693646369387855336 = 6.3 × 1061 = 約 63 那由多 個 s t … 17 辺 p, q を使用、辺 r を使用していないパスをすべて列挙 長さ最小のものは? 数え上げ、ランダムサンプリング等

列挙結果の保存・活用 ZDD: 集合の集合をDAGで表したデータ構造 s t 全 s-t パスを表す ZDD 展開 Alg. (一様)ランダムサンプリング … 数え上げ 重み最小の要素を計算 展開 検索、絞り込み 全 s-t パスを表す ZDD 6×1061個のパスが ノード数4×108 個の ZDDに圧縮

列挙結果の検索・絞り込み % e ∩ ZDDには様々な代数演算が用意されている ある辺 e を通らないパスの集合 圧縮したままの演算が可能 単に列挙だけでなく、列挙結果の活用が可能となる → 列挙索引化 % e 制約A: 例えば、要素数が 10個以下 ∩ 全s-t パスを 表すZDD 制約Aを 表すZDD 制約Aを満たす 全s-tパスを表すZDD

本発表の内容 パス列挙(ZDD構築)アルゴリズム [D.Knuth 08] Tutte多項式計算アルゴリズム [K.Sekine, H.Imai 95] (見かけは異なるが、) 本質的に同じアルゴリズム → 様々な対象について、ZDDを構築可能 → フロンティア法として汎用化 本質的に何が必要かを抽出 フロンティア法によって ZDD構築可能な問題を整理

ZDD: 集合の集合を表現するデータ構造 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 e3 e4 e5 e3 e5 (Zero-suppressed Binary Decision Diagram) [S.Minato 93] 1 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 { { } { } { } , , e3 e4 e5 e3 e5 e5 { } { } { } } , , 集合の集合 ZDD

ZDD: 集合の集合を表現するデータ構造 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 e3 e4 e5 e3 e5 1 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 { { } { } { } , , e3 e4 e5 e3 e5 e5 { } { } { } } , , 集合の集合 : 0 終端 それぞれ1つずつもつ 1 : 1 終端 ZDD ei e1 e5 : ノード ~ いずれかのラベル e1 , e2 ,… , e5 の順序

ZDD: 集合の集合を表現するデータ構造 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 e3 e4 e5 e3 e5 ノードは0枝と1枝を1つずつもつ 1 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 { { } { } { } , , e3 e4 e5 e3 e5 e5 { } { } { } } , , 集合の集合 : 0 終端 それぞれ1つずつもつ 1 : 1 終端 ZDD ei e1 e5 : ノード ~ いずれかのラベル e1 , e2 ,… , e5 の順序

ZDD: 集合の集合を表現するデータ構造 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 e3 e4 e5 e3 e5 ノードは0枝と1枝を1つずつもつ 1 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 { { } { } { } , , e3 e4 e5 e3 e5 e5 { } { } { } } , , 集合の集合 1つの集合が、 top から までの1本のパスに対応 1 ZDD : 0 終端 それぞれ1つずつもつ 1 : 1 終端 ei e1 e5 : ノード ~ いずれかのラベル

ZDD: 集合の集合を表現するデータ構造 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 e3 e4 e5 e3 e5 ノードは0枝と1枝を1つずつもつ 1 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 { { } { } { } , , e3 e4 e5 e3 e5 e5 { } { } { } } , , 集合の集合 1つの集合が、 top から までの1本のパスに対応 1 ZDD : 0 終端 それぞれ1つずつもつ 1 : 1 終端 ei e1 e5 : ノード ~ いずれかのラベル

ZDD: 集合の集合を表現するデータ構造 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 e3 e4 e5 e3 e5 ノードは0枝と1枝を1つずつもつ 1 e1 e2 e3 e4 e5 e1 e2 e5 e2 e4 e5 { { } { } { } , , e3 e4 e5 e3 e5 e5 { } { } { } } , , 集合の集合 1つの集合が、 top から までの1本のパスに対応 1 ZDD : 0 終端 それぞれ1つずつもつ 1 : 1 終端 ei e1 e5 : ノード ~ いずれかのラベル

ZDDの性質 e1 e1 1 1 e2 e2 e2 e3 e3 e4 e4 e5 e5 1 1 等価な2つのノードは必ず共有される

パスは辺の集合で表現できる e1 e4 s t e3 e2 e5 e1 e1 e4 e4 s t s t e3 e3 {e1, e4}

パスは辺の集合で表現できる e1 e4 全ての s-t パスを列挙して、 s t e3 辺集合の集合で表す e2 e5 e1 e1 e4

パスは辺の集合で表現できる e1 e4 s t 全ての s-t パスを列挙して、 e3 辺集合の集合で表す e2 e5 all s-t path = {{e1, e4}, {e2, e5}, {e1, e3 ,e5}, {e2, e3 ,e4}} e1 e4 e1 e4 s t s t e3 {e1, e4} e3 {e2, e5} e2 e5 e2 e5 e1 e1 e4 e4 s t s t e3 e3 {e2, e3 ,e4} {e1, e3 ,e5} e2 e2 e5 e5

Knuth のパス列挙アルゴリズム 全 s-t パスを表現する ZDD をトップダウン的に構築 ZDD

パス列挙(ZDD構築)アルゴリズム [Knuth 08] e1 e4 e1 e1 = 1 e1 = 0 s t e3 e2 e2 e2 = 0 e2 = 1 e2 = 0 e2 = 1 e2 e5 e3 e3 e3 e3 1 1. 辺に順番を付ける (例えば、s から幅優先) e4 (もっと良い方法もあり) e5 2. ZDDを構築 辺 e1, e2,… の順に処理 s-t パスになっている 1 s e1 t e2 e3 e4 e5 各辺変数 ei に対し、 ei = 0 or 1 を決めていく ei = 1 である辺が s-t パスになっているか?

パス列挙(ZDD構築)アルゴリズム [Knuth 08] e1 e4 e1 e1 = 1 e1 = 0 s t e3 e2 e2 e2 = 0 e2 = 1 e2 = 0 e2 = 1 e2 e5 e3 e3 e3 e3 1 1. 辺に順番を付ける (例えば、s から幅優先) e4 (もっと良い方法もあり) e5 2. ZDDを構築 s-t パスに なっていない s-t パス + 余分な辺 辺 e1, e2,… の順に処理 s e1 t e2 e3 e4 e5 s e1 t e2 e3 e4 e5 各辺変数 ei に対し、 ei = 0 or 1 を決めていく ei = 1 である辺が s-t パスになっているか?

パス列挙(ZDD構築)アルゴリズム [Knuth 08] e1 e4 e1 e1 = 1 e1 = 0 s t e3 e2 e2 e2 = 0 e2 = 1 e2 = 0 e2 = 1 e2 e5 e3 e3 e3 e3 1 1. 辺に順番を付ける (例えば、s から幅優先) e4 (もっと良い方法もあり) e5 2. ZDDを構築 辺 e1, e2,… の順に処理 1 1 1 1 他は0 各辺変数 ei に対し、 ei = 0 or 1 を決めていく 1 が1つのパスに対応

パス列挙(ZDD構築)アルゴリズム [Knuth 08] e1 e3 e1 e1 = 1 e1 = 0 s t e2 e2 e2 = 0 e2 = 1 e2 = 0 e2 = 1 e2 e4 e3 e3 e3 1 1

パス列挙(ZDD構築)アルゴリズム [Knuth 08] e1 e3 e1 e1 = 1 e1 = 0 s t e2 e2 e2 = 0 e2 = 1 e2 = 0 e2 = 1 e2 e4 e3 e3 1 ノードを共有できるときは共有したい ただし、子DAGを作成せずに、共有可能か判定を行う

mate 配列 パス列挙(ZDD構築)アルゴリズム [Knuth 08] 接続情報の記憶法 2 e1 e4 i 1 2 3 4 1 4 e3 1 2 3 4 1 4 e3 mate[i] 3 0 1 4 e2 e5 頂点がパスの端 逆端の番号 3 頂点がパスの途中 頂点がいずれの パスにも含まれない 自身の番号

mate 配列 パス列挙(ZDD構築)アルゴリズム [Knuth 08] e1 e4 接続情報の記憶法 2 1 4 i 1 2 3 4 e3 1 2 3 4 e3 mate[i] 3 0 1 4 3 e2 e5 頂点がパスの端 逆端の番号 頂点がパスの途中 [1, 2, 3, 4] 頂点がいずれの パスにも含まれない 自身の番号 e1 e1 = 1 e1 = 0 [1, 2, 3, 4] [2, 1, 3, 4] e2 [2, 1, 3, 4] e2 [1, 2, 3, 4] [3, 2, 1, 4] e3 e3 e3 … [4, 0, 0, 1] [4, 0, 0, 1] e4 e4 mate 配列が一致すれば共有可能

パス列挙(ZDD構築)アルゴリズム [Knuth 08] e1 e4 接続情報の記憶法 2 1 4 i 1 2 3 4 e3 mate[i] 1 2 3 4 e3 mate[i] 3 0 1 4 3 e2 e5 頂点がパスの端 逆端の番号 頂点がパスの途中 頂点がいずれの パスにも含まれない 自身の番号 一般に c d a b ex ex a b c d c d a b ex+1 a b c d 0 0 d c 最大4か所書きかえれば更新できる

パス列挙(ZDD構築)アルゴリズム [Knuth 08] 未処理 処理済み 接続情報の記憶法 s t mate 配列はすべての頂点について 記憶する必要はない 5 5 s t s t 7 1 7 1 処理済みの辺と 未処理の辺の 両方が接続している 頂点集合を フロンティアという 6 6 e8 e8 等価 i 5 6 7 i 5 6 7 mate[i] 7 1 5 mate[i] 7 1 5 フロンティア上のmate値のみ記憶、比較

パス列挙(ZDD構築)アルゴリズム [Knuth 08] 5 6 7 i mate[i] 1 6 7 s t 7 6 5 1 s-tパスが 完成 に接続 mate 配列を用いると、枝刈りも容易に可能 フロンティア 5 mateを見れば 分岐が生じることが 判定できる t s 1 7 に接続 6 i 5 6 7 s t 7 6 5 1 s-tパス + 余計な辺 に接続 5 6 7 i mate[i] 1 7 6 mate[i] 0 6 1

パス列挙アルゴリズム [Knuth 08] パス列挙の場合の 固有の処理

実験結果 日本地図グラフ 北海道から鹿児島までの全パス 日本地図 47 0.01秒 951 1.4 × 1010 2重化 94 頂点数 計算時間 ZDDノード数 パスの数 日本地図 47 0.01秒 951 1.4 × 1010 2重化 94 248.72秒 18,971,787 5.0 × 1044 14797272518 本 5039760385115189594214594926092397238616064 本 (= 503正9760澗3851溝1518穣9594杼2145垓9492京6092兆3972億3861万6064)

実験結果 n × n グリッド n n 構築時間(秒) 15 206.0 16 701.9 17 2326.0 18 7607.1 19 ・・・ n 実験結果 n × n グリッド n 構築時間(秒) 15 206.0 16 701.9 17 2326.0 18 7607.1 19 28279.2 20 91944.1 21 284117.0 Thanks to 岩下洋哲氏

ZDD と集合族 集合の集合(集合族)は ZDD で効率よく保持できる a 1 b b {{a, b, c, d}, {a, c}, {b, d}, {b, c}} c c c d d d 1 1 1 1 は省略

ZDD と集合族 集合族への操作例: a を含む集合だけを取り出し、a を消去する {{a, b, c, d}, {a, c}, {b, d}, {b, c}} {{b, c, d}, {c}} a を含まない集合だけ 取り出すなら、LO 枝側を もってこればよい a 1 b b b c c c c c d 1 d d d 1 1 1 1 1 トップの要素なら簡単にできる

ZDD と集合族 集合族への操作例: c を含む集合だけを取り出し、c を消去する {{a, b, c, d}, {a, c}, {b, d}, {b, c}} {{a, b, d}, {a}, {b, d}} a a 1 1 b b b b c c c c c c d d d d 1 d d 1 1 1 1 1 1 1 トップでなければ、その変数の深さまで潜って、 枝の付け替えを行う

ZDD と集合族 集合族への操作例: c を含む集合だけを取り出し、c を消去する {{a, b, c, d}, {a, c}, {b, d}, {b, c}} {{a, b, d}, {a}, {b, d}} c を含まない集合だけ 取り出すなら、LO 枝の 方に付け替えればよい a a 1 1 b b b b c c c c c c d d d 1 d d 1 d 1 1 1 1 1 1 トップでなければ、その変数の深さまで潜って、 枝の付け替えを行う

ZDD と集合族 集合族への操作例: e を各要素に追加する {{a, b, c, d}, {a, c}, {b, d}, {b, c}} {{a, b, c, d, e}, {a, c, e}, {b, d, e}, {b, c, e}} e a 1 a b b b b c c c c c c d d d 1 d d d 1 1 1 1 1 1 1 トップに加える場合

ZDD と集合族 集合族への操作例: e を各要素に追加する {{a, b, c, d}, {a, c}, {b, d}, {b, c}} {{a, b, c, d, e}, {a, c, e}, {b, d, e}, {b, c, e}} a a 1 b b b b c c c c c c e e e e d d d 1 d d d 1 1 1 1 1 1 1 間に加える場合

∩ ZDD と集合族 {{a, b, c, d}, {{a, b, c, d}, {a, b}, {b, d}, {b, c}} {{a, b, c, d}, {a, b}, {b, d}, {c, d}} {{a, b, c, d}, {b, d}} 様々な集合演算が効率よく実行可能 (再帰を用いたアルゴリズム)

列挙結果の検索・絞り込み(再掲) % e ∩ ZDDには様々な代数演算が用意されている ある辺 e を通らないパスの集合 制約A: 例えば、要素数が 10個以下 ∩ 全s-t パスを 表すZDD 制約Aを 表すZDD 制約Aを満たす 全s-tパスを表すZDD

解の数え上げ a 1 {d}, {c}, {c, d}, {b}, {b, d}, {b, c, d}, 13 a 1 6 7 {d}, {c}, {c, d}, {b}, {b, d}, {b, c, d}, {a}, {a, d}, {a, c, d}, {a, b}, {a, b, c}, {a, b, d}, {a, b, c, d} b b 3 4 3 c c c d d 1 2 1

一様ランダムサンプリング 確率 確率 a a 1 b b b b c c c d d {d}, {c}, {c, d}, 13 7 13 13 6 13 a a 1 6 7 6 7 b b b b 3 4 3 c c c d d 1 2 {d}, {c}, {c, d}, {b}, {b, d}, {b, c, d}, {a}, {a, d}, {a, c, d}, {a, b}, {a, b, c}, {a, b, d}, {a, b, c, d} 1

一様ランダムサンプリング 確率 確率 a 1 b b b c c c c c d d {d}, {c}, {c, d}, 13 確率 確率 a 1 6 3 6 3 6 b 6 7 b b 3 3 3 4 3 c c c c c d d 1 2 {d}, {c}, {c, d}, {b}, {b, d}, {b, c, d}, {a}, {a, d}, {a, c, d}, {a, b}, {a, b, c}, {a, b, d}, {a, b, c, d} 1

一様ランダムサンプリング {b, d} a 1 b b c c c d d {d}, {c}, {c, d}, 13 a 1 6 7 b b 3 4 3 c c c d d 1 2 {d}, {c}, {c, d}, {b}, {b, d}, {b, c, d}, {a}, {a, d}, {a, c, d}, {a, b}, {a, b, c}, {a, b, d}, {a, b, c, d} 1

フロンティア法とは トップダウンにZDDを構築する技法 e1 e1 = 1 フロンティア e1 = 0 5 e2 e2 e2 = 0 t s 1 e3 e3 7 1 6 i 5 6 7 ノードを共有できるときは共有したい mate[i] 0 6 1 フロンティア上に 何らかの情報を持たせて、 共有可能性と枝刈りを判定 一般化して configuration と呼ぶ

辺変数型 パス型 森型 頂点変数型 グラフ ハイパー グラフ フラグ型 クリーク 頂点被覆 0-1 ナップザック 頂点彩色 マトロイド [Knuth 2008] 森 全域木 一般化 ハミルトンパス カット(セット) 信頼性多項式 [Imai et al. 1997] 辺被覆 集合被覆 s-tカット オイラー路 シュタイナー木 k 終端カット サイクル 根付き森、木 完全 マッチング [Knuth 2008] 連結成分 集合分割 ハミルトンサイクル 信頼性多項式 複数終端対パス [Hardy et al. 2007] 集合 パッキング Tutte多項式 マッチング (ナンバーリンク) Jones多項式   (ひもの絡み目) [Yoshinaka et al. 2012]  上記3つ [今井, 今井 1998] 複数サイクル 上記2つ[関根, 今井 1996] 有向グラフ 有向パス [Knuth 08] 頂点変数型 クリーク 頂点被覆 0-1 ナップザック 頂点彩色 マトロイド 独立集合 特殊 部分和 括弧列 Tutte 多項式 [Saitoh et al. 2009] [Imai et al. 1996] 支配集合 特殊 数分割 動的計画法的な見方も可能

全域木の列挙 (本質的には [K.Sekine, H.Imai 95]) configuration の設計 5 5 s t s t s t 未処理 処理済み 5 5 s t s t s t 7 7 1 1 1 1 6 6 2 2 e8 e8 フロンティアの 定義は同じ 等価 i 5 6 7 i 5 6 7 mate[i] 1 2 1 mate[i] 1 2 1 configuration として、各頂点が属する 連結成分の番号を記憶

全域木の列挙 (本質的には [K.Sekine, H.Imai 95]) 枝刈りの設計 5 5 t s t 7 1 s 1 7 1 1 6 同じ連結成分を 両端とする辺を加えるとき、 サイクルができる 5 t s 7 t 1 s 1 7 に接続 1 1 6 2 6 2 i 5 6 7 加えない mate[i] 1 2 1 5 t 孤立成分が 生じる s 7 1 1 最後の辺まで処理後、 0 に接続されないなら に接続 6 2 1 に接続

フロンティア法(再掲) 枝刈り の設計 configuration の設計

マッチングの列挙 configuration の設計 枝刈りの設計 5 5 t s t s 7 1 7 1 6 6 i 5 6 7 i マッチングに 使われている 頂点に 辺を加える時 6 6 に接続 i 5 6 7 i 5 6 7 mate[i] 0 1 1 mate[i] 0 1 1 既にマッチングに使われている頂点は 1 使われていない頂点は 0 と すればよい 最後の辺まで処理後、 0 に接続されないなら 1 に接続

辺変数型 パス型 森型 頂点変数型 グラフ ハイパー グラフ フラグ型 クリーク 頂点被覆 0-1 ナップザック 頂点彩色 マトロイド [Knuth 2008] 森 全域木 一般化 ハミルトンパス カット(セット) 信頼性多項式 [Imai et al. 1997] 辺被覆 集合被覆 s-tカット オイラー路 シュタイナー木 k 終端カット サイクル 根付き森、木 完全 マッチング [Knuth 2008] 連結成分 集合分割 ハミルトンサイクル 信頼性多項式 複数終端対パス [Hardy et al. 2007] 集合 パッキング Tutte多項式 マッチング (ナンバーリンク) Jones多項式   (ひもの絡み目) [Yoshinaka et al. 2012]  上記3つ [今井, 今井 1998] 複数サイクル 上記2つ[関根, 今井 1996] 有向グラフ 有向パス [Knuth 08] 頂点変数型 クリーク 頂点被覆 0-1 ナップザック 頂点彩色 マトロイド 独立集合 特殊 部分和 括弧列 Tutte 多項式 [Saitoh et al. 2009] [Imai et al. 1996] 支配集合 特殊 数分割 動的計画法的な見方も可能

支配集合の列挙 v1 v4 v7 v5 v8 v2 v9 v1 v3 v1 = 0 v1 = 1 v6 v2 v2 v2 = 0 頂点の取捨選択の情報を (フロンティア上の)頂点に記憶しているため、 効率が良いとは限らない v1 v4 v7 v5 v8 v2 ではない全ての頂点は v9 v1 v3 v1 = 0 v1 = 1 少なくとも1つの に隣接する v6 v2 v2 v2 = 0 v2 = 1 v2 = 0 v2 = 1 v1 v4 v7 頂点を変数とするZDDを構築 v5 v8 v2 i 4 5 6 頂点が支配されているなら1 支配されていないなら0 と すればよい mate[i] 0 1 0 v3 v9 v6

0/1 ナップザック問題の列挙 x1 x2 xn x1 x1 = 1 x1 = 0 x1 x2 x2 x2 = 1 x2 = 0 重さ x1 各アイテムを 取るかとらないかを選択 重さが M 以下になるような取り方 50 x2 100 … … xn configuration = 重さの総和 210 x1 x1 = 1 x1 = 0 50 x1 x2 x2 x2 = 0 x2 = 1 x2 = 0 x2 = 1 x2 動的計画法のテーブルと見ることもできる … このグラフに対する フロンティア法と 見ることができる xn

辺変数型 パス型 森型 頂点変数型 グラフ ハイパー グラフ フラグ型 クリーク 頂点被覆 0-1 ナップザック 頂点彩色 マトロイド [Knuth 2008] 森 全域木 一般化 ハミルトンパス カット(セット) 信頼性多項式 [Imai et al. 1997] 辺被覆 集合被覆 s-tカット オイラー路 シュタイナー木 k 終端カット サイクル 根付き森、木 完全 マッチング [Knuth 2008] 連結成分 集合分割 ハミルトンサイクル 信頼性多項式 複数終端対パス [Hardy et al. 2007] 集合 パッキング Tutte多項式 マッチング (ナンバーリンク) Jones多項式   (ひもの絡み目) [Yoshinaka et al. 2012]  上記3つ [今井, 今井 1998] 複数サイクル 上記2つ[関根, 今井 1996] 有向グラフ まとめ  ・フロンティア法によって様々な対象を表現する        ZDDを構築可能 → configuration と枝刈りの設計 有向パス [Knuth 08] 頂点変数型 クリーク 課題: 計算量評価等の理論的裏付け 頂点被覆 0-1 ナップザック 頂点彩色 マトロイド 独立集合 特殊 部分和 括弧列 Tutte 多項式 [Saitoh et al. 2009] [Imai et al. 1996] 支配集合 特殊 数分割 動的計画法的な見方も可能