2009/12/4 グラフ (2) 第10講: 平成21年12月4日 (金) 4限 E252教室 コンピュータアルゴリズム.

Slides:



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

有限幾何学 第 2 回. 有限幾何学 第 2 回 1. 様々なグラフの例 2. 道と最短経路問題 1. 用語の説明 2. 最短経路問題 3. ダイキストラのアルゴリズム.
©2008 Ikuo Tahara探索 状態空間と探索木 基本的な探索アルゴリズム 横形探索と縦形探索 評価関数を利用した探索アルゴリズム 分岐限定法 山登り法 最良優先探索 A ( A* )アルゴリズム.
2015 年度 有限幾何学 期末試験 次の各問に答えよ.( (1), (2), (3), (4), (5), (7), (8), (10) は答えだけでよい) (1) 有向閉路が存在しない位数 4 のトーナメントを描け. (2) 内点の個数が 10 個の正則 2 分木の葉の個数を求めよ. (3) グラフ.
算法数理工学 第 7 回 定兼 邦彦 1. グラフ グラフ G = (V, E) –V: 頂点 ( 節点 ) 集合 {1,2,…,n} –E: 枝集合, E  V  V = {(u,v) | u, v  V} 無向グラフ – 枝は両方向にたどれる 有向グラフ – 枝 (u,v) は u から.
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
アルゴリズムとデータ構造 2011年7月7日
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
算法数理工学 第9回 定兼 邦彦.
    有限幾何学        第8回.
数理科学コース・ 倉田 和浩 2007/11/3 大学祭オープンラボ
2章 データ構造.
データ構造と アルゴリズム 理工学部 情報システム工学科 新田直也.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
An Algorithm for Enumerating Maximal Matchings of a Graph
    有限幾何学        第5回.
JAG Regional Practice Contest 2012 問題C: Median Tree
データ構造と アルゴリズム 知能情報学部 新田直也.
データ構造とアルゴリズム 第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 (グラフの線形樹化数)
V. 空間操作.
Selfish routing 川原 純.
アルゴリズムとデータ構造 2012年7月12日
シャノンのスイッチングゲームにおけるペアリング戦略について
アルゴリズムとデータ構造 2011年7月4日
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
アルゴリズムとデータ構造 2013年7月16日
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
アルゴリズムイントロダクション 第24章 単一始点最短路問題
離散数学 08. グラフの探索 五島.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
人工知能概論 第2回 探索(1) 状態空間モデル,基本的な探索
WWW上の効率的な ハブ探索法の提案と実装
プリムのアルゴリズム 重み付きグラフG=(V,E)の任意の点集合 U⊂Vに対して一方の端点がUの中にあり、他方の端点がV-Uの中にあるような枝の中で最小の重みを持つものをlとすれば、枝lを含むような最小木が存在する。
早わかりアントコロニー最適化 (Ant Colony Optimization)
b f c a d e g h a b c d e f g 図1 図2 2012年度 有限幾何学 期末試験
アルゴリズムとデータ構造 2012年7月17日
First Course in Combinatorial Optimization
離散数学 07. 木 五島.
第4章 空間解析 2.ネットワーク分析 (1) 最短経路検索
最短ネットワーク問題:シュタイナー問題 3-G 023145 長谷川 和弘.
算法数理工学 第8回 定兼 邦彦.
2016年度 有限幾何学 中間試験 問1 次のグラフを描け.(描けない場合は理由を述べよ) 各20点
ベイジアンネットワーク概説 Loopy Belief Propagation 茨城大学工学部 佐々木稔
算法数理工学 第7回 定兼 邦彦.
情報知能学科「アルゴリズムとデータ構造」
第16章 動的計画法 アルゴリズムイントロダクション.
    有限幾何学        第5回.
離散数学 06. グラフ 序論 五島.
5.チューリングマシンと計算.
アルゴリズムとデータ構造 2011年7月11日
情報ネットワーク 岡村耕二.
アルゴリズムとデータ構造 2013年7月8日
2009/11/27 グラフ (1) 第9講: 平成21年11月27日 (金) 4限 E252教室 コンピュータアルゴリズム.
pf-7. データ構造とアルゴリズム (Python プログラミング基礎を演習で学ぶシリーズ)
アルゴリズムとデータ構造 第2章 リスト構造 5月24日分
d b c e a f 年度 有限幾何学 中間試験 問1 次の用語の定義をそれぞれ述べよ.
2017年度 有限幾何学 期末試験 注意:ループと多重辺がないグラフのみを扱う. 問1 次の定理と,その証明の概略を読み,各問に答えよ.
ヒープソート.
コストのついたグラフの探索 分枝限定法 A*アルゴリズム.
離散数学 11. その他のアルゴリズム 五島.
問2 次の問に答えよ. (ただし,握手補題,オイラーの定理,Oreの定理 は授業で紹介したものとする) (1) 握手補題を書け.
第4章 空間解析 2.ネットワーク分析 (2) 最大流問題
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
アルゴリズムとデータ構造 2012年7月9日
Presentation transcript:

