An Algorithm for Enumerating Maximal Matchings of a Graph

Slides:



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

平面三角分割グラフを列挙す るアルゴリズムの改良 中野 眞一 ( 群馬大学 ) 宇野 毅明 ( 情報学研究 所 ) 2002 年 6 月 24 日 コンピューテーション研究会.
A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
模擬国内予選2013 Problem F テトラ姫のパズル 原案:須藤 解答:大友、須藤 解説:須藤.
フロンティア法 - 組合せ問題の解を列挙索引化するZDD構築アルゴリズム
到着時刻と燃料消費量を同時に最適化する船速・航路計画
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
2009/12/4 グラフ (2) 第10講: 平成21年12月4日 (金) 4限 E252教室 コンピュータアルゴリズム.
極小集合被覆を列挙する 実用的高速アルゴリズム
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
動的計画法 表の作成 制約の追加 練習問題.
動的計画法 表の作成 制約の追加 練習問題.
ラベル付き区間グラフを列挙するBDDとその応用
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
    有限幾何学        第8回.
On the Enumeration of Colored Trees
頻出集合列挙アルゴリズムに対する 実用的高速化技術について
Permutationグラフと Distance-Hereditaryグラフの 再構築アルゴリズム
Probabilistic Method.
Extremal Combinatrics Chapter 4
集中講義(九州大学数理学研究院) バイオ構造データに対する数理モデルと アルゴリズム(3) + 数理談話会 木構造および画像データの文法圧縮
Approximation of k-Set Cover by Semi-Local Optimization
    有限幾何学        第12回.
列挙問題 列挙問題の定義 アルゴリズムの速度 バックトラッキング 分割法 逆探索.
宇野 毅明 国立情報学研究所 2002年3月 東北大大学院 情報科学研究科ワークショップ
疑似頻出アイテム集合の 多項式遅延列挙アルゴリズム
データ構造とアルゴリズム 第6回の2 木 ~ データ構造(3)~.
クリークマイニングとその応用 ~ 大規模データの活用 ~
s a b f c e d 2016年度 有限幾何学 期末試験 問1:15点
5.5 The Linear Arboricity of Graphs (グラフの線形樹化数)
大規模データに対する 効率的な列挙アルゴリズム
二分探索木によるサーチ.
割当て問題 • 割当問題の記法・定式化 • 拡張 • 特殊ケース(マッチング) • 3種類のものを割当てる問題.
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
決定木とランダムフォレスト 和田 俊和.
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
7.4 Two General Settings D3 杉原堅也.
25. Randomized Algorithms
計算量理論輪講 chap5-3 M1 高井唯史.
First Course in Combinatorial Optimization
A Simple Algorithm for Generating Unordered Rooted Trees
離散数学 07. 木 五島.
情報生命科学特別講義III (13) 固定パラメータアルゴリズムと 部分k木
連続領域におけるファジィ制約充足問題の 反復改善アルゴリズムによる解法 Solving by heuristic repair Algorithm of the Fuzzy Constraint Satisfaction Problems with Continuous Domains 北海道大学.
計算の理論 I 正則表現とFAとの等価性 月曜3校時 大月 美佳 平成15年6月16日 佐賀大学知能情報システム学科.
色塗りゲームとゲームカラーリング数 慶應義塾大学大学院 理工学研究科   関口 陽介.
九州大学大学院 情報学専攻特別講義 (6) 固定パラメータアルゴリズムと 部分k木
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
列挙問題 列挙問題の定義 アルゴリズムの速度 バックトラッキング 分割法 逆探索.
宇野 毅明 (国立情報学研究所 &総合研究大学院大学)
重み付き投票ゲームにおける 投票力指数の計算の高速化
第16章 動的計画法 アルゴリズムイントロダクション.
5.3, 5.4 D2 岡本 和也.
短い部分文字列の ミスマッチトレランスを 高速計算するアルゴリズム
直並列グラフの連続多重彩色 西関研究室 吉田進太郎.
大規模ネットワークに対する 実用的クラスタ発見アルゴリズムの開発
Max Cut and the Smallest Eigenvalue 論文紹介
情報工学概論 (アルゴリズムとデータ構造)
大規模データ処理に対する 列挙アルゴリズムの活用
擬似クリークを列挙する 多項式時間遅延アルゴリズム
平面走査法を使った 一般線分の 交点列挙アルゴリズム
分枝カット法に基づいた線形符号の復号法に関する一考察
ヒープソート.
生命情報学特論 (6) 固定パラメータアルゴリズムと 部分k木
コストのついたグラフの探索 分枝限定法 A*アルゴリズム.
離散数学 11. その他のアルゴリズム 五島.
Q q 情報セキュリティ 第7回:2005年5月27日(金) q q.
グラフの列挙 中野 眞一    (群馬大学) 2019/9/14 列挙学校.
生物情報ソフトウェア特論 (10)固定パラメータアルゴリズムと 部分k木
7.木構造 7-1.データ構造としての木 7-2.2分探索木 7-3.高度な木.
Presentation transcript:

