Top Banner
アルゴリズム設計 Algorithm Design 落合 秀也 離散数学
52

アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

Jun 22, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

アルゴリズム設計Algorithm Design

落合秀也

離散数学

Page 2: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

著書 Algorithm Design を読み解く

2

Page 3: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

章構成 (1/2)

1. Introduction: Some Representative Problems

2. Basics of Algorithm Analysis

3. Graphs

4. Greedy Algorithm

5. Divide and Conquer

6. Dynamic Programming

7. Network Flow

8. NP and Computational Intractability

3

Page 4: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

章構成 (2/2)

9. PSPACE: A Class of Problems beyond NP

10. Extending the Limits of Tractability

11. Approximation Algorithm

12. Local Search

13. Randomized Algorithms

Epilogue: Algorithms That Run Forever

4

Page 5: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

本日の進め方

1.これまでの講義で扱ってきた部分をピックアップ

そして、

どのような位置づけになっているか

どのような記述になっているか

を確かめる

2.関連する重要キーワードをピックアップ

そして、その意味について、考える

5

Page 6: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

6

Page 7: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

7

Page 8: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

グラフ(Graph)を数学的に捉える

• グラフGは、二つの集合で構成されている• 頂点(vertex)の集合V

• 点(point)、節点(node)とも言う

• 辺(edge)の集合E

• G (V, E) と書く• V={A, B, C, D, E, F}

• E={ e1, e2, …, e10 }

• e1={A,B}, e2={A,C}, …

8

頂点

A

B

C

D

E

F

e1

e2

e3

e4

e5

e6 e7

e8

e9

e10

3.1 Basic Definitions and Applications

Page 9: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

有向グラフ(directed graph, digraph)

9

•有向グラフDは、二つの集合で構成されている• 頂点(vertex)の集合V

• 点(point)、節点(node)とも言う

• 弧(arc): 頂点の順序対の集合A

• D (V, A) と書く• V={A, B, C, D, E, F}

• A={ e1, e2, …, e10 }

• e1=<B,A>, e2=<C,A>, …

頂点

A

B

C

D

E

F

e1

e2

e3

e4

e5

e6 e7

e8

e9

e10

向きの無いグラフを、無向グラフと呼ぶこともある

3.1 Basic Definitions and Applications

Page 10: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

グラフによる実世界のモデル化

• 交通網• 頂点:都市や駅• 辺 :道路や路線

• コンピュータ・ネットワーク• 頂点:端末やスイッチ• 辺 :ケーブル

• WWW• 頂点:ページ• 辺 : リンク

• ディジタル回路• 頂点:論理素子• 辺 :配線

• 分子構造• 頂点:原子• 辺 :結合

• 依存関係• 頂点:事象• 辺 :原因、結果の関係

• Social Network• 頂点:人間,• 辺 :関係(知人,etc.)

10

3.1 Basic Definitions and Applications

Page 11: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

道 (path)

•頂点-辺-頂点-辺-頂点-…-頂点 (ただし、同じ頂点を通らないもの)を、道(パス: path)と呼ぶ

• モデル上の道を考察する上で重要な概念

•道は

「辺の列」または「頂点の列」

で表現可能

(例) 右図の場合:

e4, e8, e10または A, D, E, F

11

A

B

C

D

E

F

e1

e2

e3

e4

e5

e6 e7

e8

e9

e10

3.1 Basic Definitions and Applications

Page 12: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

連結 (connectivity)

• グラフGにおいて、任意の2頂点間に道が存在すれば、グラフGは連結である、という。

12

A

B

C

D

E

F

e1

e2

e3

e4

e5

e6 e7

e8

e9

e10

A

B

C

D

E

F

e1

e5

e6 e7

e8

連結なグラフ 連結でないグラフ

3.1 Basic Definitions and Applications

Page 13: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

無閉路(acyclic, cycle-free)グラフ

•閉路のないグラフ

13

A

B

C

D

E

G

H

FA

