極小集合被覆を列挙する 実用的高速アルゴリズム

Slides:



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

平面三角分割グラフを列挙す るアルゴリズムの改良 中野 眞一 ( 群馬大学 ) 宇野 毅明 ( 情報学研究 所 ) 2002 年 6 月 24 日 コンピューテーション研究会.
授業展開#12 コンピュータの扱いにくい問 題. 扱いにくい問題  処理時間がかかる。  メモリを大量に必要とする。  プログラムの優劣、アルゴリズムの優劣 を比較するためには、標準的なコン ピュータで比較する必要がある。  処理時間を計るのに、コンピュータのモ デルとして、チューリングマシンを考え、
逐次ソート 2011/05/16. ソート(sort) 順序集合の要素a 1 … a n の上下関係を整 える 一般的には、整数の集合 N を考えればよ い ソートの計算量が問題となる どのような入力に対し、どのようなアル ゴリズムが最適か?
List decoding for Reed-Muller codes and its application to polar codes 安永 憲司 東京工業大学 大学院情報理工学研究科 数理・計算科学専攻 1.
A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
J: Magical Switches JAG 模擬地区予選 2013 原案:保坂 解答:保坂・楠本 解説:保坂.
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
ラベル付き区間グラフを列挙するBDDとその応用
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
第11回 整列 ~ シェルソート,クイックソート ~
On the Enumeration of Colored Trees
頻出集合列挙アルゴリズムに対する 実用的高速化技術について
5.チューリングマシンと計算.
5.チューリングマシンと計算.
An Algorithm for Enumerating Maximal Matchings of a Graph
情報知能学科「アルゴリズムとデータ構造」
中間発表用スライド 田中健太.
列挙問題 列挙問題の定義 アルゴリズムの速度 バックトラッキング 分割法 逆探索.
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
二分決定グラフに基づく 大規模ハイパーグラフの極小横断列挙
データ構造とアルゴリズム 分割統治 ~ マージソート~.
宇野 毅明 国立情報学研究所 2002年3月 東北大大学院 情報科学研究科ワークショップ
疑似頻出アイテム集合の 多項式遅延列挙アルゴリズム
データ構造とアルゴリズム 第6回の2 木 ~ データ構造(3)~.
最短路問題のための LMS(Levelwise Mesh Sparsification)
第11回 整列 ~ シェルソート,クイックソート ~
二分探索木によるサーチ.
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
型付きアセンブリ言語を用いた安全なカーネル拡張
決定木とランダムフォレスト 和田 俊和.
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
アルゴリズムとデータ構造 第3章 ヒープ 6月10日分
25. Randomized Algorithms
A Simple Algorithm for Generating Unordered Rooted Trees
論文紹介 - Solving NP Complete Problems Using P Systems with Active Membranes 2004/10/20(Wed)
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
プログラミング 4 整列アルゴリズム.
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
頻出・飽和・極大頻出集合の効率的な列挙アルゴリズムとその実装
情報とコンピュータ 静岡大学工学部 安藤和敏
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
アルゴリズムとプログラミング (Algorithms and Programming)
列挙問題 列挙問題の定義 アルゴリズムの速度 バックトラッキング 分割法 逆探索.
重み付き投票ゲームにおける 投票力指数の計算の高速化
短い部分文字列の ミスマッチトレランスを 高速計算するアルゴリズム
大規模ネットワークに対する 実用的クラスタ発見アルゴリズムの開発
全体ミーティング (5/23) 村田雅之.
アルゴリズムとデータ構造 2012年7月2日
5.チューリングマシンと計算.
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造 2011年6月28日
情報工学概論 (アルゴリズムとデータ構造)
大規模データ処理に対する 列挙アルゴリズムの活用
擬似クリークを列挙する 多項式時間遅延アルゴリズム
アルゴリズムとデータ構造 2013年7月2日
分枝カット法に基づいた線形符号の復号法に関する一考察
4.プッシュダウンオートマトンと 文脈自由文法の等価性
ヒープソート.
ICML読む会資料 (鹿島担当) 教師ナシ の 構造→構造 マッピング 読んだ論文: Discriminative Unsupervised Learning of Structured Predictors Linli Xu (U. Waterloo) , … , Dale Schuurmans.
コストのついたグラフの探索 分枝限定法 A*アルゴリズム.
情報生命科学特別講義III (3)たたみ込みとハッシュに 基づくマッチング
Q q 情報セキュリティ 第7回:2005年5月27日(金) q q.
グラフの列挙 中野 眞一    (群馬大学) 2019/9/14 列挙学校.
情報処理Ⅱ 第8回:2003年12月9日(火).
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
Presentation transcript:

