• 検索結果がありません。

アルゴリズムとデータ構造

N/A
N/A
Protected

Academic year: 2021

シェア "アルゴリズムとデータ構造"

Copied!
21
0
0

読み込み中.... (全文を見る)

全文

(1)

アルゴリズムとデータ構造

第14回 最小全域木(2)、最短路

アルゴリズムとデータ構造#14 1

(2)

今日の内容

2

◼ 最小全域木を求めるクラスカルのアルゴリズム

◼ 最小全域木を求めるプリムのアルゴリズム

◼ プリムのアルゴリズムの考え方

◼ 時間計算量

O 𝑚 log 𝑛

◼ 最短路問題

◼ 最短路、最短路木

◼ ダイクストラのアルゴリズム

◼ アルゴリズムの直観的な理解

アルゴリズムとデータ構造#12

前回の復習

(3)

最小全域木 (minimum spanning tree)

𝐺

1 の最小全域木

3 4

2 5 1

2 7

ネットワーク

𝐺

1

4

2 1

2

応用例として,通信網の設計,ガス・水道の配管設計などがある

アルゴリズムとデータ構造#13 3

ネットワーク

(

重み付きグラフ

) 𝐺 1 = 𝑉 1 , 𝐸 1 , 𝐺 2 = 𝑉 2 , 𝐸 2

◼ 定義:

𝐺 1

𝐺 2

の最小全域木

(

最小スパニング木

)

である

⇔ 𝐺 1

は、

𝐺 2

の全域木で、

含まれる辺の重みの総和が最小のもの

補足:

1

つのネットワークに、

最小全域木が複数ある場合 もある (辺の重みの総和は同じ)

𝐺

1 の辺が配管の候補で、この中 から、全体をつないで(連結)、

コスト(辺の重み)の総和が最小、

というものを見つけたい

前回の復習

(4)

[考え方] 解候補 𝑇

を空集合から始めて,重みが小さい辺から選 択し,現在の解候補

𝑇

に加えていく.ただし,選択することにより閉 路ができる場合には,その辺は選択しない.

クラスカルのアルゴリズム

クラスカルのアルゴリズムの 解候補

𝑇

がもつ性質

• 𝑇

は閉路を含まない

つまり,

𝑇

になっている (必ずしも連結であるとは限らない)

※ グラフ

𝐺

が森 ⇔

𝐺

は閉路のないグラフ

3 4

2 5 1

2 7

3 4

2 5 1

2 7

3 4

2 5 1

2 7

3 4

2 5 1

2 7

3 4

2 5 1

2 7

閉路ができる!

アルゴリズムとデータ構造#13 補足: 重みが同じ辺は、どの辺から選択しても

ok

4

前回の復習

(5)

最小全域木を求めるプリムのアルゴリズム

5

[考え方] 解候補 𝑉

𝑇

, 𝑇

をある頂点

𝑣

0のみからなる木(

𝑣

0からな

る部分グラフに対する最小全域木)から始めて,最小全域木

𝑉

𝑇

, 𝑇

の範囲を徐々に広げていく.

3 4

2 5 1

2 7

3 4

2 5 1

2 7

3 4

2 5 1

2 7

3 4

2 5 1

2 7

最小全域木が求まっている範囲

𝑉

𝑇

, 𝑇

拡張候補辺(赤い辺)

𝑉

𝑇に属する頂点との間に辺がある

𝑉 − 𝑉

𝑇に属する頂点(青い頂点)

拡張候補辺を選んだとき

𝑉

𝑇に追加される

3 4

2 5 1

2 7

𝑣

拡張候補辺のうち,重みが最小のものを選択 その先の頂点を加えたら,拡張候補辺を更新

𝑣

𝑣

𝑣

アルゴリズムとデータ構造#14

(6)

プリムのアルゴリズム (疑似コード)

6

Procedure MST-Prim(𝐺 = (𝑉, 𝐸):

グラフ

, 𝑤:

重み

, 𝑠:

起点

) 1: 𝑣

← 𝑠; 𝑇 ← ∅; 𝑉

𝑇

← {𝑠}; 𝑑 𝑠 ← 0;

2: for all 𝑣 ∈ 𝑉

𝑉

𝑇

do 𝑑 𝑣 = ∞;

3: while (𝑉

𝑇

≠ 𝑉) do

4: for each (

頂点

𝑣

と隣接する頂点

𝑣 ∈ 𝑉 − 𝑉

𝑇

) do 5: if (𝑤 𝑣

, 𝑣 < 𝑑 𝑣 ) then

6: 𝑑(𝑣) ← 𝑤(𝑣

, 𝑣), 𝑒(𝑣) ← 𝑣

