宇野 毅明 国立情報学研究所 2002年3月 東北大大学院 情報科学研究科ワークショップ

Slides:



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

1 高速フーリエ変換 (fast Fourier transform). 2 高速フーリエ変換とは? – 簡単に言うとフーリエ変換を効率よく計算 する方法 – アルゴリズムの設計技法は分割統治法に基 づいている 今回の目的は? – 多項式の積を求める問題を取り上げ、高速 フーリエ変換のアルゴリズムを用いた解法.
平面三角分割グラフを列挙す るアルゴリズムの改良 中野 眞一 ( 群馬大学 ) 宇野 毅明 ( 情報学研究 所 ) 2002 年 6 月 24 日 コンピューテーション研究会.
©2008 Ikuo Tahara探索 状態空間と探索木 基本的な探索アルゴリズム 横形探索と縦形探索 評価関数を利用した探索アルゴリズム 分岐限定法 山登り法 最良優先探索 A ( A* )アルゴリズム.
2015 年度 有限幾何学 期末試験 次の各問に答えよ.( (1), (2), (3), (4), (5), (7), (8), (10) は答えだけでよい) (1) 有向閉路が存在しない位数 4 のトーナメントを描け. (2) 内点の個数が 10 個の正則 2 分木の葉の個数を求めよ. (3) グラフ.
A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
2009/12/4 グラフ (2) 第10講: 平成21年12月4日 (金) 4限 E252教室 コンピュータアルゴリズム.
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
極小集合被覆を列挙する 実用的高速アルゴリズム
離散システム特論 整列(sorting)アルゴリズム 2.
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
アルゴリズムとデータ構造 第8回 ソート(3).
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
第11回 整列 ~ シェルソート,クイックソート ~
    有限幾何学        第8回.
曲面上のグラフの彩色 ~種数の増加,面の制限及び局所平面性~
On the Enumeration of Colored Trees
4-3:高度なソートアルゴリズム① (分割統治法にもとづくソート)
2章 データ構造.
An Algorithm for Enumerating Maximal Matchings of a Graph
列挙問題 列挙問題の定義 アルゴリズムの速度 バックトラッキング 分割法 逆探索.
データ構造とアルゴリズム 分割統治 ~ マージソート~.
疑似頻出アイテム集合の 多項式遅延列挙アルゴリズム
データ構造とアルゴリズム 第6回の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教室 コンピュータアルゴリズム.
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
決定木とランダムフォレスト 和田 俊和.
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
アルゴリズムとデータ構造 第3章 ヒープ 6月10日分
第9回 優先度つき待ち行列,ヒープ,二分探索木
b f c a d e g h a b c d e f g 図1 図2 2012年度 有限幾何学 期末試験
A Simple Algorithm for Generating Unordered Rooted Trees
離散数学 07. 木 五島.
アルゴリズムとプログラミング (Algorithms and Programming)
情報生命科学特別講義III (13) 固定パラメータアルゴリズムと 部分k木
プログラミング 4 整列アルゴリズム.
プログラミング 4 木構造とヒープ.
九州大学大学院 情報学専攻特別講義 (6) 固定パラメータアルゴリズムと 部分k木
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
アルゴリズムとデータ構造1 2006年7月11日
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
15.cons と種々のデータ構造.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
列挙問題 列挙問題の定義 アルゴリズムの速度 バックトラッキング 分割法 逆探索.
補講:アルゴリズムと漸近的評価.
重み付き投票ゲームにおける 投票力指数の計算の高速化
第16章 動的計画法 アルゴリズムイントロダクション.
第9回 優先度つき待ち行列,ヒープ,二分探索木
短い部分文字列の ミスマッチトレランスを 高速計算するアルゴリズム
アルゴリズムとデータ構造 2012年7月2日
アルゴリズムとデータ構造 2011年6月28日
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造 2013年7月2日
平面走査法を使った 一般線分の 交点列挙アルゴリズム
4.プッシュダウンオートマトンと 文脈自由文法の等価性
生命情報学特論 (6) 固定パラメータアルゴリズムと 部分k木
コストのついたグラフの探索 分枝限定法 A*アルゴリズム.
原口和也 高橋隆一 丸岡章 石巻専修大学 理工学部 情報電子工学科
情報生命科学特別講義III (3)たたみ込みとハッシュに 基づくマッチング
グラフの列挙 中野 眞一    (群馬大学) 2019/9/14 列挙学校.
生物情報ソフトウェア特論 (10)固定パラメータアルゴリズムと 部分k木
7.木構造 7-1.データ構造としての木 7-2.2分探索木 7-3.高度な木.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Presentation transcript:

宇野 毅明 国立情報学研究所 2002年3月 東北大大学院 情報科学研究科ワークショップ 列挙アルゴリズムの 遅延時間減少法 宇野 毅明 国立情報学研究所 2002年3月 東北大大学院 情報科学研究科ワークショップ