極小集合被覆を列挙する 実用的高速アルゴリズム 宇野 毅明 国立情報学研究所 2002年3月 アルゴリズム研究会

極小集合被覆とは ・ E : 台集合 ・ F ⊆ 2E : 集合族 ・  C ⊆ F が F の集合被覆  ⇔ ∀e ∈ E , ∃S∈ C, e ∈ S 極小集合被覆 :  他の集合被覆を含まない集合被覆 E = {1,2,3,4,5,6} F = {{1,2,3} , {1,4,5,6}, {1,3,5}, {2,4}, {5,6}} 集合被覆:         極小集合被覆: {1,2,3 } , {1,2,3 } {1, 3, 5 }, {1, 4,5,6} { 2, 4 }, { 5,6}

極小集合被覆列挙問題 今回の研究: ↑のアルゴリズムを高速化 問題: 与えられた E , F ⊆ 2E に対して, F の極小集合被覆を全て出力せよ ・ #P-complete である ・ 出力多項式のアルゴリズムがあるかどうか不明 ・ 他のいろいろな問題と等価 (hypergraph dualization, minimal hitting set の列挙) ・ いろいろな人がチャレンジしている ・ 現在, 計算量の意味での最速なものは O(出力数 log 出力数) ・ 実用上高速なアルゴリズムを作る研究も行われている ( Kavvadias & Stavropoulos ’99) 今回の研究: ↑のアルゴリズムを高速化

無駄な出力の回数を解析  現在の計算量最速アルゴリズム どうやって列挙するか? ・  一般に良く使われる列挙法 : 分割法  解集合を2分割し, 各々を子問題として再帰的に解く ただし   ・ 空集合と全体集合, という分割をしないこと (子問題の解の存在性をチェックできること)        ・ 再帰的に子問題が作成できること 簡単に, 「 ある S を含む極小集合被覆」 「 ある S を含まない極小集合被覆」 と分割すると, 前者が子問題として 表現できない(あるいは重なる) . 無駄な出力の回数を解析   現在の計算量最速アルゴリズム

他のアプローチ 台集合 E = {e1,…,en} を限定した問題を逐次解く方法 ・ 最初 E1 = {e1} として問題を解く ・ 逐次 E を大きくしていき, 解集合を更新し, En={e1,…,en} の解集合を得る … E1 ={e1} E2 ={e1,e2} ,…, En-1 ={e1,…,en-1} E ={e1,…,en} 問題点 : メモリを沢山消費 Kavvadias & Stavropoulos はメモリを使わないように改良

逆探索 Kavvadias & Stavropoulos の方法は, 逆探索として捉えられる ・ (特別なある一つの要素以外の)任意の解に, 親(他の解)を定義 ・ ただし, 各解が自分自身の真の先祖にならないこと ・ 親子関係から木(列挙木)が得られる

列挙木を深さ優先探索 ・ 解を列挙するには, 列挙木を深さ優先探索すればよい ・ 列挙木全体を記憶しなくても, 現在の解の子供を列挙するアルゴリズムがあれば十分 ・ 入力多項式のメモリしかいらない(木の高さが入力多項式なら) (・ さらに, 子供に順序付けをして, 与えられた子供の次の子供を見つけるアルゴリズムがあると, 木の深さもメモリに影響しない)

極小集合被覆間の親子関係 E0 ,…, En のすべての極小集合被覆に定義 ( Ei の極小集合被覆 C を ( i ,C ) と表記する) 1. C がEi-1 の極小集合被覆ならば, ( i-1 ,C ) を親とする 2. そうでないなら, C から( ei を含む集合) を取り除いたものを C’ として, ( i-1 ,C’ ) を親とする i=6    {1,2 }, {1,2,3 }       { 3, 5 }, {1, 4,5 }       { 2, 4, 6}, {1, 3, 5,6}

親子関係の妥当性 集合被覆 C がEi の極小集合被覆である ⇔ C の各集合 S に対して, Ei の要素で S にしか覆われていないものが存在する (S のクリティカル要素と呼ぶ) 極小集合被覆 ( i ,C ) に対して, C がEi-1 の極小集合被覆でない  C のある集合 S のクリティカル要素は ei のみであり, C の他の集合のクリティカル要素は eiではない  C から S を除くと極小集合被覆になる {1,2,3 } {1,2,3 } { 3, 5 } {1, 4,5 } { 2, 4, 6} {1, 3, 5,6}