B

C

D

E

G

H

F

木 (tree) 森 (forest)

連結グラフ 連結でないグラフ

退化木

3.1 Basic Definitions and Applications

Page 14: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

木の構造

•根(root)

•枝(branch)

•葉(leaf)

•親(parent)

•子(child)

•先祖(ancestor)

•子孫(descendant)

•深さ(depth, level)14

3.1 Basic Definitions and Applications

Page 15: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

15

Page 16: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

連結性の判定問題を考える

• グラフG(V,E)が与えられたとき、

Gが連結かどうか、を判定したい。

•小さいグラフなら、

紙に書いてみればよい

•一般には簡単ではない• 大きいグラフの場合

• コンピュータに判断させる場合

16グラフG

3.2 Graph Connectivity and Graph Traversal

Page 17: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

s

幅優先探索(Breadth-First Search)• 基本的な考え方

• 頂点sから開始 ・・・ L0とする

• L0から、外向きに辺をつたい、接続

する頂点を取り込む ・・・ L1とする

• L1から、外向きに辺をつたい、接続

する頂点を取り込む ・・・ L2とする

• L2から、外向きに辺をつたい、接続

する頂点を取り込む ・・・ L3とする

・・・

17

L0 L1 L2

L3

頂点sから湧き出す水によって引き起こされる洪水(Flood)が到達可能な頂点すべてに伝搬するイメージ

3.2 Graph Connectivity and Graph Traversal

Page 18: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

深さ優先探索 (Depth-First Search)

•基本的な考え方• 開始点sから、辺をたどって行きつくところ(=dead end)まで行ってみる

(ただし同じ頂点は取らない)

• 行き止まり(=dead end)に当たれば、1つ戻って、別の辺をたどってみる

• 1つ戻ってもダメなら、2つ戻ってみる

• 2つ戻ってもダメなら、3つ戻ってみる

・・・

18

s

頂点sから歩き始めた人が、すべての行き止まりにあたるまで、隈なく歩いていくイメージ

ab

c

de

f

g

h

ij

k

3.2 Graph Connectivity and Graph Traversal

Page 19: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

深さ優先探索によって作られる木

• 出来るだけ深いところまで一気に作る

• 戻りながら、別に行ける頂点があれば、そちらの枝を作る

19

s

ab

c

de

f

g

h

ij

k

s

b

c

f

g

i

j

k

h

d

a

e

深さ優先探索木と呼ばれる

3.2 Graph Connectivity and Graph Traversal

Page 20: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

20

Page 21: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

グラフを隣接リストで表現する

•隣接リスト(adjacency list)1. ある頂点vの、近隣の頂点をリストで表現したもの: Adj[v]

2. 全頂点に対して、同様のリストを作る: Adj –配列

21

1

2

3

4

5

1

2

3

4

5

2

1

1

1

3

3

4

5

2

4

4

5

着目する頂点近隣の頂点

AdjAdjの大きさは

O(n+m)n: 頂点の数m: 辺の数

3.3 Implementing Graph Traversal Using Queues and Stacks

Page 22: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

キュー(Queue)の働きと使い方

•先入れ先出し装置: Fast In Fast Out (FIFO)

•入れた順番に取り出せるメモリ:• 3, 1, 2, 8, 6, 5, 4 の順に投入すれば、

3, 1, 2, 8, 6, 5, 4 の順に出てくる

22

キューEnqueue

(キューに入れる)

Dequeue(キューから出す)

3.3 Implementing Graph Traversal Using Queues and Stacks

Page 23: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

深さ優先探索を実現する

スタック(Stack)を利用する•後入れ先出し装置: Last In Fast Out (LIFO)

•入れた順番の逆に取り出せるメモリ:(1) 3, 1, 2を投入(2) 2個取り出す(3) 8, 6 を投入(4) 3個取り出す(5) 5, 4 を投入(6) 2個取り出す 23

スタック

Push(スタックに入れる)

Pop(スタックから出す)