列挙と発生 列挙・発生: 与えられた集合の要素を全て出力する問題 ・列挙という言葉は, 比較的複雑な問題, アルゴリズムに用いられるようだ   マッチング・全張木・多面体の頂点・幾何学図形など ・発生という言葉は, 比較的単純な問題, アルゴリズムに用いられるようだ   2分木・順列・文字列など

どのような研究がされているか 比較的難しい問題(列挙) ・出力多項式時間のアルゴリズムが存在するか  ・出力多項式時間のアルゴリズムが存在するか  ・単純な仕組み・きれいな枠組みで系統立てできるか  ・計算量の減少ができるか 比較的易しい問題(発生)  ・計算量は減少できるか, 解1つあたり定数時間になるか  ・遅延時間(2つの出力間の最大計算時間)はどのくらいか  ・2つの出力間の差分の最大はどれくらいか (出力変化量)  ・出力に, 圧縮・ポインタなどを用いているか

アルゴリズム構築法 列挙: 分割法・逆探索・バックトラックなど 発生: グレイコード, 木探索で葉を隣接させる方法など 列挙: 分割法・逆探索・バックトラックなど  ・問題に対して, 比較的簡単に, 多項式時間で列挙できるか   どうかがわかる  ・遅延時間・出力変化量などは考慮しないので,   その意味では良いアルゴリズムにならない 発生: グレイコード, 木探索で葉を隣接させる方法など  ・遅延時間・出力変化量が小さい  ・簡単なアルゴリズムでも, この枠組みにのせるには   比較的手間がかかる

出力変化量を小さくするのは大変 逆探索・バックトラック・分割法 アルゴリズムの再帰構造が木構造になる  逆探索・バックトラック・分割法 アルゴリズムの再帰構造が木構造になる   (木探索型と呼ばれる)   (列挙木と呼ぶ) 遅延時間・出力変化量に, 列挙木の高さが入ってくる ・探索の仕方を, 木ではなく, パスにする ・木の高さをそろえ, 葉をつなぐ 両者共に, 技巧的な工夫が必要

今回の研究の目的 列挙アルゴリズム構築法を用いた簡単なアルゴリズムを, 発生アルゴリズムでの評価基準(遅延時間・出力変化量)が  発生アルゴリズムでの評価基準(遅延時間・出力変化量)が 良くなるようにする,  簡単かつ一般的な改良法を2つ提案する 条件:  その1: 全ての反復で解を出力すること  その2: 任意の反復の子孫の平均計算時間が,        全体の平均計算時間のオーダーになっていること 結果:  出力変化量: 親反復と子反復の差の最大  遅延時間:   1反復の計算量, あるいは 解1つ当りの平均計算時間 (余分なメモリと初期時間を要す)

仮定を満たす列挙アルゴリズム 逆探索 ・解集合に親子関係を定義 ・親子関係から木を導出 ・導出した木を深さ優先探索 分割法の1種 1. ある解 x を見つけ出力 2. x 以外の解 x’ を求め, 出力. なければ終了 3. 解集合を, x を含むものと x’ を含むものに分割し,       2. を再帰呼び出し . 両者共に, すべての反復で解を出力

再帰のレベルごとに 出力のタイミングを変える 列挙木の各反復 x で, ・ x の深さが奇数ならば    再帰呼出しの前に解を出力する ・ x の深さが偶数ならば    再帰呼出しの後に解を出力する ・ 葉では必ず出力する

出力変化量・遅延時間の減少 深さ優先で列挙木をたどった部分パスを考える 部分パスが ・葉か, 長さ 3 の折り返さないパス  ・葉か, 長さ 3 の折り返さないパス   を含むと, 必ず出力が行われる  ・折り返す場合も, 先頭か末尾で出力を行う 3 反復に1つは出力が行われる 出力変化量・遅延時間 が, それぞれ 親反復と子反復の差× 3 ,   3 反復の計算時間に減少

何に使えるか 木探索型のアルゴリズム 2分木, 高さが k の2分木 順列, multiset の順列, 禁止位置がある順列  禁則パターンを含まない文字列 などなど 逆に, 使えないもの  ・ 葉でしか出力を行わないタイプのアルゴリズム (極大安定集合, 平面の木, 3角形分割など)  ・ 出力差分の最大が, 出力の大きさのオーダーのもの (マッチング、パスなど)

例1:禁止位置がある順列(1) 順列 x = ( p1,…,pn ) で, それぞれの pi が添え字集合 P(i) に含まれないものを列挙せよ, という問題の, 簡単なバージョンに対するアルゴリズムを作ってみる 問題: 順列 x = ( p1,…,pn ) で, 任意の pi ≠ i であるものを列挙せよ 解が O( n! ) あるので, しらみつぶしに探索しても, 解1つあたりの計算時間は O( 1 ) しかし, 出力変化量・遅延時間はその限りではない