・ 子供は最大 |F| 人. 必ずいるとは限らない 親から子供を得るには ・ 親の定義の逆をすればよい ・ 任意の ( i ,C ) に対して, 1. もし C がEi+1 の極小集合被覆ならば, ( i +1,C ) は子供   ⇔ ( C はEi の極小集合被覆なので ( i ,C ) は( i +1,C ) の親 ) 2. C がEi+1 の極小集合被覆でないときは, C ∪{ S’ =( ei+1 を含む集合)} が Ei+1 の極小集合被覆ならば,   ( i +1, C ∪{ S’ } ) は子供   ⇔ ( C ∪{ S’ } はEi の極小集合被覆でないので      S’ を取り除いて得られる ( i ,C ) が親 ) ・ 子供は最大 |F| 人. 必ずいるとは限らない  

高速化をして、実際どの程度速くなるか検証する 計算量は押さえられない ・ 1反復は入力多項式時間. 反復の総数は,  (全ての Ei 上の, 極小集合被覆数の総和) ・ 出力数多項式時間にはならない ・ En 上の解集合に比べて Ei 上の解集合が極端に大きくなるとは考えにくい  たぶん, 実際はかなり速い(出力数多項式)だろう  高速化をして、実際どの程度速くなるか検証する 

反復の高速化(改良1) ・ C ∪ {S’} の極小性チェックに時間がかかっている ・ 各反復で, 極小集合被覆 C に対し, 各 S∈C に対し, S のクリティカル要素 ( S しか覆ってない要素の集合) c(S) を記憶 c(S) ⊆ S’ となる S ∈C が存在しなければ, C ∪ {S’} は極小 { 1, 2, 3,7 }, { 1, 2, 4 }, { 5,6 } ・ { 3,5,7,8 } は加えられない   ・{ 1,2,3,5,8 } は加えられる 普通にチェック O(|E||F|)  この方法 O(|E|) ( 計算結果から推測するに, Kavvadias & Stavropoulos は普通にチェック、の方法を用いているようだ)

反復の高速化(改良2) c(S) ⊆ S’ となる S ∈C が存在しなければ, C ∪ {S’} は極小 各 S’ ∈C の要素で, いずれかの c(S), S ∈C に含まれるものを保持 (反復の操作ごとに変更, 更新する. O(|F|) 時間程度) /

順番を入れ替えて高速化 ・ E = { e1,…, en } の添え字を各要素を含む集合の数でソートする 小さい順  反復数が減るだろう 小さい順      反復数が減るだろう 大きい順      各反復の計算時間が減るだろう さて, どっちが速い?

計算機実験 環境 : Pentium Ⅲ 500MHz, linux, 普通の C でプログラムを作り, gcc でコンパイルした 問題生成法 : 各要素が, 各集合に含まれる確率が3割として生成 ※ 解が100万以上のときは100万個出力したところで打ち切る

実験結果の概略 計算時間/出力数 改良1: O(|E|) より少々大きい 改良2: O(|E|) 程度 ・ 集合族の大きさは少ししか計算時間に関係しないようだ ※ 各反復で, 子供候補のうち, だいたい一定割合が子供になっているのだろう ※ 深い反復での, 各集合が含むクリティカル要素数は, ほぼ定数であったので, 改良2が速いのだろう ・ ランダム:小さい順:大きい順  =  (およそ) 1 : 0.7 : 2.0 ※ 各集合の大きさの偏りを増やすと, この比は大きくなる        反復数を減らしたほうが効果は高いようだ 

改良 1 と改良 1+2 の比較 前の論文: |E|=50, |F|=50 で 500秒 程度

添え字の順序を並び替えた場合

さらに大きな台集合で 前の論文: |E| = 1000 で 20000秒くらい

まとめと今後の課題 ・ 極小集合被覆列挙問題に対して, 実験的に高速なアルゴリズムを提案した ・ ランダム問題に対する計算実験の結果, 入力 E , F ⊆ 2E に対する計算時間は, 1つあたりおよそ O(|E|) であった ・ 添え字の付け方を工夫すると, 出力数多項式オーダーになるかもしれない ( ・実は, もうひとつ改良を試してみたのだが, 速くならなかった) ・ 解1つあたり O(1) 程度の時間にできるかどうかが今後の課題