An Algorithm for Enumerating Maximal Matchings of a Graph 宇野 毅明 国立情報学研究所・総合研究大学院大学 2002年 9月19日 アルゴリズム研究会

問題の定義 ・ 与えられたグラフ G = (V,E ) に対して、 「 G の全ての極大マッチングを、ちょうど一度ずつ出力せよ (列挙せよ)」 という問題を考える ・ G の辺グラフを G' とすると、上記の問題は G' の極大安定集合を列挙する問題と等価 ・ G の極大安定集合: 築山らのアルゴリズムで、ひとつあたり O(|V||E| ) 時間で列挙できる      G' だと O(|E|×|V||E| ) 時間になる

極大安定集合列挙 ・ 極大安定集合列挙アルゴリズムは、斬新なアイディアで作られている。   ※  それまでのアルゴリズムは、分割法とバックトラッキング     極大安定集合は列挙できない(出力多項式時間では) ・ 95年にAvis・福田が提案した逆探索と同じ探索をしている ・ 00-01年中野により、いくつかのグラフオブジェクトに対し、このアルゴリズムと同じ方法の、効率良い列挙アルゴリズムが提案されている しかし、 問題が基礎的な割には、 出力多項式アルゴリズムの中でも計算量が大きい

問題の特殊化 もともとの動機は、 ・ 極大安定集合列挙を速くしたい  でも、それは難しい    でも、それは難しい  (データ構造を使っても、ならし解析をしても難しい) ・ せめて、特殊ケースだけでも速く解けないか?   (2部グラフでは O(1 ) で列挙できている) ・ では、極大マッチング、という特殊ケースはどうか    O(|E|×|V||E|) でますます遅くなる 極大マッチングの列挙だけでも速くしよう

極大マッチングの逆探索 ・ 築山らの列挙法を、極大マッチングに適用 E = { e1,…,em }, Ei = { e1,…,ei } とする グラフ Gi =(V, Ei ) の極大マッチング M を i-極大マッチング と呼び、 ( i, M ) と表記する ( 極大安定集合の場合は、 i-極大安定集合を考える) 全ての i-極大マッチングを列挙する、という問題を考える (そして、普通の極大マッチングだけ出力する)