取り出される列は2, 1, 6, 8, 3, 4, 5となる

3.3 Implementing Graph Traversal Using Queues and Stacks

Page 24: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

24

Page 25: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

有向非巡回グラフDirected Acyclic Graph (DAG)

•閉路の無い有向グラフ

•半順序性を持つ

• トポロジカルソートにより、頂点を一列に並べることができる(全順序に対応付けできる)• 上図の場合: A, D, B, E, C, F, G など

• ジョブのスケジューリング等で使われる

25

A

B

C

D

E

F G

3.6 Directed Acyclic Graph and Topological Ordering

Page 26: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

26

Page 27: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

最短経路問題を考える

• ラベル付(重み付)グラフ G=(V,E)が与えられたとき、頂点sから頂点tへの最短経路 s-tを求めたい

•辺のラベルの意味:• 地点間の道のり

• 地点間の移動時間

• 地点間の移動に要

する燃料の量

• 状態の遷移で失う資金

•最小コストでの移動経路を発見したい27

2

3

52

2

4

1

6

7

9

8

4

18

8

4

8

5

35

1

4

2s

t

=23

=17

=18

(*) 実際はコスト16の道が存在する

4.4 Shortest Paths in a Graph

Page 28: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

ダイクストラ法(Dijkstra’s Algorithm)1959年: Edsger Dijkstraによって考案された

•考え方 -- G(V,E)に対して• 開始点 s∈Vから各頂点への最短経路を求める問題

• いま、すでに部分Hに関して、最短経路が導出されているとする• sからの距離が判明している

• Hと接する v ∈ V-Hに対し、sからの距離を考える

• その距離の最小値を与えるvを、Hに追加する

28

1

2

2

2

3

1

s

a

b

c

d

e

f

g

h

i

5

3

35

4

7

1

4 1

H

5

0

2

1

2

赤字: 判明しているsからの最短距離

6

7

10

78

6

4.4 Shortest Paths in a Graph

Page 29: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

ダイクストラ法(もう少し正確な定義)• 用語の定義:

• グラフG(V,E)において、 u, v ∈V, e=(u,v) ∈ Eとする。• 辺e=(u,v)の長さをleあるいはl(u,v)で表すとする。• 開始点をsとする。d(u)で、sからuまでの最短距離を表すとする。• prev(v)で、sからvへの最短経路におけるvの直前の頂点を表す。

• 挙動の定義: Vの部分集合 Hを以下のように作成する。• 初期状態: H = {s}, d(s)=0, d(v)=∞ (v≠s), prev(v)=null (v∈V) とする。• u∈ Hで辺e=(u, v)でつながっている v (∈ V-H) を考え、

d’(v) = min e=(u,v):u∈H { d(u) + le }を計算する。

• v ∈ V-Hにおいて、上記をさらに最小化するvを選定し、そのvをHに追加し、その距離をd(v)とおき、その時のuを用いて、prev(v)=uとする。

29

d(u1) d’(v1) = min {d(u)+le}l(u1,v1)

d(u2) d’(v2) = min {d(u)+le}l(u2,v2)

d(v1)

またはd(v2)

のどちらか片方を決定するH

4.4 Shortest Paths in a Graph

Page 30: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

ダイクストラ法: 計算量の考察

• While文の内部は n回実行される。• Foreach文の内部は nm回実行される。

実装によっては O(nm) となりえる。

• Q にリストや配列を使う場合• Q.extractMin()に O(n)の時間を要する• Q.extractMin()は n回呼び出される

O(n2)

• Q に 2分ヒープを使う場合• Q.extractMin()に O(log n)の時間を要する• Q.extractMin()の呼び出しはn回ある O(n log n)• d[v]の更新に伴うヒープの組換え処理に、O(log n)の時間を要する• d[v]の更新は、m回発生する O(m log n)

O( (n+m) log n ) 30