2009/12/4 グラフ (2) 第10講: 平成21年12月4日 (金) 4限 E252教室 コンピュータアルゴリズム

第 11 講の復習 グラフ(graph) グラフとは グラフの表現 グラフの探索 深さ優先探索 幅優先探索 2009/12/4

復習: グラフとは グラフ: Graph 頂点(vertex,node,節点)の集合と辺(edge,arc,branch,枝)の集合からなる グラフ G は頂点の集合 V と辺の集合 E を用いて,G = (V, E) と表される v1 e2 G = (V, E) V = {v1, v2, v3, v4} E = {e1, e2, e3, e4, e5} e3 v3 e4 v4 v2 e5 頂点 vi, vj 間の辺 eij を 辺 (vi, vj) と書く 2009/12/4

復習: グラフの種類 有向グラフ 無向グラフ 重みつきグラフ 道(path,路) 閉路(cycle,closed path) v1 有向グラフ 辺に向きのあるグラフ 無向グラフ 辺に向きのないグラフ 重みつきグラフ 辺の属性として重み(コスト,長さ)を持つグラフ 道(path,路) 頂点と頂点を結ぶ経路 閉路(cycle,closed path) 同じ頂点へ帰ってくる道 自分自身の頂点への辺は自己閉路(self loop)という 有向グラフの場合, 辺 (v1, v2) と辺 (v2, v1) は別物 v2 自己閉路 2009/12/4

復習: グラフの用語 次数 v 完全グラフ 隣接行列 探索 頂点に接続されている辺の数 有向グラフの場合は,入ってくる辺と出て行く辺を区別して,それぞれ入次数,出次数という 完全グラフ すべての頂点間に辺があるグラフ 隣接行列 各頂点間に辺があれば 1,なければ 0 とした行列 探索 グラフ上のすべての頂点を訪問すること v 次数 5 (入次数 2,出次数 3) v1 v2 v3 v4 v1 v2 v3 v4 1 3 2 4 2009/12/4

復習: 探索アルゴリズム 深さ優先探索(左図) 幅優先探索(右図) 開始頂点から,一つの道を選んでいけるところまで行き,進めなくなったら引き返して別の道を選ぶ探索法 幅優先探索(右図) 開始頂点からの距離が等しい頂点を順にたどる探索法 34 34 12 56 12 56 6 24 44 78 6 24 44 78 32 87 32 87 66 66 92 92 2009/12/4

本日の講義内容 グラフアルゴリズムの紹介 最短路の問題 ダイクストラのアルゴリズム 最小木の問題 プリムのアルゴリズム 2009/12/4

最短路を求める問題 ダイクストラ(Dijkstra)のアルゴリズム SPF(Shortest Path First)アルゴリズムとも呼ばれる インターネットのルータ間の経路制御や,駅すぱーとなどの乗換案内ソフトウェア,カーナビ,ゲーム(桃太郎電鉄)などでも使われている エドガー・ダイクストラ(Edsger Wybe Dijkstra) オランダ人情報工学者,1930年-2002年 1972年,プログラミング言語の基礎研究に対してチューリング賞を受賞.構造化プログラミングの提唱者. 2009/12/4

ダイクストラのアルゴリズム 概要 基本戦略 性質 重み(ただし正の数)のつけられたグラフにおいて最短経路を求めるアルゴリズム 対象はすべての頂点が連結されたグラフとする 基本戦略 各頂点の最短経路を出発点に近い(最短経路の長さが短い)ものから一つずつ確定していく 性質 最短経路が(経路があれば)必ず見つかることが保証されている 2009/12/4

ダイクストラ法 - 初期状態 - f1 現時点での最短距離 f2 f3 f4 f5 f6 - ∞ - 160 ∞ - 230 ∞ - 70 ダイクストラ法 - 初期状態 - f1 - 現時点での最短距離 f2 ∞ - 160 f3 ∞ - 230 f4 ∞ - 70 150 f5 ∞ - 80 出発点 f6 ∞ - 200 P:最短距離計算済頂点 150 200 300 T:次候補頂点 2009/12/4