, 𝑣 ;

7: end if

8: end for

9: 𝑣

← arg min

𝑣∈𝑉−𝑉𝑇

𝑑 𝑣 ;

10: 𝑉

𝑇

← 𝑉

𝑇

∪ 𝑣

, 𝑇 ← 𝑇 ∪ 𝑒 𝑣

; 11: end while

12:

最小全域木

𝑇

を出力する

;

𝑒(𝑣)

𝑣

を端点と する拡張候補辺

𝑑(𝑣)

𝑣

を端点と する拡張候補辺 の重み

𝑉 − 𝑉

𝑇 の頂点で

𝑑(𝑣)

が最小となる 頂点を

𝑣

とする

全域木に、

𝑣

を頂点として

𝑒(𝑣)

を辺として加える

(7)

プリムのアルゴリズムの動作例

7

3

2 2 2 3

1 4 1

4

3 1 1 2 3 3

𝑣

:追加された頂点 赤字:更新された値

:拡張候補辺

:解候補

𝑠

アルゴリズムとデータ構造#14

起点

𝑠

𝑣

に (

𝑣

を全域木に入れる)

𝑑 𝑠 ← 0;

他の頂点

𝑣

は、すべて

𝑑 𝑣 = ∞

0 𝑣

(8)

起点

𝑠

𝑣

に (

𝑣

を全域木に入れる)

𝑑 𝑠 ← 0;

他の頂点

𝑣

は、すべて

𝑑 𝑣 = ∞

プリムのアルゴリズムの動作例

8

3

2 2 2 3

1 4 1

4

3 1 1 2 3

3 0

𝑣

𝑣

:追加された頂点 赤字:更新された値

:拡張候補辺

:解候補

𝑠

アルゴリズムとデータ構造#14

0 𝑣

3

2

𝑣

に隣接するすべての頂点

𝑣

に対して

𝑑 𝑣

を更新

・ 辺

(𝑣

, 𝑣)

を拡張候補辺として記憶

(9)

プリムのアルゴリズムの動作例

9

3

2 2 2 3

1 4 1

4

3 1 1 2 3 3

0 𝑣

3

2

0

𝑣

2

2

2

1

∞ ∞ ∞

𝑣

:追加された頂点 赤字:更新された値

:拡張候補辺

:解候補

𝑠

まだ全域木に入っていない頂点で

𝑑 𝑣

が最小のこの頂点を

𝑣

とする

(この頂点を全域木に入れる)

以下、同様に繰り返す

(10)

プリムのアルゴリズムの動作例

10

3

2 2 2 3

1 4 1

4

3 1 1 2 3 3

0 𝑣

3

2

0

𝑣

2

2

2

1

∞ ∞ ∞

0

𝑣

2

2

2

1

3 4

∞ ∞

2 𝑣

0

2

2 1

3 4

4 ∞

2

𝑣

0 2

2 1

1 4

3 ∞

𝑣

0 2

2

2 1

1 4

1 ∞

2

𝑣

0 2

2

2 1

1 4

1 ∞

2

𝑣

0 2

2

2

1

1 1 1

2 3

𝑣

0 2

2

2

1

1 1 1

2 3

𝑣

0 2

2

2

1

1 1 1

2 3

𝑣

:追加された頂点 赤字:更新された値

:拡張候補辺

:解候補

𝑠

(11)

(証明)

1

行目は定数時間で,

2

行目は明らかに

O(𝑛)

時間かかる.

3

行目の

while

のチェックは

𝑽

𝑽

𝑻のサイズ比較で行えるため,毎 回の実行は定数時間である.

4

行目の

for each

のループは新たな

𝑣

毎に実行される.

𝒗

は結局 はすべての

𝒗 ∈ 𝑽

が一度ずつなるので,

for each

ループの中身は

while

ループ全体で

𝟐𝒎

回実行される.

for each

ループの中身は数 値比較と代入だけなので毎回の実行は定数時間であり,グラフが 隣接リストで与えられている場合,全体で

𝐎(𝒎)

時間で実行できる.

9

行目の

arg min

の実行は,単純に行うと

𝑘

回目のループのとき

O 𝑛 − 𝑘

時間がかかる.しかし,ヒープを使えば

1

回あたり

𝐎(𝐥𝐨𝐠 𝒏)

時間でできる.

10

行目は明らかに定数時間でできるので,以上から,

while

ループ全体では

O(𝑚 + 𝑛 log 𝑛)

時間かかることになる.

グラフの連結性より

𝑚 ≥ 𝑛 − 1

なので,よって全体を

O 𝑚 log 𝑛