While Q is not emptyu := Q.extractMin()Foreach v in Adj[u]If d[v] > d[u] + length(u, v) Then,d[v] := d[u] + length(u, v)prev[v]=u

( Q.changeKey() )EndIf

EndForEndWhile

4.4 Shortest Paths in a Graph

Page 31: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

31

Page 32: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

最小全域木を考えるMinimum Spanning Tree Problem

• ラベル付(重み付)グラフ G(V, E)が与えられたとき、ラベルの和が最小となる全域木を作りたい

•全域木 G(V, T)• Vのすべての頂点で構成される木

•最小全域木∑ e∈T Ce

を最小にする Tで作られる G(V,T)

(Ceは辺eのラベル)

例:ラベルを地点間の配線コストとする

このとき、全地点がつながるネットワークを

最小コストで配線したい 32

2

3

52

2

4

1

6

7

9

8

4

18

8

4

8

5

35

1

4

2

4.5 The Minimum Spanning Tree Problem

Page 33: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

プリム法: 計算量の考察

• While文の内部は n回実行される。• Foreach文の内部は nm回実行される。

実装によっては O(nm) となりえる。

• Q にリストや配列を使う場合• Q.extractMin()に O(n)の時間を要する• Q.extractMin()は n回呼び出される

O(n2)

• Q に 2分ヒープを使う場合• Q.extractMin()に O(log n)の時間を要する• Q.extractMin()の呼び出しはn回ある O(n log n)• c[v]の更新に伴うヒープの組換え処理に、O(log n)の時間を要する• c[v]の更新は、m回発生する O(m log n)

O( (n+m) log n ) 33

While Q is not emptyu := Q.extractMin()Foreach v in Adj[u]If c[v] > length(u, v) Then,c[v] := length(u, v)prev[v] := u

( Q.changeKey() )EndIf

EndForEndWhile

4.5 The Minimum Spanning Tree Problem

Page 34: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

34

Page 35: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

最短経路問題の解法

• ダイクストラ法• すべての辺の重みが非負の場合に適用可能

• 貪欲法(Greedy Algorithm)の一種

• ベルマン・フォード法• 辺の重みに負があっても良いケースがある(有向グラフで、有向閉路の和が負でない場合)

• 動的計画法(Dynamic Programming)の一種

35

5

-5

7

9

-2

4

st

コストが、資金の支出の場合、マイナスは、収入を意味する

6.8 Shortest Paths in a Graph

Page 36: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

ベルマン・フォード法• i回目から、i+1回目への計算(漸化式)を考える

• ここで、iは、拡散量(sから伝搬した辺の数)に相当する

• i回目(i個の辺の伝搬を考えたとき)における、頂点sから頂点vまでの最短距離をOPT(i,v)とする。このとき、以下が言える。

OPT(i+1, v) = minu∈nbr(v) {OPT(i,u)+Cuv}

(*) ここでnbr(v)は、vの近隣頂点(自分自身も含む)の集合とする

またCuvは辺(u,v)のコストとし、便宜上Cvv=0とする。

•初期条件 (i=0のとき)• OPT(0,s)=0, OPT(0,v)=∞ (v∈V, v≠s)

36

6.8 Shortest Paths in a Graph

Page 37: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

OPT(i+1, v) = minu∈nbr(v) {OPT(i,u)+Cuv}の意味

37

v

a

bc

Cbv

Cav

Ccv

OPT(i,a)

OPT(i,b)

OPT(i,c)

Cvv (=0) OPT(i+1,v)は、上記で最小のものとする

OPT(i,v)

OPT(i,v)

OPT(i,a)+Cav

OPT(i,b)+Cbv

OPT(i,c)+Ccv

6.8 Shortest Paths in a Graph

Page 38: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

38

Page 39: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

ベルマンフォード法の分散化

• グラフ G(V,E)において、各頂点は、辺で接続するもう片方の頂点と通信を行うものとする。

• このとき、• 各頂点uから、頂点v (∈nbr(u))に向けて、OPT(u)+Cuvを発信する