ダイクストラ法 - ステップ 1 - f1 f2 f3 f4 f5 f6 - 300 1 160 200 1 230 ∞ - 70 150 ダイクストラ法 - ステップ 1 - f1 - f2 300 1 160 f3 200 1 230 f4 ∞ - 70 150 f5 230 1 80 f6 ∞ - 200 P:最短距離計算済頂点 150 200 300 T:次候補頂点 2009/12/4

ダイクストラ法 - ステップ 2 - f1 f2 f3 f4 f5 f6 次は v1 の隣接で,最も近い頂点 v3 を調べる - 300 1 ダイクストラ法 - ステップ 2 - 次は v1 の隣接で,最も近い頂点 v3 を調べる f1 - f2 300 1 160 f3 200 1 230 f4 ∞ - 70 150 f5 230 1 80 f6 280 3 200 P:最短距離計算済頂点 150 200 300 T:次候補頂点 2009/12/4

ダイクストラ法 - ステップ 3 - f1 f2 f3 f4 f5 f6 近いほうの値で 上書きする - 300 1 160 200 1 ダイクストラ法 - ステップ 3 - 近いほうの値で 上書きする f1 - f2 300 1 160 f3 200 1 230 f4 ∞ - 70 150 f5 230 1 80 f6 280 3 200 P:最短距離計算済頂点 150 200 300 T:次候補頂点 2009/12/4

ダイクストラ法 - ステップ 4 - f1 f2 f3 f4 f5 f6 - 300 1 160 200 1 230 350 6 70 ダイクストラ法 - ステップ 4 - f1 - f2 300 1 160 f3 200 1 230 f4 350 6 70 150 f5 230 1 80 f6 280 3 200 P:最短距離計算済頂点 150 200 300 T:次候補頂点 2009/12/4

ダイクストラ法 - ステップ 5 - f1 f2 f3 f4 f5 f6 - 300 1 160 200 1 230 350 6 70 ダイクストラ法 - ステップ 5 - f1 - f2 300 1 160 f3 200 1 230 f4 350 6 70 150 f5 230 1 80 f6 280 3 200 P:最短距離計算済頂点 150 200 300 T:次候補頂点 2009/12/4

ダイクストラ法 – 終了 – f1 - f2 300 1 160 f3 200 1 230 f4 350 6 70 150 f5 230 1 80 f6 280 3 200 P:最短距離計算済頂点 150 200 300 T:次候補頂点 2009/12/4

演習: ダイクストラ法 最短経路の表を完成させよ f1 f2 f3 f4 f5 f6 - ∞ - ∞ - 120 40 90 60 50 - 最短経路の表を完成させよ f2 ∞ - f3 ∞ - 120 40 90 60 50 70 30 20 f4 ∞ - f5 ∞ - f6 ∞ - P:最短距離計算済頂点 T:次候補頂点 2009/12/4

演習: ダイクストラ法 -ステップ 1- 最短経路の表を完成させよ f1 f2 f3 f4 f5 f6 - 30 1 70 1 70 ∞ - 演習: ダイクストラ法 -ステップ 1- f1 - 最短経路の表を完成させよ f2 30 1 f3 70 1 70 f4 ∞ - 50 f5 ∞ - f6 ∞ - 40 30 60 P:最短距離計算済頂点 90 90 20 120 T:次候補頂点 2009/12/4

演習: ダイクストラ法 -ステップ 2- 最短経路の表を完成させよ f1 f2 f3 f4 f5 f6 v1 に最も近い v2 を次は基準 演習: ダイクストラ法 -ステップ 2- f1 - 最短経路の表を完成させよ f2 30 1 f3 70 1 30+90 70 f4 120 2 50 f5 ∞ - 30+120 f6 150 2 40 30 60 P:最短距離計算済頂点 90 90 20 120 T:次候補頂点 v1 に最も近い v2 を次は基準 2009/12/4

演習: ダイクストラ法 -ステップ 3- 最短経路の表を完成させよ f1 f2 v3 経由のほうが近い f3 f4 f5 f6 - 30 1 演習: ダイクストラ法 -ステップ 3- f1 - 最短経路の表を完成させよ f2 30 1 v3 経由のほうが近い 120 > 70+40 なので上書き f3 70 1 70 f4 110 3 50 f5 120 3 70+50 f6 150 2 40 30 60 P:最短距離計算済頂点 90 90 20 120 次に v1 に最も 近い v3 を基準 T:次候補頂点 2009/12/4