時間で抑えることができる. 【証明終わり】

最悪時間計算量が O(𝑚 log 𝑛) の証明

アルゴリズムとデータ構造#14 11

(12)

Quiz: 札幌から新千歳空港への最安乗り換えは?

札幌 新札幌 北広島 恵庭 千歳 南千歳 新千歳空港

12

※ JR

北海道のウェブサイト,

2019

5

21

日調べ 快速エアポート(自由席)利用の場合

260 260 260 220 170 310

450 450 360 260 350

640 640 450 400

840 640 590

840 880

1070

(13)

Quiz: 札幌から新千歳空港への最安乗り換えは?

札幌 新札幌 北広島 恵庭 千歳 南千歳 新千歳空港

13

※ JR

北海道のウェブサイト,

2019

5

21

日調べ 快速エアポート(自由席)利用の場合

260 260 260 220 170 310

450 450 360 260 350

640 640 450 400

840 640 590

840 880

1070

この

Quiz

では、費用を最小にしていますが、

他にも色々な場面で応用できます。

鉄道網

/

道路網で、かかる時間が最小の経路

-

道路網で、乗り換えの回数が最小の経路

-

道路網で、右折回数が最小の経路

どんな問題に応用できるか、考えてみてください。

(14)

最短路 (shortest path)

14

定義:

無向ネットワーク

𝐺 = (𝑉, 𝐸)

において,頂点

𝑢 ∈ 𝑉

から頂点

𝑣 ∈ 𝑉

への最短路(

shortest path

) は,

𝑢

から

𝑣

への路(

path

)のうち,

辺の重みの総和が最小のものである

※ 負の重みを許すか否かで問題の難しさが変わる

本講義では,重みはすべて非負の値をとると仮定する

3

2

2 2 3

1 4 1

4

3 1

1 2

3 3

𝑢

𝑣

𝑢

から

𝑣

への最短路

アルゴリズムとデータ構造#14

(15)

最短路木 (shortest path tree)

15

定義:

辺の重みが非負である連結な無向ネットワーク

𝐺 = (𝑉, 𝐸)

に対し,

グラフ

𝐺′

は頂点

𝑠 ∈ 𝑉

からの最短路木(

shortest path tree

)である

𝐺′

𝒔

を根とする

𝑮

の全域木で,

𝑠

から各頂点への路が最短路に なっている

3 2

2 2 3

1 4 1

4

3 1

1 2

3 3

𝑠

𝑠

を根とする最短路木

アルゴリズムとデータ構造#14

(16)

Edsger W. Dijkstra

(1930–2002)オランダ 1972年チューリング賞

最短路木を求めるダイクストラ アルゴリズム

16

[考え方] 解候補 𝑉

𝑇

, 𝑇

をある頂点

𝑠

のみからなる木

𝑠

からなる部分グラフに対する最短路木)から始めて,

最短路木

𝑉

𝑇

, 𝑇

の範囲を徐々に広げていく.

3 4

2 5 1

2 7

3 4

2 5

2 7

𝟏

3 4

2 5

7

𝟏

𝟐

𝑠 = 𝑣

𝑣

𝑣

3

𝟒

2

𝟏

5

𝟐

7

𝑣

最短路木が求まっている範囲

拡張候補辺(赤い辺)

𝑉

𝑇に属する頂点との間に辺がある

𝑉 − 𝑉

𝑇に属する頂点(青い頂点)

拡張候補辺を選んだとき

𝑉

𝑇に追加される

拡張候補辺は,

𝑢 ∈ 𝑉

𝑇

𝑣 ∈ 𝑉 − 𝑉

𝑇との間の

𝑒 = (𝑢, 𝑣)

のうち,

𝑠

から

𝑢

への最短路長

𝒅(𝒖)

𝒘(𝒆)

の和が最小のもの

3

𝟒

𝟔 𝟏

5

𝟐

7

𝑣

(17)

ダイクストラ アルゴリズム (疑似コード)

17

Procedure SPT-Dijkstra(𝐺 = (𝑉, 𝐸):

グラフ

, 𝑤:

重み

, 𝑠:

起点

) 1: 𝑣

← 𝑠; 𝑇 ← ∅; 𝑉

𝑇

← {𝑠}; 𝑑 𝑠 ← 0;

2: for all 𝑣 ∈ 𝑉

𝑉

𝑇

do 𝑑 𝑣 = ∞;

3: while (𝑉

𝑇

≠ 𝑉) do

4: for each (

頂点

𝑣

と隣接する頂点

𝑣 ∈ 𝑉 − 𝑉

𝑇

) do 5: if (𝑤 𝑣

, 𝑣 + 𝒅 𝒗

< 𝑑 𝑣 ) then