• 受信側の頂点vでは、受信した値の中(他者からのものも含む)で、最小のものをOPT(v)として選ぶ

• 開始点sのOPT(s)は 0に固定する

という処理を行うと、ベルマンフォード法を分散的に実装できる

39

u v

OPT(u) + Cuv

6.9 Shortest Paths and Distance Vector Protocols

Page 40: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

ベルマンフォード法の分散化:各頂点の動作

40

u

v3

v1 v2

OP

T(u

) +

Cu

v3

OPT(u)

頂点uからの送信(定期的に行う)

v

u3

u1 u2

OP

T(u

3)

+ C

u3

v

If OPT(v) > 受信結果OPT(v) :=受信結果

EndIf

頂点vでの受信と処理

6.9 Shortest Paths and Distance Vector Protocols

Page 41: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

講義で扱った内容はどこで触れられているか

3 Graph 3.1 Basic Definitions and Applications

3.2 Graph Connectivity and Graph Traversal

3.3 Implementing Graph Traversal Using Queues and Stacks

3.6 Directed Acyclic Graphs and Topological Ordering

4 Greedy Algorithm4.4 Shortest Paths in a Graph

4.5 The Minimum Spanning Tree Problem

6 Dynamic Programming6.8 Shortest Paths in a Graph

6.9 Shortest Paths and Distance Vector Protocols

7 Network Flow7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

41

Page 42: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

最大流問題Maximum Flow Problem

• ラベル付(重み付)グラフ G(V, E)が与えられたとき、流入点sから流出点tまでの総流量を最大化したい

•辺のラベルの意味:流量の容量(最大量)

• 運べる荷物の量

• 流せる水の量

• 送れるパケット数

• このとき、sに流れ込む流量 = tから流れ出る流量 (グラフの外から見た場合)

sから流れ出す流量 = tに流れ込む流量 (グラフの中で見た場合)

である。

この量の最大値(とそのときのフロー)をどう求めればよいか?42

2

3

52

2

4

1

6

7

9

8

4

18

8

4

8

5

35

1

4

2

st

2

25

5

5

3

5

3

1 11

11

44410

10

7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

Page 43: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

フローの定式化

•辺を流れるフロー

•頂点への流入量と流出量

43

u v

f(u,v) f(u, v)≦ C(u, v)

f(v, u) = - f (u, v)∴ -C(v, u) ≦ f(u, v)≦ C(u, v)

ただし C(u, v) = C(v, u)とは限らない

C(u,v)

C(v,u)

v

流入量: fin(v) = ∑ u∈V, f(u,v)>0 f(u,v)

流出量: fout (v) = ∑ w∈V, f(v,w)>0 f(v,w)

v≠s,tであれば fin(v) = fout(v)

総流量: total(f)= fout(s) = fin(t)

7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

Page 44: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

フォード・ファルカーソン法Ford-Fulkerson Algorithm

※考え方• s-t間の何らかの道を考え、その流量の上限を算出する

• そのフローfを容量Cから引いた値(残余容量)を計算し、グラフから差し引く ・・・そのグラフをGfとする

• Gfに対して、同様のことをする(つまり、s-t間の何らかの道を考え、その流量の上限を算出し、総フローを算出し、容量から差し引いて・・・)

• s-t間の道が無くなれば、終了

44

s t

u

v20

30

10

20

20

20

30

10

10

10

s t

u

v40

10

10

0

40

0

50

10

10

10

20

フローに沿って

-20

10

s t

u

v40

20

0

0

40

0

40

20

0

20フローに沿って(さらに)

-10

s-t間の道がなくなった(容量>0の弧についてのみ考える)

このとき差し引いている総フローが求める最大流

7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

Page 45: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

フォード・ファルカーソンのアルゴリズム

Max-Flow(G(V,E), s, t)

∀e∈E, f(e)=0

While any paths from s to t exist in residual graph Gf

P := simple-path(s,t) in Gf

