5. 最短路重み δ(u, v) w(u, v) ・・・ u -> v の重み δ(u, v) ・・・ u -> v の最短路重み u -> v の経路がないとき δ(u, v) = ∞ 0 3 9 5 11 3 5 2 1 6 4 6 2 7 s
6. 単一始点最短路問題で得られる情報 (1) 始点 s から 任意の頂点 v までの最短路重み δ(s, v) (2) 任意の頂点 v までの経路 先行点 π[v] ・・・ v の前の頂点 π[v] は最短路木を構成 0 3 9 5 11 3 5 2 1 6 4 6 2 7 s 各頂点内の数字が δ(s, v) 緑の辺の集合が最短路木 「始点から特定の頂点への経路や最短路重み」ではなく、「始点から各頂点へのそれ」を求めているという点に注意
7. 派生問題 単一始点最短路問題 (1 to N) が解けると以下の問題も解ける 単一目的地最短路問題 (N to 1) 1 to N を N to 1 に変更すれば OK 単一点対最短路問題 (1 to 1) 単一始点最短路から自明 一見、 1 to 1 なので単一始点最短路を求めるよりも良い方法がありそうだが、最悪の場合に漸近的に速く実行できる物は知られていない 全点対最短路問題 (N to N) これはもっと良い方法がある -> 第 25 章
19. 4. 最短路の表現 頂点v に対して別の頂点か NIL を値とする先行点 π[v] π[v] = u ・・・ u -> v が最短路 π[u] = x ・・・ x -> u が最短路 π[x] = s ・・・ s -> x が最短路 s -> x -> v -> u が最短路 第22.2節の P RINT -P ATH (G, s, v) で最短路を出力できる
34. 収束性 ある u, v ∈ V に対して、 s ~ > u -> v を G の最短路と仮定する。辺 (u, v) に対して緩和を実行する前に d[u] = δ(s, u) が成立した時点があったとすると緩和実行後は常に d[v] = δ(s, v) が成立する 5 9 2 u v R ELAX (u, v, w) 5 7 2 u v δ(s, u) δ(s, v)
36. 経路緩和性 p = <v 0 , v 1 , ・・・ , v k > が s = v 0 から v k に至る最短路で、 p の辺が (v 0 , v 1 ), (v 1 , v 2 ), ..., (v k-1 , v k ) の順序で緩和されたとき、 d[v k ] = δ(s, v k ) が成立する。 この性質は他の任意の緩和操作とは無関係に成立する。たとえこれらの緩和操作の実行が p の緩和操作の実行とシャッフルされた順序で実行されたとしてもこの性質は成立する。
46. 擬似コード B ELLMAN -F ORD (G, w, s) I NITIALIZE -S INGLE -S OURCE (G, s) for i ← 1 to |V[G]| - 1 do for 各辺 (u, v) ∈ E[G] do R ELAX (u, v, w) for 各辺 (u, v) ∈ E[G] do if d[v] > d[u] + w(u, v) then return FALSE return TRUE 各辺の緩和操作 負の重みを持つ閉路の存在確認 ( あったら FALSE を返す ) 正当性は補題 24.4
47. アルゴリズムの正当性 なぜこれで最短路木が得られるのか ? 証明すべきこと ・・・ "|V| - 1 回繰り返した後、すべての頂点 v に対して d[v] = δ(s, v) になっている " これが分かれば先行点部分グラフの性質から最短路木が得られることが証明できる 経路緩和性で証明 ( 補題 24.2) 各辺はループ毎に必ず緩和される -> 経路緩和性の順序に沿って緩和が行われたと考えることができる、という点がポイント s -> v の経路 p = <v 0 , v 1 ... v k > としたとき、経路 p は高々 |V| - 1 個の辺を持つ。∴ k ≦ |V| - 1 i = 1, 2 ... k に対して (v i-1 , v i ) は i 回目の繰り返しで緩和される辺のひとつ -> 経路緩和性が成立する v 0 = s, V k = v であり経路緩和性から d[v] = d[v k ] = δ(s, v k ) = δ(s, v)
56. 擬似コード D AG -S HORTEST -P ATHS (G, w, s) G の頂点をトポロジカル・ソートする I NITIALIZE -S INGLE -S OURCE (G, s) for 各頂点 u ( トポロジカル・ソート順に ) do for 各頂点 v ∈ Adj[u] do R ELAX (u, v, w)
61. ダイクストラ法の方針 最小の最短路推定値を持つ頂点 u を選択し、u の出辺を緩和・・・を繰り返す 貪欲戦略 一度選択した頂点は二度と選択されない 始点 s からの最終的な最短路重みが既に決まっている頂点の集合 S を管理 u ∈ V - S u を選択 -> u を S に追加 -> u の出辺を緩和 u の選択に min 優先度付きキュー Q を用いる
62. ダイクストラのアルゴリズムの動き 0 ∞ ∞ ∞ ∞ 10 5 2 3 1 9 2 4 6 s 7 0 10 ∞ 5 ∞ 10 5 2 3 1 9 2 4 6 s 7 Q = V - S にある 選択された u ( 最小の最短路推定値 ) S にある 最初に選択された始点 s からの出辺が緩和される 始点 s は S に加えられる。次に選択されるのは、 S にまだ入ってないもので最小の最短路推定値 (5) を持つ頂点
65. 擬似コード D IJKSTRA (G, w, s) I NITIALIZE -S INGLE -S OURCE (G, s) S ← φ Q ← V[G] while Q ≠ φ do u ← E XTRACT -M IN (Q) S ← S ∪ {u} for 各頂点 v ∈ Adj[u] do R ELAX (u, v, w)
66. アルゴリズムの正当性 なぜこれで最短路木が得られるのか ? 証明すべきこと ・・・ " 停止した後、すべての頂点 v に対して d[v] = δ(s, v) になっている " これが分かれば先行点部分グラフの性質から最短路木が得られることが証明できる while ループの各繰り返しの開始直前に既に d[v] = δ(s, v) が各頂点 v ∈ S について成立している ( 定理 24.6) ことから証明できる 貪欲戦略に基づく選択が正しい
67. 計算量 min 優先度付きキューの実現方法に依存 E XTRACT -M IN が |V| 回 D ECREASE -K EY が |E| 回 二分木ヒープ E XTRACT -M IN , D ECREASE -K EY 共に O(lg V) -> ダイクストラ法 O((V+E) lg V) フィボナッチヒープ E XTRACT -M IN ・・・ O(lg V) ※ ならし D ECREASE -K EY ・・・ O(1) ※ ならし -> ダイクストラ法 O(VlogV + E)
69. 線形計画問題とは 1次式の不等式で与えられる一組の制約の下で、線形の目的関数を最適化する問題 ( 例題 ) 2 種類の容器 A, B を作るのに 2 台の機械 M 1 、 M 2 を使う 容器 A 1 個に M 1 を 2 分、 M 2 を 4 分使う 容器 B 1 個に M 1 を 8 分、 M 2 を 4 分使う 容器 A の利益は 29 円、容器 B の利益は 45 円 利益を最大化するにはどのように計画すれば良いか ?
70. 続き ( 例題の解き方 ) A, B を 1 時間あたりそれぞれ x 個、 y 個作るとすると 2x + 8y ≦ 60 4x + 4y ≦ 40 x ≧ 0, y ≧ 0 という制約の下で 目的関数 f = 29x + 45y を最大化するような解 (x i , y i ) を求めれば良い
71. 幾何学的には・・・ O x y ax + by = c a'x + b'y = c' 可能領域 各制約を満たす領域 ・・・ 可能領域にある解のうち目的関数を最大化するものを選ぶ ( 最適解は必ず可能領域の頂点になるという性質を利用する -> シンプレックス法 )
74. 差分制約式系の線形計画行列 差分制約式系の制約式は、 P280 のような行列に置き換えられる Ax ≦ b この m x n の線形計画行列 A を転置すると、 n 個の頂点と m 個の辺を持つグラフ ( 隣接行列 ) に等しい この制約グラフの単一始点最短路を求めたとき、その最短路重みの値のベクトルが実行可能解 ( 可能領域にある解のひとつ ) になる ベルマン・フォードのアルゴリズムが使える -> 差分制約式系の線形計画問題は O(VE) すなわち多項式時間で解ける