6: 𝑑 𝑣 ← 𝑤 𝑣

, 𝑣 + 𝒅 𝒗

, 𝑒(𝑣) ← 𝑣

, 𝑣 ;

7: end if

8: end for

9: 𝑣

← arg min

𝑣∈𝑉−𝑉𝑇

𝑑 𝑣 ;

10: 𝑉

𝑇

← 𝑉

𝑇

∪ 𝑣

, 𝑇 ← 𝑇 ∪ 𝑒 𝑣

; 11: end while

12:

最短路木

𝑇

を出力する

;

𝑒(𝑣)

𝑣

を端点と する拡張候補辺

𝑑(𝑣)

𝑣

を端点と する拡張候補辺 の重み

Prim

のアルゴリズムとの 違いは

+𝒅 𝒗

だけ!

時間計算量は同じ

𝑶 𝒎 𝐥𝐨𝐠 𝒏

(18)

ダイクストラ アルゴリズムの動作例

18

3

2 2 2 3

1 4 1

4

3 1 1 2 3 3

0 𝑣

3

2

0

𝑣

3

2

4

3

∞ ∞ ∞

0 3 𝑣

2

4

3

7 ∞

0 3 2

4 3

6 7

7 ∞

∞ 𝑣

2

𝑣

0 3

4 3

5 7

7 ∞

𝑣

0 3

2

4 3

5 7

6 ∞

7

𝑣

0 3

2

4 3

5 7

6 ∞

7

𝑣

0 3

2

4

3

5 7 6

7 10

𝑣

0 3

2

4

3

5 7 6

7 10

𝑠

𝑣

2 0 3 2

4

3

5 7 6

7 10

𝑣

:追加された頂点 赤字:更新された値

:拡張候補辺

:解候補

(19)

ダイクストラ アルゴリズムの直観的理解

19

3 2

2 2 3

1 4 1

4

3 1

1 2

3 3

𝑠

𝑠

辺を細かく分けて,すべての辺の重みが等しく(

1

に)なるように分割 起点

𝑠

から幅優先探索を行い,到達した順に頂点を解に加える

1

2 3 5 6 7

8 9

10

4

探索の深さ

アルゴリズムとデータ構造#14

(20)

おまけ: 最短路に関する発展的な話題

辺の重みが非負整数の場合は平均時 O(𝑚) まで改善で きる(ただし,ランダムアルゴリズムによる)

[U. Meyar, Single-source shortest-paths on arbitrary directed graphs in linear average- case time, in ACM-SIAM Symposium. Discrete Algorithms, 2001, pp. 797-806.]

ベルマン - フォード アルゴリズム( Bellman-Ford algorithm ) は正負の重みを扱えるが,最悪時計算量は O(𝑚𝑛)

与えられたグラフについて,すべての 2 頂点間の距離を 求めるワーシャル - フロイド アルゴリズム( Warshall-Floyd algorithm )の最悪時間計算量は O(𝑛 3 )

アルゴリズムとデータ構造#14 20

(21)

札幌から新千歳空港への最安乗り換え!

札幌 新札幌 北広島260 450 恵庭640 千歳810 南千歳840 新千歳空港1040

21

※ JR

北海道のウェブサイト,

2019

5

21

日調べ 快速エアポート(自由席)利用の場合

260 260 260 220 170 310

450 450 360 260 350

640 640 450 400

840 640 590

840 880

1070

参照

関連したドキュメント

They obtained some results on characterization and existence of farthest points in normed linear spaces in terms of bounded linear functionals.. Section 2 gives some

In [4] it was shown that for an undirected graph with n nodes and m (undirected) edges, more than 2m - n chips guarantee that the game is infinite; fewer than m chips guarantee that

2 A Hamiltonian tree of faces in the spherical Cayley map of the Cayley graph of S 4 giving rise to a Hamiltonian cycle, the associated modified hexagon graph Mod H (X) shown in

The previous theorem seems to suggest that the events are postively correlated in dense graphs.... Random Orientation on

In Section 3 the extended Rapcs´ ak system with curvature condition is considered in the n-dimensional generic case, when the eigenvalues of the Jacobi curvature tensor Φ are

Compactly supported vortex pairs interact in a way such that the intensity of the interaction decays with the inverse of the square of the distance between them. Hence, vortex

All three problems (1*, 2*.1 2*.2) are open; there are conjectures which would provide complete answers to these problems and some partial results supporting these conjectures

To solve the linear inhomogeneous problem, many techniques and new ideas to deal with the fractional terms and source term which can’t be treated by using known ideas are required..