アルゴリズム設計 Algorithm Design 落合 秀也 離散数学
アルゴリズム設計Algorithm Design
落合秀也
離散数学
著書 Algorithm Design を読み解く
2
章構成 (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
章構成 (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
本日の進め方
1.これまでの講義で扱ってきた部分をピックアップ
そして、
どのような位置づけになっているか
どのような記述になっているか
を確かめる
2.関連する重要キーワードをピックアップ
そして、その意味について、考える
5
講義で扱った内容はどこで触れられているか
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
講義で扱った内容はどこで触れられているか
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
グラフ(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
有向グラフ(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
グラフによる実世界のモデル化
• 交通網• 頂点:都市や駅• 辺 :道路や路線
• コンピュータ・ネットワーク• 頂点:端末やスイッチ• 辺 :ケーブル
• WWW• 頂点:ページ• 辺 : リンク
• ディジタル回路• 頂点:論理素子• 辺 :配線
• 分子構造• 頂点:原子• 辺 :結合
• 依存関係• 頂点:事象• 辺 :原因、結果の関係
• Social Network• 頂点:人間,• 辺 :関係(知人,etc.)
10
3.1 Basic Definitions and Applications
道 (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
連結 (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
無閉路(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
木の構造
•根(root)
•枝(branch)
•葉(leaf)
•親(parent)
•子(child)
•先祖(ancestor)
•子孫(descendant)
•深さ(depth, level)14
3.1 Basic Definitions and Applications
講義で扱った内容はどこで触れられているか
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
連結性の判定問題を考える
• グラフG(V,E)が与えられたとき、
Gが連結かどうか、を判定したい。
•小さいグラフなら、
紙に書いてみればよい
•一般には簡単ではない• 大きいグラフの場合
• コンピュータに判断させる場合
16グラフG
3.2 Graph Connectivity and Graph Traversal
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
深さ優先探索 (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
深さ優先探索によって作られる木
• 出来るだけ深いところまで一気に作る
• 戻りながら、別に行ける頂点があれば、そちらの枝を作る
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
講義で扱った内容はどこで触れられているか
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
グラフを隣接リストで表現する
•隣接リスト(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
キュー(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
深さ優先探索を実現する
スタック(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
講義で扱った内容はどこで触れられているか
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
有向非巡回グラフ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
講義で扱った内容はどこで触れられているか
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
最短経路問題を考える
• ラベル付(重み付)グラフ 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
ダイクストラ法(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
ダイクストラ法(もう少し正確な定義)• 用語の定義:
• グラフ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
ダイクストラ法: 計算量の考察
• 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
講義で扱った内容はどこで触れられているか
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
最小全域木を考える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
プリム法: 計算量の考察
• 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
講義で扱った内容はどこで触れられているか
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
最短経路問題の解法
• ダイクストラ法• すべての辺の重みが非負の場合に適用可能
• 貪欲法(Greedy Algorithm)の一種
• ベルマン・フォード法• 辺の重みに負があっても良いケースがある(有向グラフで、有向閉路の和が負でない場合)
• 動的計画法(Dynamic Programming)の一種
35
5
-5
7
9
-2
4
st
コストが、資金の支出の場合、マイナスは、収入を意味する
6.8 Shortest Paths in a Graph
ベルマン・フォード法• 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
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
講義で扱った内容はどこで触れられているか
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
ベルマンフォード法の分散化
• グラフ 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
ベルマンフォード法の分散化:各頂点の動作
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
講義で扱った内容はどこで触れられているか
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
最大流問題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
フローの定式化
•辺を流れるフロー
•頂点への流入量と流出量
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
フォード・ファルカーソン法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
フォード・ファルカーソンのアルゴリズム
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
本日の進め方
1.これまでの講義で扱ってきた部分をピックアップ
そして、
どのような位置づけになっているか
どのような記述になっているか
を確かめる
2.関連する重要キーワードをピックアップ
そして、その意味について、考える
46
キーワード
• Greedy Algorithm (貪欲アルゴリズム)
• Divide and Conquer (分割統治法)
• Dynamic Programming (動的計画法)
• NP and Computational Intractability
• Approximation Algorithms
• Local Search
• Randomized Algorithms
47
Greedy Algorithm (貪欲アルゴリズム)
• 「小さなステップで、より良い方向に進んでいくと、最終的に、最適解に到達できる」アルゴリズムのファミリー
• 「ローカルな問題を解決し、積み上げていくと(それ自体は正しいのかどうか自明ではないが)、最終的に全体の問題を解決できる」アルゴリズムのファミリー
• 例)• ダイクストラ法• プリム法• Interval Scheduling 問題• Optimal Caching問題• Huffman Codes and Data Compression
48
Divide and Conquer (分割統治法)
• 「一つの問題を、複数の部分問題に分割し、それぞれの部分問題について、同様の方法で解き、それらの解を処理することで、問題の解に到達する」アルゴリズムのファミリー
• 「問題の分割・統合を再帰的に行うことによって問題を解く」アルゴリズムのファミリー
• 例)
• Mergesort
• Finding the Closest Pair of Points
• Convolutions and the Fast Fourier Transform
49
Dynamic Programming (動的計画法)
• 「貪欲アルゴリズムや分割統治法よりも強力に問題を解決する」アルゴリズム
• 「貪欲アルゴリズムや分割統治法よりも適用範囲の広い」アルゴリズム
• 「広い解の空間を作り出し、個別に最適解を計算し、注意深くそれを伝搬させることで全体的な最適解に到達する」アルゴリズム
• 「漸化式を走らせることで、力学的にそこにたどり着く(収束する)」アルゴリズム
• 「分割統治法的な考えの潜んでいる」アルゴリズム
• 「貪欲アルゴリズムの反対の方向から攻める」アルゴリズム
•例) ベルマンフォードのアルゴリズム50
計算不可能な問題への実用的アルゴリズム
• NP and Computational Intractability• 「計算複雑性」が理由で解けない問題が存在する。
• Approximation Algorithms• 最適解が得られなくても近似解を得られるものがある• (実用上十分であれば、良い、という考え方)
• Local Search• いま考えられるよりも、より良い解にたどり着く(ただし、それが全体の最適解となっているかは不明)
• (実用上十分であれば、良い、という考え方)
• Randomized Algorithms• 対象の期待値を問題にすることもある(入力データを確率的に与えられている等)
• 動作を乱数にゆだねるものもある51
「離散数学」講義の内容(まとめ)
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日アルゴリズム設計