v4 を経由して v5 に行くと 110+60=170 > 120 なのでそのまま 演習: ダイクストラ法 -ステップ 4- f1 - 最短経路の表を完成させよ f2 30 1 v4 を経由して v5 に行くと 110+60=170 > 120 なのでそのまま f3 70 1 70 f4 110 3 50 f5 120 3 v6 も同様 110+90 > 150 f6 150 2 40 30 60 P:最短距離計算済頂点 90 90 20 120 次に v1 に最も 近い v4 を基準 T:次候補頂点 2009/12/4

v5 を経由して v6 に行くと 120+20=140 < 150 なので上書き 演習: ダイクストラ法 -ステップ 5- f1 - 最短経路の表を完成させよ f2 30 1 v5 を経由して v6 に行くと 120+20=140 < 150 なので上書き f3 70 1 70 f4 110 3 50 f5 120 3 f6 140 5 40 30 60 P:最短距離計算済頂点 90 90 20 120 次に v1 に最も 近い v5 を基準 T:次候補頂点 2009/12/4

演習:ダイクストラ法 -終了- 最短経路の表を完成させよ f1 f2 f3 f4 f5 f6 - 30 1 70 1 70 110 3 50 演習:ダイクストラ法 -終了- f1 - 最短経路の表を完成させよ f2 30 1 f3 70 1 70 f4 110 3 50 f5 120 3 f6 140 5 40 30 60 P:最短距離計算済頂点 90 90 20 120 T:次候補頂点 2009/12/4

最小木を求める問題 最小木(MST: Minimum Spanning Tree) 応用例 すべての頂点を連結する木で,辺の重みの総和が最小のもの 連結 すべての頂点間に経路が存在する 木なので閉路は存在しない 応用例 ネットワークの接続 ケーブル長最小ですべてのコンピュータを接続する 道路の敷設 道路長最小(経路の平均最小ではない)で各戸を結ぶ 2009/12/4

プリム(Prim)のアルゴリズム ダイクストラ法と基本は同じ 基本戦略 最も重みの小さな辺から順に最小木の枝になるかどうか調べていく 2009/12/4

