グラフ探索 分割統治法と ダイナミックプログラミ … › japanese ›...
TRANSCRIPT
グラフ探索
+
分割統治法と
ダイナミックプログラミング
アルゴリズム論 6回目
平成24年11月2日(金)
グラフの諸概念 • グラフとは(有限個の)点=頂点と(有限個の)線=辺,エッジを結んだもの
• 頂点(vertex),辺(edge)
• 隣接(adjacent):1本のエッジの両端にある頂点は隣接している
• 近傍(neighbors):隣接している頂点集合
• 路(path):ある頂点から他の頂点に至る一連のエッジ
• 単純路(simple path):同じ節点を2回以上使わない路
• サイクル(cycle):最初と最後が同じ節点である単純路.
• ツリー(tree):サイクルのないグラフ.
• 連結グラフ:拡張点から他の全ての頂点へのパスが必ず1つ以上あるグラフ←→不連結グラフ
• 有向グラフ:エッジに方向性あがる←→無向グラフ
• 重み付きグラフ:エッジに重きがある場合
• ネットワーク:重み付き有向グラフ
オイラーの一筆書き定理
ロシアのケーニヒスベルグという町を流れるプレーゲル川には、中央に島があって、その島と川の両岸との間には7つの橋がかかっていたという。
昔から、その町に住む人々が議論していた問題は、「7つの橋すべてを、1つの橋を複数回渡ることなくすべて渡り終えるような橋の渡り方を見つけられるのか?」 であった。
ケーニヒスベルグの橋
陸地を頂点,橋をエッジとすればどのようなグラフ表現になるか?
ケーニヒスベルグの橋のグラフ表現 (世界最初のグラフ応用例?)
• グラフの全ての辺をちょうど1回ずつ通って、開始点に戻るような道を オイラー閉路という. オイラー閉路が存在すれば、そのグラフを一筆書きすることができる.
• Gがオイラー閉路を持つ ⇔ Gの全ての頂点に対して、繋がっている辺の 数は偶数本である
ケーニヒスベルグの橋のグラフ表現 (世界最初のグラフ応用例?)
別の橋のグラフ表現
別の橋のグラフ表現
グラフの適用事例
• 具象事物とそれらの接続関係を抽象的に表現したものとしてグラフを利用する
• 物理的なつながり
町と道,都市と空路,Web,...
• ビジネスプロセス,作業工程計画,...
グラフの表現
• グラフ→隣接行列で表現
A
B
C
D
A B C D
A
B
C
D
1 1 1 0
1 1 1 1
1 1 1 1
0 1 1 1
節点の分類と隣接節点の取り扱い
• 既に訪問した節点集合:T
• Tの隣接節点集合:F
• それ以外の節点集合:U
Fの選択方法によりグラフ探索が変わる
(1)深さ優先探索(DFS, Depth First Search)
(2)幅優先探索(BFS, Breadth First Search)
深さ優先探索,縦型探索 DFS
• 節点を辿れる限り深く探索し続ける
①出発点の隣接節点集合をリストFに記録する
②リストFの第一要素の節点aを選びaを訪れる
③aとaの隣接節点集合を置換する
(二重登録があればリストの後ろを削除する)
④Fの要素が空になるまで②と③を繰り返す
DFSの実行例
1
3
2
4
5
6
7
8
9
10
11
15
14
13
12
1
2
3
4
5
6
7
8
9
10
隣接節点集合F
DFSの実行例
1
3
2
4
5
6
7
8
9
10
11
15
14
13
12
1 2 5 3
2 4 5 3
4 7 8 5 3
隣接節点集合F 訪問先
幅優先探索,横型探索 BFS
• 隣接節点を順次訪問し,横方向に節点を辿る
①出発点の隣接節点集合をリストFに記録する
②リストFの第一要素の節点aを選びaを訪れる
③リストFよりaを削除し,aの隣接節点集合をリストFの最後に追加する
(二重登録があればリストの後ろを削除する)
④Fの要素が空になるまで②と③を繰り返す
BFSの実行例
1
3
2
4
5
6
7
8
9
10
11
15
14
13
12
1
2
3
4
5
6
7
8
9
10
隣接節点集合F
BFSの実行例
1
3
2
4
5
6
7
8
9
10
11
15
14
13
12
1 2 5 3
2 5 3 4
5 3 4 8 9 6
3
隣接節点集合F
Divide&Conquer(分割統治法)
• 全体を部分に分割し,各部分を解き,その結果を統合して解を得る方法
• 全体の問題構造と部分の問題構造が同型であり,再帰的(recursive)という.
• 再帰法:処理手順を自分自身を使って定義する方法.
階乗関数 f(n)=n! の再帰的定義
f(3) 3 f(2)
2 f(1)
1 f(0)
f(0)=1
n=0 -> f(n)=1
n not =0 -> f(n)=n x f(n-1)
最大値を再帰的に求める
アルゴリズム?
(通常はコストが大きいので使わない)
データ集合をS,データ数をn
n=1 → それが最大値
n=2 → 2数を比較して大きいほうが最大値
n>2 → Sを二分して(S1,S2),S1とS2の最大値を求める
再帰的図形:コッホ曲線
1.線分を3等分する
2.真中の部分を正三角形を埋め込んだ形に曲げる
3.できた4辺について,1と2の同じ操作を適用する
上記操作を繰り返し適用した結果得られる曲線
→コッホ曲線と呼ぶ
→n回操作後の長さは?
→n回操作後の面積は?
→どの部分を拡大しても同じ図形が現れる再帰的な図形
→自己相似性を持つ図形
→フラクタル
シルピンスキーのギャスケット?
DP vs Divide&Conquer ダイナミックプログラミング vs 分割統治法
• 問題を(適切かどうかは不明であるが)単純な小問題に分ける
• 小問題解決結果を積み上げて最終結果を得る
• ボトムアップ解決法
• 問題(全体)を適切な小問題(小さな部分)に分ける
• 小問題解決結果を統合して全体の解を得る
• トップダウン解決法
ダイナミックプログラミング(DP)
• 多段階決定理論
• ある段階の決定はその直前の段階の結果の影響のみを受ける(マルコフ性)
• よって,その他の結果を考慮しないですむので効率のよいアルゴリズムとなる
3つのDP問題
•ナップザック問題
•最短経路選択問題
•数値的解法
ナップザック問題
品物 0 1 2 3 4
大きさ 2 3 5 7 9
価値 2 4 7 11 14
限られた大きさの袋(ナップザック)に
最大価値となる品物を詰め込み方を求める問題
Eg ナップザックの大きさ=10の場合は?
品物0を5個選択するとその価値は→
品物0,1,2を選択するとその価値は→ 腕づくの方法→25組合せを調べればよい
ナップザック問題とDP
1番目の小問題
• 単純な小問題への分割は? 品物数を限定すればよい
ナップザックの大きさを16にして以下考える.
①品物0(大きさ2)だけで詰め込む →この場合の最大価値は?
ナップザックの大きさ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
価値の合計 0 0 2 2
最後に入れた品物 -1 -1 0 0
2番目の小問題
①品物0だけを使ったナップザック小問題の解
を使って②品物0と1を使ったナップザック小問題を解くことを考える
①の表で品物1を詰めることができるケースを調べ,「品物0だけの価値」と「品物0+1の価値」を比較して最大価値を更新していく
大きさ5のナップザックに
品物1(大きさ3)を入れるかどうか?
品物0(大きさ2,価値2) だけのケース
品物0(大きさ2,価値2)と
品物1(大きさ3,価値4)のケース
品物0,価値=2
品物0,価値=2
すきま
大きさ5
全体価値=4
品物0,価値=2
品物1,価値=4
全体価値=6
X
5
4
0
5
6
1
6
6
0
6
8
1
大きさ6のナップザックに
品物1(大きさ3)を入れるかどうか?
品物0(2)
品物0(2)
品物0(2)
品物0(2)
品物1(4)
品物1(4)
品物1(4)
すきま
全体価値=6 全体価値=6 全体価値=8
X X
②品物0と1を使用したナップザック小問題を解け
ナップザックの大きさ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
価値の合計 0 0 2 4 4 6 8
最後に入れた品物 -1 -1 0 1 0 1 1
ナップザックの大きさ3の場合は更新されるが
大きさ4の場合は更新されない
3~5番目の小問題
③品物0と1と2を使用したナップザック小問題
④品物0と1と2と3を使用したナップザック小問題
⑤品物0と1と2と3と4を使用したナップザック小問題
aからbへの最短経路は?
a
b
段階 1 2 3 4
レベル1
レベル2
レベル3
問1 腕ずくの方法で調べると(総ルート数は)?
10段階10レベルの場合は?
100段階100レベルの場合は?
移動コスト
1
2
3
2
1
第1段階に行くコスト
a 3
2
1
1段階
第2段階レベル1に行くコスト
3
2
1
a
段階 レベル1 1 2
1
2
3
移動コスト
前段階のコスト
1+3=4, 3+1=4, 2+2=4 -> 4
第2段階レベル2に行くコスト
3
2
1
段階
レベル2
1 2
1
2
3
前段階のコスト 移動コスト
4
1+2=3, 3+3=6, 2+1=3 -> 3
1
段階 1 2
1 2
3 2
3 3
4
第2段階レベル3に行くコスト
1+1=2, 3+2=5,2+3=5 -> 2
第2段階終了時
1
段階 1
2
2
2
3 3
4
a
第3段階終了時
1
段階 1
2
2
2
3 3
4
a ?
?
?
3
2
1
3 4
第4段階終了時
1
段階 1
2
2
2
3 3
4
a 3
5
4
?
?
?
最適ルート
1
段階 1
2
2
2
3 3
4
a 3
5
4
6
5
4
b 5
3
2
1
動的計画法と環境問題
• 3期で化学物質を10トン生産
• でも副産物として有害物が作られる
• 有害物は気候(期)によって変動
• 第1期目:化学物質をx生産すると有害物は2x2
• 第2期目:化学物質をx生産すると有害物はx2
• 第3期目:化学物質をx生産すると有害物は3x2
有害物総量を最小にするには化学物質をどのように生産すればいいか?
DPによる数値的解放
• 1,2,3期の化学物質生産量をx1,x2,x3
x1+x2+x3=10
F(x1,x2,x3)=2X1 2+X22+3X32 を最小
start
2
1
3
4
5
7
6
8
9
10
有害物
1期 2x1 2
200
162
128
98
72
50
32
18
8
2
0
0
2
1
3
4
5
7
6
8
9
10
有害物
2期 x2 2
0
1期までの
化学物質
生産量
2期までの
化学物質
生産量
67
54
43
33
24
17
11
6
3
1
0
10
有害物
3期 3x3 2
3期までの
化学物質
生産量
5,0->50+0=50
4,1->32+1=33
3,2->18+4=22
2,3->8+9=17
1,4->2+16=18
0,5->0+25=25
67
57
55
60
72
92
119
153
195
244
300
化学 有害
1期目 3 18
2期目 5 25
3期目 2 12
計 10 55
拘束条件をもつ関数の極値
• 大学入試問題: 1辺がx軸に平行な長方形で,方程式 で表される図形(楕円)に内接するもの全体の中で,最大の面積をもつ長方形の面積を求めよ.
• 関数 f (x, y, z)の極値 →x, y, zで偏微分して連立方程式を解く
• 拘束条件g下での関数 f (x, y, z)の極値 →ラグランジェの未定乗数法 →~f = f – λg の極値を求める (拘束条件を含めた式を作って, 変数束縛を解く)
116
22
yx