f’ := augment(f, P)

Update f to be f’

Update Gf to be Gf’

EndWhile

Return f45

フロー f に道Pを流れるフローの上限分を追加し、それを f’ に代入する処理

道の発見には「幅優先探索」「深さ優先探索」などが用いられる

※このアルゴリズムの停止性について考察してみよ

7.1 The Maximum-Flow Problem and the Ford-Fulkerson Algorithm

Page 46: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

本日の進め方

1.これまでの講義で扱ってきた部分をピックアップ

そして、

どのような位置づけになっているか

どのような記述になっているか

を確かめる

2.関連する重要キーワードをピックアップ

そして、その意味について、考える

46

Page 47: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

キーワード

• Greedy Algorithm (貪欲アルゴリズム)

• Divide and Conquer (分割統治法)

• Dynamic Programming (動的計画法)

• NP and Computational Intractability

• Approximation Algorithms

• Local Search

• Randomized Algorithms

47

Page 48: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

Greedy Algorithm (貪欲アルゴリズム)

• 「小さなステップで、より良い方向に進んでいくと、最終的に、最適解に到達できる」アルゴリズムのファミリー

• 「ローカルな問題を解決し、積み上げていくと(それ自体は正しいのかどうか自明ではないが)、最終的に全体の問題を解決できる」アルゴリズムのファミリー

• 例)• ダイクストラ法• プリム法• Interval Scheduling 問題• Optimal Caching問題• Huffman Codes and Data Compression

48

Page 49: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

Divide and Conquer (分割統治法)

• 「一つの問題を、複数の部分問題に分割し、それぞれの部分問題について、同様の方法で解き、それらの解を処理することで、問題の解に到達する」アルゴリズムのファミリー

• 「問題の分割・統合を再帰的に行うことによって問題を解く」アルゴリズムのファミリー

• 例)

• Mergesort

• Finding the Closest Pair of Points

• Convolutions and the Fast Fourier Transform

49

Page 50: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

Dynamic Programming (動的計画法)

• 「貪欲アルゴリズムや分割統治法よりも強力に問題を解決する」アルゴリズム

• 「貪欲アルゴリズムや分割統治法よりも適用範囲の広い」アルゴリズム

• 「広い解の空間を作り出し、個別に最適解を計算し、注意深くそれを伝搬させることで全体的な最適解に到達する」アルゴリズム

• 「漸化式を走らせることで、力学的にそこにたどり着く(収束する)」アルゴリズム

• 「分割統治法的な考えの潜んでいる」アルゴリズム

• 「貪欲アルゴリズムの反対の方向から攻める」アルゴリズム

•例) ベルマンフォードのアルゴリズム50

Page 51: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

計算不可能な問題への実用的アルゴリズム

• NP and Computational Intractability• 「計算複雑性」が理由で解けない問題が存在する。

• Approximation Algorithms• 最適解が得られなくても近似解を得られるものがある• (実用上十分であれば、良い、という考え方)

• Local Search• いま考えられるよりも、より良い解にたどり着く(ただし、それが全体の最適解となっているかは不明)

• (実用上十分であれば、良い、という考え方)

• Randomized Algorithms• 対象の期待値を問題にすることもある(入力データを確率的に与えられている等)

• 動作を乱数にゆだねるものもある51

Page 52: アルゴリズム設計 Algorithm Design - WIDE Projectjo2lxq/dm/lecture/12.pdfAlgorithm Design 落合秀也 離散数学 著書Algorithm Design を読み解く 2 章構成(1/2) 1.

「離散数学」講義の内容(まとめ)

52

4月8日 集合4月15日関係と関数4月22日順序集合と束5月6日 命題計算5月16日ブール代数5月20日グラフの構造と種類5月27日グラフ探索アルゴリズム6月3日 最短経路問題6月10日演習(レポート提出)6月17日最小全域木、最大流問題6月24日平面グラフ7月1日 スキップグラフ7月8日アルゴリズム設計