親子関係は、 ( 1, {e1} ) を根とする木になる (列挙木) 極大マッチングの親 i-極大マッチング ( i, M ) に対してその親を (i-1)-極大マッチング ( i-1, M' ) で定める。ただし、 1. ei が M に含まれなければ M' = M 2. そうでなければ M' = M \ { ei } に極大になるまで、添え字の昇順で枝を加えたもの     ( 極大安定集合では頂点を加える) ・ だれも、自分の真の先祖にならない ・ 1-極大マッチング ( 1, {e1} ) だけ親を持たない 親子関係は、 ( 1, {e1} ) を根とする木になる (列挙木)

親の作り方(図解) 1. ei が M に含まれなければ M' = M 2. そうでなければ M' = M \ { ei } に極大になるまで添え字の昇順で枝を加えたもの 14 13 12

列挙木の例 列挙木

与えられた親の子供を見つけるアルゴリズムを考える 列挙木を探索 列挙木を(深さ優先)探索し、全ての頂点を訪れれば、すべての i-極大マッチングが列挙できる   (  逆探索) 木自体をメモリに持つ   極大マッチングを    列挙しなければならない   指数メモリが必要 ・ 深さ優先探索をするには、  今訪れている頂点の子供が得られれば十分 与えられた親の子供を見つけるアルゴリズムを考える

子供を求める ・ ( i, M ) に対して 1. ei+1 が M の辺に隣接する: M' = M 、隣接しない: M' = M ∪{ei+1}     ( i+1, M' ) は ( i, M ) の子供になる   ( type1 )       ( type 1 の子供は必ず存在する ) 2. M' = M ∪{ ei+1 } から ei+1 に隣接する枝を取り除いたもの     ( i+1, M' ) は ( i, M ) の子供になりうる ( type2 ) ・ ( i+1, M' ) が ( i, M ) の子供であれば、必ずどちらかの方法で得られる (極大安定集合の場合も同じ)

子供の求め方(図解) 1. ei+1 が M の辺に接するなら M' = M 、 そうでなければ M' = M ∪{ ei+1 } 2. M' = M ∪{ ei+1 } から ei+1 に隣接する枝を取り除いたもの

子供を求める計算時間 ・ ( i, M ) に対して type 1 M' = M か M' = M ∪{ ei+1 } type 2 M' = M ∪{ ei+1 } から ei+1 に隣接する枝を取り除く     O(1) 時間で得られる ( i+1, M' ) が ( i, M ) の子供であるかどうかのチェック     O(Δ) ※ Δはグラフの最大次数    (極大安定集合の場合は、 O(|V|),O(|E|) )

計算量を算定  1~ |E| 極大マッチングの数は、 任意の i-極大マッチングは ( i<|E| なら ) 子供を1人は持つ 1つあたりの計算時間は O(Δ|E|) ※ Δはグラフの最大次数    (極大安定集合の場合は、 O(|V| |E| ) ) O(|V||E|2) よりは速くなった

改良 ・ type 2 の子供を短時間で見つける (データ構造による改良) ・ 列挙木の頂点が多くならないよう、工夫する    (データ構造による改良) ・ 列挙木の頂点が多くならないよう、工夫する    (枝の添え字付けの工夫による) O(Δ) まで速くする

Type 2 子供を短時間で発見 2. M' = M ∪{ ei+1 } から ei+1 に接する枝を取り除く v ej   (1) ei+1 に隣接する枝があること  O(1) 時間   (2) M' が極大マッチングであること     (3) M'\ { ei+1 } に追加するべき枝が M の枝であること 各頂点 v ( と v に接続する M の枝 ej )に対して、 A(v):(2) のため:v に接続する枝で、M\ { ej } の枝に隣接しないもの l(v): (3) のため: A(v) の枝で、添え字が j より小さいものの数 を、アルゴリズムの実行中保持 ej v

Type 2 子供を短時間で発見2 * M' = M ∪{ ei+1 } から ei+1 に隣接する枝を取り除く ei+1 に隣接する M の枝 e の端点 u が、 u に接続する枝で、M\ { e } の枝に隣接しないもの を持つと、極大にならない   (+α)     A(u) = φ u u

Type 2 子供を短時間で発見3 2. M' = M ∪{ ei+1 } から ei+1 に接する枝を取り除く   (3) M'\ { ei+1 } に追加するべき枝が M の枝であること ei+1 の端点 u に隣接する M の枝 ej が、 M'\ { ei+1 } の枝に隣接しない枝の中で、最小添え字   (+α)  v に接続する M\ {ej } の枝に隣接しない枝で、     添え字が j より小さいものの数 = 0     l(u) = 0 u u

データ構造の更新 A(v)、l(v) のデータは、 M' △ M の枝に隣接する枝についてのみ、変更がある。 ・ type2子供に関する再起呼び出し: O(Δ) 時間 ・ 連続する type1子供に関する再起呼び出し:    ※ 最初のマッチングに、枝が単調に追加されるだけ  ( 最後のマッチング )\(最初のマッチング ) の枝に接続する頂点の次数和 = O(|E|) 両者とも、高々(出力数)回 : 1つあたり O(|E|) 時間

列挙木の頂点数を減少 ・ 枝集合をブロックに分割 ・ ブロックごとに添え字を付ける ※ ブロックは、(隣接する2本の枝bi,b'i) に隣接する枝全部からなる ※ ブロックを逐次的に枝集合から取り除く ※ 後に取り除いたブロックの枝から昇順に添え字を付ける 枝集合 ・・・

ブロック1 ブロック 1,2,…,k :取り除いた順番 ※ ブロックは(隣接する枝bi,b'i ) に隣接する枝全部 ブロック j+1,…,k の極大マッチングに枝を追加してブロック j,…,k の極大マッチングを作ると、高々3本しか追加されない     1つのブロック内の、連続する type1子供の再帰呼び      出しにかかる時間は O(Δ) 枝集合 ・・・ ・・・

ブロック2 ブロック 1,2,…,k :取り除いた順番 ※ ブロックを逐次的に枝集合から取り除く    (bi,b'i) は、後に取り除いたブロック j>i の枝に隣接しない    ブロック j,…,k の極大マッチングに、 ( bi か b'i ) を加えて、     2つ以上極大マッチングができる    各ブロック内で、必ず1つ以上、type2子供ができる 枝集合 ・・・ ・・・

列挙木をパスに分解 データの更新は、列挙木の各枝に対応  各枝での更新時間の総和を求める     各枝での更新時間の総和を求める ・ 列挙木を、「type2子供の再帰呼び出し」の枝の端点で分割する ※ 分割されてできるパス・枝の   総数は、葉の数の2倍以下     出力数の2倍以下 ・・・

各枝・パスの計算時間 ・ 「type2子供の再帰呼び出し」の枝の計算時間は O(Δ) ・ パスは、連続するtype1子供の再帰呼び出しに対応    長さは高々2ブロック (枝数6Δ以下)    パスでの計算時間は、O(Δ) 出力ひとつあたり O(Δ) 時間となる ・・・

まとめ ・ 築山らによる極大安定集合列挙アルゴリズムを極大マッチング列挙問題に焼きなおした  O(Δ|E|) ・ 極大安定集合列挙が速くならないかなあ