ちなみにここを,”vertex[p].distance + その辺の重み” とするとダイクストラのアルゴリズムと同じになる プリム(Prim)のアルゴリズム Prim() { V ← 空集合; U ← すべての頂点からなる集合; vertex[出発点].distance ← 0; for (x ← 出発点以外のすべての頂点について) { vertex[x].distance ← ∞; } while (U が空集合でない) { p ← U の中でフィールド distance が最小の頂点; p を U から除き,V に加える; for (p を始点とする全ての辺について) { x ← その辺の終点の頂点; if (x が U に属している) { vertex[x].distance ← Min(vertex[x].distance, その辺の重み); ちなみにここを,”vertex[p].distance + その辺の重み” とするとダイクストラのアルゴリズムと同じになる 2009/12/4

プリムのアルゴリズムの正当性 U V プリム法では,各ステップで集合 V と U を結ぶ辺のうち,重み最小のものを選んでいる この辺を e とすると,これを最小木は必ず含む 背理法で証明 e を含まない最小木があったと仮定 最小木は頂点全てを連結させるから,V と U を結ぶ辺が他に必ず存在 それを f とすると,f の重みは e 以上 f を含む最小木には e の端点となる 頂点 p, q を結ぶ経路が存在 e をその最小木に加えると,閉路ができてしまう そこから f を除けば閉路がなくなり,また木が得られる この木は f が入っているときより,重みの総和が小さくなる これは仮定に矛盾 プラム法はこの事実を基に構成されている U V e p q f 2009/12/4

プリム法 – 初期状態 - f1 f2 現時点での .distance f3 f4 f5 f6 ∞ ∞ ∞ 160 ∞ 230 ∞ 70 プリム法 – 初期状態 - f1 ∞ f2 ∞ 現時点での .distance f3 ∞ 160 f4 ∞ 230 f5 ∞ 70 170 f6 ∞ 80 V:調査済頂点 200 150 200 U:未調査頂点 300 2009/12/4

プリム法 – ステップ 1 - f1 f2 現時点での .distance f3 f4 f5 f6 この辺を確定 300 200 160 ∞ プリム法 – ステップ 1 - f1 f2 300 現時点での .distance f3 200 160 f4 ∞ 230 f5 230 70 170 f6 ∞ 80 この辺を確定 V:調査済頂点 200 150 200 U:未調査頂点 300 適当に 1 つ出発点を選ぶ 2009/12/4

U から最小の distance を持つ頂点を選ぶ プリム法 – ステップ 2 - f1 v5 への辺候補はこっちへ変更 (230 > 170) f2 150 f3 200 160 f4 ∞ 230 f5 170 70 170 f6 80 80 V:調査済頂点 200 この辺を確定 150 200 U:未調査頂点 300 U から最小の distance を持つ頂点を選ぶ 2009/12/4

U から最小の distance を持つ頂点を選ぶ プリム法 – ステップ 3 - f1 f2 150 f3 200 160 f4 70 230 f5 160 70 170 f6 80 80 V:調査済頂点 200 この辺を確定 150 200 U:未調査頂点 300 U から最小の distance を持つ頂点を選ぶ 2009/12/4

U から最小の distance を持つ頂点を選ぶ プリム法 – ステップ 4 - f1 f2 150 f3 200 160 f4 70 230 f5 160 70 170 f6 80 80 V:調査済頂点 この辺を確定 200 150 200 U:未調査頂点 300 U から最小の distance を持つ頂点を選ぶ 2009/12/4

U から最小の distance を持つ頂点を選ぶ プリム法 – ステップ 5 - f1 この辺を確定 f2 150 f3 200 160 f4 70 230 f5 160 70 170 f6 80 80 V:調査済頂点 200 150 200 U:未調査頂点 300 U から最小の distance を持つ頂点を選ぶ 2009/12/4

U から最小の distance を持つ頂点を選ぶ プリム法 – 終了 - f1 f2 150 f3 200 160 f4 70 230 f5 160 70 170 f6 80 80 V:調査済頂点 200 150 200 U:未調査頂点 300 U から最小の distance を持つ頂点を選ぶ 2009/12/4

演習: プリム法 最小木を完成させよ f1 f2 f3 f4 f5 f6 ∞ ∞ ∞ 70 ∞ ∞ 50 40 30 60 10 80 20 f2 ∞ 最小木を完成させよ f3 ∞ f4 ∞ 120 40 80 60 50 70 30 10 20 f5 ∞ f6 ∞ V:調査済頂点 U:未調査頂点 2009/12/4

演習: プリム法 –ステップ 1- 最小木を完成させよ f1 f2 f3 f4 f5 f6 30 70 ∞ 70 ∞ 50 ∞ 40 30 f2 30 最小木を完成させよ f3 70 f4 ∞ 70 f5 ∞ 50 f6 ∞ 40 V:調査済頂点 30 60 10 80 20 U:未調査頂点 120 2009/12/4

演習: プリム法 –ステップ 2- 最小木を完成させよ f1 f2 f3 f4 f5 f6 30 70 10 70 ∞ 50 120 40 f2 30 最小木を完成させよ f3 70 f4 10 70 f5 ∞ 50 f6 120 40 V:調査済頂点 30 60 10 80 20 U:未調査頂点 120 2009/12/4

演習: プリム法 –ステップ 3- 最小木を完成させよ f1 f2 f3 f4 f5 f6 30 40 10 70 60 50 80 40 f2 30 最小木を完成させよ f3 40 f4 10 70 f5 60 50 f6 80 40 V:調査済頂点 30 60 10 80 20 U:未調査頂点 120 2009/12/4

演習: プリム法 –ステップ 3- 最小木を完成させよ f1 f2 f3 f4 f5 f6 30 40 10 70 50 50 80 40 f2 30 最小木を完成させよ f3 40 f4 10 70 f5 50 50 f6 80 40 V:調査済頂点 30 60 10 80 20 U:未調査頂点 120 2009/12/4

演習: プリム法 –ステップ 4- 最小木を完成させよ f1 f2 f3 f4 f5 f6 30 40 10 70 50 50 20 40 f2 30 最小木を完成させよ f3 40 f4 10 70 f5 50 50 f6 20 40 V:調査済頂点 30 60 10 80 20 U:未調査頂点 120 2009/12/4

演習: プリム法 –終了- 最小木を完成させよ f1 f2 f3 f4 f5 f6 30 40 10 70 50 50 20 40 30 f2 30 最小木を完成させよ f3 40 f4 10 70 f5 50 50 f6 20 40 V:調査済頂点 30 60 10 80 20 U:未調査頂点 120 2009/12/4

第 10 講のまとめ グラフアルゴリズムの紹介 最短路の問題 最小木の問題 ダイクストラのアルゴリズム プリムのアルゴリズム 2009/12/4