最短経路問題
立命館大学理工学部数理科学科3回生谷口泰地
ダイクストラ法で行く
二部グラフ
「ノードに色を与える。その際、隣接するノード
は同じ色を与えてはいけない。」
二部グラフ
「ノードに色を与える。その際、隣接するノード
は同じ色を与えてはいけない。」
二色だけで塗り切れるグラフを二部グラフをいう。
二部グラフ 二部グラフの例
10
2 3
二部グラフ 二部グラフの例
10
2 3
0に黄色を塗る
二部グラフ 二部グラフの例
10
2 3
0と隣接している
1,3に別の色を塗る
二部グラフ 二部グラフの例
10
2 3
1に隣接している2に1
とは別の色を塗る
2と3も違う色になっ
ている!!
二部グラフ
今の例のように一つのノードの色が決ま
ればそれに隣接しているノードの色が決
定するので、二部グラフ判定アルゴリズ
ムはそれほど難しくない。(はず...)
二部グラフ
10
2
3
4
二部グラフ
10
2
3
4
実行結果
二部グラフでしたっ!
二部グラフ
10
2
3
4
二部グラフでしたっ!
最短経路問題
今回のセミナーの主目的
ダイクストラ法
ダイクストラ法
• 次のような重み付きグラフの最短経路を考える。
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
ダイクストラ法
• 次のような重み付きグラフの最短経路を考える。
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
ダイクストラ法
• アルゴリズム
①各ノードiにd_i = ∞を振る
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = ∞
d = ∞
d = ∞
d = ∞
d = ∞
d = ∞
d = ∞
ダイクストラ法
• アルゴリズム
②出発点であるAだけd=0とする。
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d = ∞
d = ∞
d = ∞
d = ∞
d = ∞
d = ∞
ダイクストラ法
• アルゴリズム
③Aに隣接しているノードを更新。
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d =5 < ∞
d = ∞
d =2< ∞
d = ∞
d = ∞
d = ∞
ダイクストラ法
• アルゴリズム
②Aに隣接しているノードを更新。
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d =5
d = ∞
d =2
d = ∞
d = ∞
d = ∞
ダイクストラ法
• アルゴリズム
④Aを除外
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d =5
d = ∞
d =2
d = ∞
d = ∞
d = ∞
ダイクストラ法
• アルゴリズム
④Bのdは決定
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d =5
d = ∞
d =2
d = ∞
d = ∞
d = ∞
ダイクストラ法
• アルゴリズム
⑤Bの隣接しているノードを更新
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d=5 < 6
d = ∞ > 𝟖
d =2
d = ∞
d = ∞
d = ∞ > 𝟏𝟐
ダイクストラ法
• アルゴリズム
⑤Bの隣接しているノードを更新
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d=5
d = 𝟖
d =2
d = ∞
d = ∞
d = 𝟏𝟐
ダイクストラ法
• アルゴリズム
⑤Bのを除外
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d=5
d = 𝟖
d =2
d = ∞
d = ∞
d = 𝟏𝟐
ダイクストラ法
• アルゴリズム
⑤Cのdは決定
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d=5
d = 𝟖
d =2
d = ∞
d = ∞
d = 𝟏𝟐
ダイクストラ法
• アルゴリズム
⑤Cに隣接しているdを更新
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d=5
d = 𝟖 < 𝟕
d =2
d = ∞
d = ∞
d = 𝟏𝟐
ダイクストラ法
• アルゴリズム
⑤Cに隣接しているdを更新
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d=5
d = 𝟕
d =2
d = ∞
d = ∞
d = 𝟏𝟐
ダイクストラ法
• アルゴリズム
⑤Cを削除
A B
G
FD
E
C
5
2
4
2
6
1
3
10
9
5
d = 0
d=5
d = 𝟕
d =2
d = ∞
d = ∞
d = 𝟏𝟐
ダイクストラ法
•これを繰り返す!!!!
ダイクストラ法
隣接行列では𝑂 𝑉 2
隣接リストでは𝑂( 𝐸 )と見せかけて、𝑂( 𝑉2
)
最小のdを持っているノードを探
すのが時間がかかる。
ダイクストラ法
隣接行列では𝑂 𝑉 2
隣接リストでは𝑂( 𝐸 )と見せかけて、𝑂( 𝑉2
)
最小のdを持っているノードを探
すのが時間がかかる。
????
ダイクストラ法
ヒープの出番では???
隣接リストでは𝑂( 𝐸 )と見せかけて、𝑂( 𝑉2
)
最小のdを持っているノードを探
すのが時間がかかる。
????
ダイクストラ法
最小のdを持っているノー
ドを探すのが時間がかかる。
ヒープ構造で各ノードのdを
保存しておけばいいだろ??
ダイクストラ法
こうすることで計算時間は
𝑂(𝑙𝑜𝑔 𝐸 )

Dijkstra