例1:禁止位置がある順列(2) アルゴリズム: Iter ( 1, 2, ( 2,3,…,n,1 ) ) を呼び出す Iter ( i, j, x = ( p1,…,pn ) ) If pj = i or pi = j then j = j+1 If j = n+1 or i = n then return x’ = x の pi と pj を入れ替えて得られる順列  x’を出力 Iter ( i+1, i+2, x = ( p1,…,pn ) ) If j = n then Iter ( i+1, i+2, x = ( p1,…,pn ) ) else Iter ( i, j+1, x = ( p1,…,pn ) ) 2,3,4,5,6,7,8,1 3,2,4,5,6,7,8,1 4,3,2,5,6,7,8,1 5,3,4,2,6,7,8,1 6,3,4,5,2,7,8,1

遅延時間の減少 先ほどの方法で, 遅延時間を1反復の最大計算時間のオーダーで押さえることができた 今度は, もう少し欲張って, 遅延時間を解1つ当りの平均計算時間のオーダーで押さえる方法を考える ただし, 下の条件を満たすこと T : 1反復の平均計算時間のオーダー 任意の反復 x に対して, x の列挙木上の子孫で消費される 計算時間は, 1反復あたり T でおさえられる

キューを使う 出力をいったんキューに溜め, 一定間隔でキューから取り出して出力する ・ 最初, Q がいっぱいになるまで出力を溜め続ける ・ 一回, いっぱいになったら, 以後 3T 時間経過するごとに Q の先頭要素を出力する. 出力が頻繁に起こり, Q があふれた場合も, 先頭を出力する ・アルゴリズム終了後, Q に要素が残っていたら, 先頭から順次出力する

T* : 列挙木の根と葉を結ぶパスに含まれる反復が消費する合計計算時間の最大値 キュー Q の長さ : ( 6T* / 3T ) +1 アルゴリズム T* : 列挙木の根と葉を結ぶパスに含まれる反復が消費する合計計算時間の最大値 キュー Q の長さ : ( 6T* / 3T ) +1 アルゴリズム実行中, 時刻 t から時刻 t' まで に少なくとも (t‘- t - 6T*) / 3T 個の解が Q に挿入される

解析 アルゴリズム実行中, 時刻 t から時刻 t‘ まで に少なくとも (t‘- t - 6T*) / 3T 個の解が Q に挿入される t = 12T* +3T = O(T*) Qがあふれた時刻 t 以後の時刻に t‘ に対して, (t‘- t - 6T*) / 3T + ( 6T* / 3T ) +1 ≧ (t’-t) / 3T Q が空になることはない

結果 T* : 列挙木の根と葉を結ぶパスに含まれる反復が消費する合計計算時間の最大値 メモリ: 出力1回の大きさ × Q の長さ = 出力1回の大きさ × O( 6T* / 3T ) 解の出力が開始されるまでの時間: = O( T* )

何に使えるか ならし解析を用いているもの グラフの全張木, 有向全張木, マッチング, 連結成分 有向非閉路グラフの s-t パス マトロイドの基, 平面点集合の三角形分割 など

問題: 集合E 上で定義されたマトロイド M の基を全て出力せよ 例2:マトロイドの基(1) 問題: 集合E 上で定義されたマトロイド M の基を全て出力せよ アルゴリズム Iter (M, B (基) ) 基 B’ := B を求める  e1 := B \ B’ の要素 Iter ( M/e, B\e ) Iter ( M\e, B’ ) ただし、縮約したマトロイドに単一サーキットがある場合、 e を除去したマトロイドに、すべての基に含まれる要素がある場合 はそれらを用いて多数への分割をする

例2:マトロイドの基(2) m = 台集合の大きさ、 n = マトロイドのランク 1反復の計算量: O( mn ×オラクルの計算時間 ) グラフ G=(V,E) のグラフィックマトロイド(全張木列挙)の場合、 もう少し速くなって、 1反復の計算量: O( |E| ) 今回提案した方法を用いると、 出力変化量: O( 1 ) 遅延時間: O( 1 ) (メモリO( mn × m ×1 ) )              全張木の場合、 O( m × m ×1 )

まとめ 木探索型の列挙アルゴリズムに対して, 出力変化量・遅延時間を, 1反復あたりの最悪値まで減少させる方法を提案した.  出力変化量・遅延時間を, 1反復あたりの最悪値まで減少させる方法を提案した. ならし解析を用いた木探索型の列挙アルゴリズムに対して  遅延時間を解1つあたりの平均計算時間まで減少させる方法を提案した.