Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
2013 年 3 月 20 日 @ NTT DATA 駒場研修センター第 12 回日本情報オリンピオック春季トレーニング合宿             様々な全域木問題             前原 貴憲 (@tmaehara)         ...
自己紹介• 前原 貴憲(まえはら たかのり)• Twitter: @tmaehara• Web: http://www.prefield.com (Spaghetti Source)• 略歴:   2004 沼津工業高等専門学校卒   2007 ...
全域木問題        3/ 71
木・全域木• 無向グラフ G = (V, E),枝重み w : E → R  – V :頂点集合,E :枝集合   ※基本的に連結なグラフだけ考える – 木(tree):閉路のない連結部分グラフ(枝集合) – 森(forest):閉路のない部分...
全域木に関する問題はとても多い!しかも 効率的に解ける問題 がわりと多い  → 効率的解法のテンプレ •   全域木存在判定     •   最速全域木 •   最小全域木       •   ロバスト最小全域木 •   最小比全域木     ...
この講義の目標 • マイナーな全域木問題 を題材にして • 解ける問題 の解法パターンを理解する題材•    最小全域木                 • 最小直径全域木•    葉指定最小全域木                 • 逆最小全...
だいぶ難しい内容なので全部理解できなくても大丈夫!• 問題の定義・解法の方針が分かれば上出来• 細かい部分が気になったら調べましょう(see: 参考文献)【前提知識】秋葉・岩田・北川:プログラミングコンテストチャレンジブックCormen-Lei...
最小全域木        8/ 71
最小全域木• 入力 重み付きグラフ G = (V, E), w : E → R• 問題: 重み和が最小の全域木を求めよ              3                          1          1       2  ...
最小全域木• 入力 重み付きグラフ G = (V, E), w : E → R• 問題: 重み和が最小の全域木を求めよ              3                          1          1       2  ...
最小全域木• 入力: 重み付きグラフ G = (V, E), w : E → R• 問題: 重み和が最小の全域木を求めよ• 解答:貪欲法(Kruskal) 1. 枝の軽い順に採用していく 2. ただし,閉路ができる場合は無視Q. なぜ貪欲で解け...
最適化問題を考える際の基本                  {∑                       e∈X   w(e) 閉路なし       f (X) :=                  +∞               閉...
最小全域木問題の凸不等式                   {∑                        e∈X   w(e) 閉路なし        f (X) :=                   +∞             ...
凸不等式が成り立つこと(左辺有限 ⇒ 右辺有限)f (X) + f (Y ) ≥ f (X − e + e′ ) + f (Y + e − e′ ) e                        ≥       e′     (よくある教科...
凸不等式を使った証明T ∗ 最適解,T 貪欲解について凸不等式を書く f (T ) + f (T ∗ ) ≥ f (T − e + e′ ) + f (T ∗ + e − e′ ) ∴ f (T ) ≥ f (T − e + e′ ) ∴ w(...
最小全域木 まとめ• 最小全域木問題は貪欲で解ける 関数が満たす不等式を考える  特に凸不等式が成り立つとハッピー 凸不等式が成り立てば貪欲で解ける  (「貪欲」1ステップが複雑な場合も;後述)(例:w(X)2 の最小化など:凸不等式成立なので...
葉を指定した最小全域木              17/ 71
葉を指定した最小全域木• 入力 重み付きグラフ G = (V, E), w : E → R+ 頂点の部分集合 U ⊆ V• 問題:  U が葉である 全域木の中で,重み和最小のもの                                ...
グラフ問題の大原則:頂点問題 vs 枝問題 • 頂点に対する問題は解きにくい • 枝に対する問題は解きやすい    頂点に対する問題     枝に対する問題    ハミルトンパス       オイラーパス      頂点被覆          ...
頂点条件を枝条件で書き換える           (1) U 同士を繋ぐ枝を使わないU を葉にする ⇐⇒ (2) U とそれ以外を繋ぐ枝を               |U | 本以上使わない(1):U 同士を繋ぐ枝は先に除去(2):全域木は少...
葉を指定した最小全域木 まとめ• 頂点条件を枝条件に書き換える – U を葉にせよ ⇒ U と接続する枝を減らせ ⇒ Kruskal の変形版が適用可能基本的に「頂点は難しい / 枝は簡単」⇒ できるだけ枝条件であらわすようにする(例:最長しり...
最小比全域木         22/ 71
最小比全域木• 入力: 2種類の重み付きグラフ G = (V, E), w1 , w2 : E → R0• 問題:        w1 (T ) 重み比              を最小化する全域木を出力        w2 (T )     ...
パラメタを用いた分数関数の凸化                {                    w1 (X)/w2 (X)      閉路なし     f (X) :=                    +∞            ...
パラメトリックアプローチf :分数関数,g(t) = minT {w1 (T ) − tw2 (T )} (1) min f (T ) = t∗ ⇐⇒ g(t∗ ) = 0 (2) g(t) は t の単調減少凹関数              ...
g のゼロ点の計算方法Find 0 = g(t∗ ), g(t) = minT {w1 (T ) − tw2 (T )}• 方法1:二分探索  ゼロと大小比較して範囲を絞っていく• 方法2:Dinkelbach の方法  (1) g(t(k) ...
最小比全域木 まとめ              f (T ) := w1 (T )/w2 (T )         ⇒ g(t) := min{w1 (T ) − tw2 (T )}                     T• f にパラメタ...
第 k 最小全域木            28/ 71
第 k 最小全域木• 入力: 重み付きグラフ G = (V, E), w : E → R 正整数 k• 問題: 重み和が k 番目に小さな全域木を出力(注意:k = 1 のとき最小全域木)ヒント 1:1 番目,2 番目,…と順番に求めるヒント ...
簡単のため:第 2 最小全域木(1) MST を計算(2) MST の枝を 1 本使用禁止 にして再び MST 計算    MST のすべての枝 n 通りについて実行して min をとる正当性:•「2ndMST で使わない 1stMST の枝」...
第 k 最小全域木:優先度付き探索 Q ← (∅, MST) while Q ̸= ∅    (banList, spanningTree) ← Q    print (spanningTree)    for each e in spanni...
前処理 1:絶対使う枝は縮約するT :全域木,枝 e ∈ T の 交換可能枝C(e):   C(e) = {e′ ̸∈ T : T − e + e′ は全域木 }       ⇐⇒ e′ の両端をつなぐ T 上の経路に e がある全域木 T で...
前処理 2:絶対使わない枝は捨てるT :全域木,枝 e′ ̸∈ T の 交換可能枝C(e′ ):   C(e′ ) = {e ∈ T : T − e + e′ は全域木 }        ⇐⇒ e′ の両端をつなぐ T 上の経路の枝全域木 T ...
不可避ロスの計算前処理 1:e ∈ T を禁止するときのロス計算前処理 2:e′ ̸∈ T を使うときのロス計算• 最小全域木上で 経路クエリ ができれば OK  前処理 1:e′ の両端経路上の枝について w(e′ ) で更新  前処理 2:...
第 k 全域木 まとめ• 前処理 1 で k 頂点に減らす• 前処理 2 で 2k − 1 枝に減らす    → 最小全域木上の経路クエリ• 優先度付き探索 O(k2 α(k) + n log n)k-best 問題の基本は 優先度付き探索 +...
最小直径全域木          36/ 71
最小直径全域木• 入力 重み付きグラフ G = (V, E), w : E → R+• 問題: 全域木 T で,直径が最小のもの(木の直径:二点対間距離の最大値)ヒント:   「グラフのどまんなか」を探す  ⇒ 「どまんなか」からの最短路木 =...
グラフの絶対中心グラフ G の絶対中心:maxv∈V d(c, v) が最小の点絶対中心は頂点ではない可能性がある                  6                  c 絶対中心からの最短路木 = 最小直径全域木⇒ どの枝...
枝の内点からの距離枝 (u, v) の内点 c から w への距離:d(c, u) = t として gw (t) = min{t + d(u, w), d(u, v) − t + d(v, w)}c からの最遠頂点までの距離          ...
gw (t) の形;枝 (u, v) 内点から w への距離 gw (t) = min{t + d(u, w), d(u, v) − t + d(v, w)}  g(t) = max gw (t)         w∈V          傾き...
min g(t) の計算;枝 (u, v) 内からの最小径 gw (t) = min{t + d(u, w), d(u, v) − t + d(v, w)}  g(t) = max gw (t)         w∈V          ∧ 型...
最小直径全域木 まとめ• 最小直径全域木 = 絶対中心 からの最短路木• 絶対中心の探索:∧ 型の端点(一次関数の交差)計算量:• 前処理:全点対間最短路 O(n3 ) (Floyd Warshall)• 端点計算: O(mn)(切片のソートは...
逆最小全域木         43/ 71
問題:逆最小全域木• 入力: 重み付きグラフ G = (V, E), w : E → R 全域木 T• 問題:  T が最小全域木になるような最小重み修正:    - T は重み w + p のときの最小全域木,      ∑    - e |...
最小全域木の必要十分条件(最適性基準)                   {∑                        e∈X   w(e) 閉路なし        f (X) :=                    +∞     ...
最低限必要な修正量最低限必要な修正量は2部グラフマッチングでわかる2部グラフ B = ({T, E  T }, A):                e, e′ 間に辺がある                    ⇐⇒ e, e′ は交換可能 ...
逆全域木問題の最大最小定理      min 重み変更量 = max マッチング≥ は簡単(前ページ)≤ は難しい;当面そういうものと覚えてもよい             e, e′ 間に辺がある                 ⇐⇒ e, e...
最大最小定理証明のアウトライン(1) w + p に関する最適性基準を書き下す          ∑      min e |p(e)| s.t. w + p の最適性基準(2) T の枝は軽く・E  T の枝は重くするはず,と考えて   絶対...
逆最小全域木 まとめ• 最適性基準:どの枝を交換しても得しない• 交換可能枝の間の二部グラフを作る    必要な修正量 ≥ マッチング• 必要な修正量 = 最大マッチング 定理    ⇒ 二部グラフ最大重みマッチング で解ける 既知のうまく解け...
最小全域木 ×2           50/ 71
最小全域木 ×2• 入力 重み付きグラフ G = (V, E), w : E → R• 問題 辺を共有しない(辺素な)全域木を2つ取り 重み和が最小になるようにせよヒント 1:目的関数が凸になるように作る → 貪欲ヒント 2:貪欲の 1 ステッ...
うまくいかない関数定義           {            w(X) + w(Y )   閉路なし・辺共有しないg(X, Y ) =            +∞             それ以外「辺共有しない」という条件のせいで凸にな...
凸になる関数の定義          {            w(X) 閉路なし(森)  f (X) =            +∞   閉路あり          {           w(X) X をうまく配分すると森 × 2  g(X...
凸なので貪欲で解ける(Kruskal と同じ)         {          w(X)          X をうまく配分すると森 × 2  g(X) =          +∞            それ以外 for e ∈ E: 軽...
X :森 ×2 に e を追加できるか• X = {F1 , F2 }:森 ×2 の形を常に保持• e を追加できるかどうか:交換手順を探索    (1) e が F1 に追加できれば終了    (2) できなかったら e の交換可能枝を列挙 ...
{F1 , F2 } に枝 (u, v) を追加できるかの判定前処理:(1) F1 , F2 を u が根になるように向き付ける    (2) 木の u 以外の頂点を白く塗り,u を黒く塗る     (黒:w より根に近い枝は全部探索済み,の意...
最小全域木 ×2 まとめ          {           w(X)   X をうまく配分すると森 × 2   g(X) =           +∞     それ以外• 凸なので貪欲で解ける (※ただし貪欲の 1 ステップが複雑)• ...
まとめ      58/ 71
まとめ • 最小全域木                • 最小直径全域木 • 葉指定最小全域木                • 逆最小全域木 • 最小比全域木                • 最小全域木 ×2 • 第 k 最小全域木• 問題...
60/ 71
演習問題 / 発展課題• 分散最小全域木 [Katoh 1990]                       ∑  全域木の平均重みを µ(T ) =      w(e)/(n − 1) とする.                       ...
演習問題 / 発展課題• 次数制約付き最小全域木 [Garey-Johnson 1976]  各頂点の次数が b 以下となる全域木を求める問題は  NP-hard である.• 葉最多全域木 [Garey-Johnson 1979] 葉の数が最多...
演習問題 / 発展課題• ランダムグラフの最小全域木 [Frieze 1985]  n 頂点からなる完全グラフで,各枝の重みが独立に  [0, 1] の一様分布に従うとき,最小全域木の重み期待値は  n → ∞ で ζ(3) = 1 + 1/2...
参考文献:最小全域木• T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein (2009):  Introduction to Algorithms. 3rd eds., MIT P...
参考文献:最小比全域木• R. Chandrasekaran (1977): Minimum ratio spanning trees.  Networks, vol.7, pp.335-342.• W. Dinkelbach (1967): ...
参考文献:第 k 最小全域木• D. Eppstein (1990): Finding the k-smallest spanning trees. 2nd  Scandinavian Workshop on Algorithm Theory,...
参考文献:最小直径全域木• R. A. Cunninghame-Green (1975): The absolute center of a graph,  Discrete Applied Mathematics,. vol.7, pp.27...
参考文献:逆最小全域木• R. Ahuja and J. Orlin (2001): Inverse optimization, Operations  Research, vol. 49 pp.771-783.• M. Cai and Y. ...
参考文献:最小全域木 ×2• J. Edmonds (1970): Submodular functions, matroids, and certain  polyhedra. Proceedings of the Calgary Coner...
参考文献:演習問題 / 発展課題• N. Katoh (1990): An ϵ-approximation scheme for minimum  variance problems. Journal of the Operations Res...
• A. M. Frieze (1985): On the value of a random minimum spanning  tree problem. Discrete Applied Mathematics, vol.10, pp.4...
Prochain SlideShare
Chargement dans…5
×

55

Partager

Télécharger pour lire hors ligne

様々な全域木問題

Télécharger pour lire hors ligne

2013 JOI春合宿 二日目講義

Livres associés

Gratuit avec un essai de 30 jours de Scribd

Tout voir

様々な全域木問題

  1. 1. 2013 年 3 月 20 日 @ NTT DATA 駒場研修センター第 12 回日本情報オリンピオック春季トレーニング合宿 様々な全域木問題 前原 貴憲 (@tmaehara) 国立情報学研究所
  2. 2. 自己紹介• 前原 貴憲(まえはら たかのり)• Twitter: @tmaehara• Web: http://www.prefield.com (Spaghetti Source)• 略歴: 2004 沼津工業高等専門学校卒 2007 東京大学 工学部 計数工学科卒 2012 東京大学大学院 情報理工学系研究科卒 現在 国立情報学研究所• 専門分野:連続・離散最適化,数値計算 2/ 71
  3. 3. 全域木問題 3/ 71
  4. 4. 木・全域木• 無向グラフ G = (V, E),枝重み w : E → R – V :頂点集合,E :枝集合 ※基本的に連結なグラフだけ考える – 木(tree):閉路のない連結部分グラフ(枝集合) – 森(forest):閉路のない部分グラフ(木の集まり) – 全域木(spanning tree):すべての頂点を繋ぐ木 4/ 71
  5. 5. 全域木に関する問題はとても多い!しかも 効率的に解ける問題 がわりと多い → 効率的解法のテンプレ • 全域木存在判定 • 最速全域木 • 最小全域木 • ロバスト最小全域木 • 最小比全域木 • 次数制約付全域木 • 凸最小全域木 • 葉最多全域木 • 逆最小全域木 • 確率的全域木 • 最小直径全域木 • 最小ラベル全域木 • 第 k 最小全域木 • シュタイナー木 . • 最小全域有向木 . . 5/ 71
  6. 6. この講義の目標 • マイナーな全域木問題 を題材にして • 解ける問題 の解法パターンを理解する題材• 最小全域木 • 最小直径全域木• 葉指定最小全域木 • 逆最小全域木• 最小比全域木 • 最小全域木 ×2• 第 k 最小全域木 (EASY MEDIUM HARD) 6/ 71
  7. 7. だいぶ難しい内容なので全部理解できなくても大丈夫!• 問題の定義・解法の方針が分かれば上出来• 細かい部分が気になったら調べましょう(see: 参考文献)【前提知識】秋葉・岩田・北川:プログラミングコンテストチャレンジブックCormen-Leiserson-Rivest-Stein:アルゴリズムイントロダクション 7/ 71
  8. 8. 最小全域木 8/ 71
  9. 9. 最小全域木• 入力 重み付きグラフ G = (V, E), w : E → R• 問題: 重み和が最小の全域木を求めよ 3 1 1 2 3 2 2 9/ 71
  10. 10. 最小全域木• 入力 重み付きグラフ G = (V, E), w : E → R• 問題: 重み和が最小の全域木を求めよ 3 1 1 2 3 2 2 10/ 71
  11. 11. 最小全域木• 入力: 重み付きグラフ G = (V, E), w : E → R• 問題: 重み和が最小の全域木を求めよ• 解答:貪欲法(Kruskal) 1. 枝の軽い順に採用していく 2. ただし,閉路ができる場合は無視Q. なぜ貪欲で解けるか? (→ どこまで拡張できるか?) 11/ 71
  12. 12. 最適化問題を考える際の基本 {∑ e∈X w(e) 閉路なし f (X) := +∞ 閉路あり• 全部の X を調べると O(2m ) 時間• もし f が 良い不等式 を満たすなら 全部調べなくても,一部だけ調べれば十分!• 一番扱いやすい不等式:凸不等式(2つの解 ≥ 間の解) Y f (X) + f (Y ) X ≥ 2f ((X + Y )/2) 12/ 71
  13. 13. 最小全域木問題の凸不等式 {∑ e∈X w(e) 閉路なし f (X) := +∞ 閉路あり任意の e ∈ X Y に対し,e′ ∈ Y X がとれてf (X) + f (Y ) ≥ f (X − e + e′ ) + f (Y + e − e′ ) - Y Y ? X- e′ 6 X e 13/ 71
  14. 14. 凸不等式が成り立つこと(左辺有限 ⇒ 右辺有限)f (X) + f (Y ) ≥ f (X − e + e′ ) + f (Y + e − e′ ) e ≥ e′ (よくある教科書の証明は,中でこれを示している) 14/ 71
  15. 15. 凸不等式を使った証明T ∗ 最適解,T 貪欲解について凸不等式を書く f (T ) + f (T ∗ ) ≥ f (T − e + e′ ) + f (T ∗ + e − e′ ) ∴ f (T ) ≥ f (T − e + e′ ) ∴ w(e) ≥ w(e′ )- で成立:貪欲で e を追加したところに矛盾- = で成立:T ∗ + e − e′ を T ∗ として繰り返す → 最終的に T = T ∗ になって証明完了☆この証明が動くことが凸のうれしさ☆一般に,この凸不等式を満たす関数は 貪欲で最小化可能( → 離散凸 ) 15/ 71
  16. 16. 最小全域木 まとめ• 最小全域木問題は貪欲で解ける 関数が満たす不等式を考える 特に凸不等式が成り立つとハッピー 凸不等式が成り立てば貪欲で解ける (「貪欲」1ステップが複雑な場合も;後述)(例:w(X)2 の最小化など:凸不等式成立なので貪欲) 16/ 71
  17. 17. 葉を指定した最小全域木 17/ 71
  18. 18. 葉を指定した最小全域木• 入力 重み付きグラフ G = (V, E), w : E → R+ 頂点の部分集合 U ⊆ V• 問題: U が葉である 全域木の中で,重み和最小のもの 18/ 71
  19. 19. グラフ問題の大原則:頂点問題 vs 枝問題 • 頂点に対する問題は解きにくい • 枝に対する問題は解きやすい 頂点に対する問題 枝に対する問題 ハミルトンパス オイラーパス 頂点被覆 枝被覆 . . . . . .葉を指定した最小全域木: 「U を葉にする」(頂点条件)を 枝条件 で書き換える 19/ 71
  20. 20. 頂点条件を枝条件で書き換える (1) U 同士を繋ぐ枝を使わないU を葉にする ⇐⇒ (2) U とそれ以外を繋ぐ枝を |U | 本以上使わない(1):U 同士を繋ぐ枝は先に除去(2):全域木は少なくとも |U | 本 (2) 型の枝を使う ⇒ U の枝はできるだけ使わないようにする∴ Kruskal 法の最初の枝ソートの部分を以下のように修正(1) U 以外を繋ぐ枝(重み順ソート)(2) U と U 以外を繋ぐ枝(重み順ソート) 20/ 71
  21. 21. 葉を指定した最小全域木 まとめ• 頂点条件を枝条件に書き換える – U を葉にせよ ⇒ U と接続する枝を減らせ ⇒ Kruskal の変形版が適用可能基本的に「頂点は難しい / 枝は簡単」⇒ できるだけ枝条件であらわすようにする(例:最長しりとり:文字列を枝に対応させる(オイラー路) 頂点に容量のある最大流:頂点を増やして枝容量に) 21/ 71
  22. 22. 最小比全域木 22/ 71
  23. 23. 最小比全域木• 入力: 2種類の重み付きグラフ G = (V, E), w1 , w2 : E → R0• 問題: w1 (T ) 重み比 を最小化する全域木を出力 w2 (T ) ∑ wi (X) = e∈X wi (X)TCO06 Finals (Div.1 Lv.3) PhoneNetwork 23/ 71
  24. 24. パラメタを用いた分数関数の凸化 { w1 (X)/w2 (X) 閉路なし f (X) := +∞ 閉路ありそのままでは 凸っぽくない ので・・・f = t の分母を払った関数 gt (t を止めたら凸) : { w1 (X) − tw2 (X) 閉路なし gt (X) := +∞ 閉路あり gt (X) ≤ 0 ⇐⇒ f (X) ≤ t gt (X) ≥ 0 ⇐⇒ f (X) ≥ t 24/ 71
  25. 25. パラメトリックアプローチf :分数関数,g(t) = minT {w1 (T ) − tw2 (T )} (1) min f (T ) = t∗ ⇐⇒ g(t∗ ) = 0 (2) g(t) は t の単調減少凹関数 (負の傾きの直線の min ) g(t) 6 ∗ -t 0 t 25/ 71
  26. 26. g のゼロ点の計算方法Find 0 = g(t∗ ), g(t) = minT {w1 (T ) − tw2 (T )}• 方法1:二分探索 ゼロと大小比較して範囲を絞っていく• 方法2:Dinkelbach の方法 (1) g(t(k) ) を計算,最小を与える解を T (k+1) とおく (2) t(k+1) := w1 (T (k+1) )/w2 (T (k+2) ) と設定 (g(t) を支える直線に沿って進む)☆ Dinkelbach は常に収束,高速(実用的&理論的)☆数値精度の問題が発生しづらい☆実装難度は二分探索と大差なし 26/ 71
  27. 27. 最小比全域木 まとめ f (T ) := w1 (T )/w2 (T ) ⇒ g(t) := min{w1 (T ) − tw2 (T )} T• f にパラメタを入れて 凸化 – g(t∗ ) = 0 ⇐⇒ min f (T ) = t∗ . – g(t) は単調減少凹関数• 二分探索 or Dinkelbach の方法「比の最小化」は,ほぼこのパターンで解ける何かを止めたら凸になるパターンは多い(解けるかは別) (例:分散最小全域木 = 平均をパラメタにすると凸) 27/ 71
  28. 28. 第 k 最小全域木 28/ 71
  29. 29. 第 k 最小全域木• 入力: 重み付きグラフ G = (V, E), w : E → R 正整数 k• 問題: 重み和が k 番目に小さな全域木を出力(注意:k = 1 のとき最小全域木)ヒント 1:1 番目,2 番目,…と順番に求めるヒント 2:同じ計算が多いので前処理する 29/ 71
  30. 30. 簡単のため:第 2 最小全域木(1) MST を計算(2) MST の枝を 1 本使用禁止 にして再び MST 計算 MST のすべての枝 n 通りについて実行して min をとる正当性:•「2ndMST で使わない 1stMST の枝」が少なくとも 1 本存在 ⇒ 「使わない枝」を禁止すると 2ndMST が出る (どれが「使わない枝」か不明なので全部試す)これを繰り返すと第 k も求まる! 30/ 71
  31. 31. 第 k 最小全域木:優先度付き探索 Q ← (∅, MST) while Q ̸= ∅ (banList, spanningTree) ← Q print (spanningTree) for each e in spanningTree: newList ← banList ∪ {e} newTree ← MST(newList) Q ← (newList, newTree)計算量:だいたい O(kmnα(n) + m log n) 同じ計算を何度もしているので,効率化できそう 31/ 71
  32. 32. 前処理 1:絶対使う枝は縮約するT :全域木,枝 e ∈ T の 交換可能枝C(e): C(e) = {e′ ̸∈ T : T − e + e′ は全域木 } ⇐⇒ e′ の両端をつなぐ T 上の経路に e がある全域木 T で枝 e を禁止するときの不可避なロス mine′ ∈C(e) w(e) − w(e′ )∴ 最小全域木中のロスが小さな k 本以外の枝は絶対使う → 先に縮約して k 頂点のグラフにしておく 32/ 71
  33. 33. 前処理 2:絶対使わない枝は捨てるT :全域木,枝 e′ ̸∈ T の 交換可能枝C(e′ ): C(e′ ) = {e ∈ T : T − e + e′ は全域木 } ⇐⇒ e′ の両端をつなぐ T 上の経路の枝全域木 T で枝 e′ と交換するときの不可避なロス mine∈C(e′ ) w(e) − w(e′ )∴ 最小全域木外のロスが小さな k 本以外の枝は使わない → 先に捨てて 2k − 1 枝グラフにしておく 33/ 71
  34. 34. 不可避ロスの計算前処理 1:e ∈ T を禁止するときのロス計算前処理 2:e′ ̸∈ T を使うときのロス計算• 最小全域木上で 経路クエリ ができれば OK 前処理 1:e′ の両端経路上の枝について w(e′ ) で更新 前処理 2:e′ の両端経路上の枝について min w(e) を取得• 木上の経路クエリ: 動的木・heavy-light 分解・etc... O(log n)「完全制覇・ツリー上でのクエリ処理技法」参照 (2011 年 Competitive Programming Advent Calendar @秋葉) 前処理 1,2 のどちらも,O(m log n) で計算可能 34/ 71
  35. 35. 第 k 全域木 まとめ• 前処理 1 で k 頂点に減らす• 前処理 2 で 2k − 1 枝に減らす → 最小全域木上の経路クエリ• 優先度付き探索 O(k2 α(k) + n log n)k-best 問題の基本は 優先度付き探索 + 枝刈り 優先度付き探索 の部分は使いまわせる 枝刈り の部分は問題特有になりがち (「絶対使わない部分」 「絶対使う部分」に注目)(最短路:USACO 2006 November Gold Roadblocks, ICPC 2006 Asia Enjoyable Commutation) 35/ 71
  36. 36. 最小直径全域木 36/ 71
  37. 37. 最小直径全域木• 入力 重み付きグラフ G = (V, E), w : E → R+• 問題: 全域木 T で,直径が最小のもの(木の直径:二点対間距離の最大値)ヒント: 「グラフのどまんなか」を探す ⇒ 「どまんなか」からの最短路木 = 最小直径全域木SPOJ PT07C: The GbAaY KingdomSPOJ MDST: Minimum Diameter Spanning Tree 37/ 71
  38. 38. グラフの絶対中心グラフ G の絶対中心:maxv∈V d(c, v) が最小の点絶対中心は頂点ではない可能性がある 6 c 絶対中心からの最短路木 = 最小直径全域木⇒ どの枝の内側に絶対中心があるかを全部試す 38/ 71
  39. 39. 枝の内点からの距離枝 (u, v) の内点 c から w への距離:d(c, u) = t として gw (t) = min{t + d(u, w), d(u, v) − t + d(v, w)}c からの最遠頂点までの距離 g(t) = max gw (t) w∈Vg(t) の最小値 = (u, v) 間に中心があるとしたときの半径∴ すべての枝について,g(t) の最小値を計算すればいい! w u t v 6 c 39/ 71
  40. 40. gw (t) の形;枝 (u, v) 内点から w への距離 gw (t) = min{t + d(u, w), d(u, v) − t + d(v, w)} g(t) = max gw (t) w∈V 傾き 1 と −1 の直線の min gw (t) 6 d(u, w) d(v, w) -t 0 d(u, v) 40/ 71
  41. 41. min g(t) の計算;枝 (u, v) 内からの最小径 gw (t) = min{t + d(u, w), d(u, v) − t + d(v, w)} g(t) = max gw (t) w∈V ∧ 型の端点を計算(切片でソート) → 上包絡線の一番低い点を出力 O(n log n) g(t) 6 -t 0 d(u, v) 41/ 71
  42. 42. 最小直径全域木 まとめ• 最小直径全域木 = 絶対中心 からの最短路木• 絶対中心の探索:∧ 型の端点(一次関数の交差)計算量:• 前処理:全点対間最短路 O(n3 ) (Floyd Warshall)• 端点計算: O(mn)(切片のソートは最短路計算のときに一緒に行える) やや珍しいパターン(例:施設配置問題;グラフの絶対中央値) 42/ 71
  43. 43. 逆最小全域木 43/ 71
  44. 44. 問題:逆最小全域木• 入力: 重み付きグラフ G = (V, E), w : E → R 全域木 T• 問題: T が最小全域木になるような最小重み修正: - T は重み w + p のときの最小全域木, ∑ - e |p(e)| 最小化ヒント 1:T が MST であるための必要十分条件ヒント 2:最低限必要な修正量を計算 44/ 71
  45. 45. 最小全域木の必要十分条件(最適性基準) {∑ e∈X w(e) 閉路なし f (X) := +∞ 閉路あり全域木 T が MST ⇐⇒ 任意の e ∈ T, e′ ̸∈ T について f (T − e + e′ ) ≥ f (T ) =⇒ w(e)≤ w(e′ ) (e, e′ : 交換可能) (どの交換可能枝を交換しても得しない)- 得したら最小でないのは当然 ⇒ 得する分だけは 最低限修正が必要 45/ 71
  46. 46. 最低限必要な修正量最低限必要な修正量は2部グラフマッチングでわかる2部グラフ B = ({T, E T }, A): e, e′ 間に辺がある ⇐⇒ e, e′ は交換可能 (重み = 交換したときの得) T ET マッチング = その対を同時に交換最大重みマッチングの分だけは,絶対修正が必要 (負の辺 = 交換して損する辺は除いておく) 46/ 71
  47. 47. 逆全域木問題の最大最小定理 min 重み変更量 = max マッチング≥ は簡単(前ページ)≤ は難しい;当面そういうものと覚えてもよい e, e′ 間に辺がある ⇐⇒ e, e′ は交換可能 (重み = 交換したときの得) T ET マッチング = その対を同時に交換 47/ 71
  48. 48. 最大最小定理証明のアウトライン(1) w + p に関する最適性基準を書き下す ∑ min e |p(e)| s.t. w + p の最適性基準(2) T の枝は軽く・E T の枝は重くするはず,と考えて 絶対値を外しつつ,変数変換して形を整える ∑ min e q(e) s.t. q に関する条件(3) 線形計画の双対定理を使って式をじっと眺める → マッチングの LP 表現になっている 最小費用流主双対アルゴリズムを使って得られる ポテンシャルの性質を観察することでも証明可能 48/ 71
  49. 49. 逆最小全域木 まとめ• 最適性基準:どの枝を交換しても得しない• 交換可能枝の間の二部グラフを作る 必要な修正量 ≥ マッチング• 必要な修正量 = 最大マッチング 定理 ⇒ 二部グラフ最大重みマッチング で解ける 既知のうまく解ける逆問題は,だいたいフローに帰着(例:逆二部マッチング,逆最小カット,逆最短路@ DAG) 49/ 71
  50. 50. 最小全域木 ×2 50/ 71
  51. 51. 最小全域木 ×2• 入力 重み付きグラフ G = (V, E), w : E → R• 問題 辺を共有しない(辺素な)全域木を2つ取り 重み和が最小になるようにせよヒント 1:目的関数が凸になるように作る → 貪欲ヒント 2:貪欲の 1 ステップごとに探索が発生 51/ 71
  52. 52. うまくいかない関数定義 { w(X) + w(Y ) 閉路なし・辺共有しないg(X, Y ) = +∞ それ以外「辺共有しない」という条件のせいで凸にならない(貪欲するときに X と Y のどちらに足すべきかが不明)※ダメ解法:Kruskal で UnionFind×2 = この関数で貪欲 52/ 71
  53. 53. 凸になる関数の定義 { w(X) 閉路なし(森) f (X) = +∞ 閉路あり { w(X) X をうまく配分すると森 × 2 g(X) = +∞ それ以外 g(X) + g(Y ) ≥ g(X − e + e′ ) + g(Y + e − e′ )※ f と g の関係:畳み込み g(X) = min {f (T ) + f (X T )} = f ∗ f T ⊆X 53/ 71
  54. 54. 凸なので貪欲で解ける(Kruskal と同じ) { w(X) X をうまく配分すると森 × 2 g(X) = +∞ それ以外 for e ∈ E: 軽い順 if X ∪ {e}: 森 ×2 X = X ∪ {e}必要なサブルーチン X が森 ×2 に配分できるとき, X ∪ {e} が森 ×2 に配分できるかの判定 54/ 71
  55. 55. X :森 ×2 に e を追加できるか• X = {F1 , F2 }:森 ×2 の形を常に保持• e を追加できるかどうか:交換手順を探索 (1) e が F1 に追加できれば終了 (2) できなかったら e の交換可能枝を列挙 それぞれについて F2 に追加を試みる 二部マッチング (3) F1 , F2 交互に繰り返す 増加道探索と類似• 最短手数の交換だけ探す:幅優先探索 (a) 同じ枝は何度もチェックしない → 探索中に 木を動的変更しなくてよい交換枝の列挙:動的木を使えば全体で O(n2 ) ☆ 列挙の順番を工夫すると動的木なしで O(n) 55/ 71
  56. 56. {F1 , F2 } に枝 (u, v) を追加できるかの判定前処理:(1) F1 , F2 を u が根になるように向き付ける (2) 木の u 以外の頂点を白く塗り,u を黒く塗る (黒:w より根に近い枝は全部探索済み,の意味) L1 := [(u, v)] 根に近い側からテスト for i = 1, 2, 1, 2, . . .: → 同じ枝を二回見ない if Li = ∅: return false Li+1 = ∅ for (x, y) ∈ Li : if (x, y) が Fi に追加可能: return true if x は白: swap(x,y) /* 一方は絶対黒 */ while y は白: Li+1 .push front((y, p[y])) y を黒く塗る,y ← p[y] 56/ 71
  57. 57. 最小全域木 ×2 まとめ { w(X) X をうまく配分すると森 × 2 g(X) = +∞ それ以外• 凸なので貪欲で解ける (※ただし貪欲の 1 ステップが複雑)• 効率的に貪欲するには: – X = {F1 , F2 } の形で保持 – 交換経路を探索 枝列挙順序を工夫して O(n) 57/ 71
  58. 58. まとめ 58/ 71
  59. 59. まとめ • 最小全域木 • 最小直径全域木 • 葉指定最小全域木 • 逆最小全域木 • 最小比全域木 • 最小全域木 ×2 • 第 k 最小全域木• 問題の定義・解答の方針 ⇒ 興味の湧いた問題は調べてみましょう (ここで述べた内容はだいたい「マトロイド」に拡張可) 59/ 71
  60. 60. 60/ 71
  61. 61. 演習問題 / 発展課題• 分散最小全域木 [Katoh 1990] ∑ 全域木の平均重みを µ(T ) = w(e)/(n − 1) とする. ∑ 重みの分散,すなわち v(T ) = (w(e) − µ(T ))2 が 最小となる全域木を求めよ.• 逆最小全域木(min-max 型)[Sokkalingam et al. 1996] max |pi | が最小の修正を求めるアルゴリズムを与えよ.• カラフル全域木 [Schrijver 2003] 枝に重みとラベル {1, 2, . . . n − 1} がついているとき 同じラベルが丁度 1 回ずつ現れる全域木のうち 最小重みのものを求めるアルゴリズムを与えよ. 61/ 71
  62. 62. 演習問題 / 発展課題• 次数制約付き最小全域木 [Garey-Johnson 1976] 各頂点の次数が b 以下となる全域木を求める問題は NP-hard である.• 葉最多全域木 [Garey-Johnson 1979] 葉の数が最多の全域木を求める問題は NP-Hard である.• 全距離最小木 [Garey-Johnson 1979] 全頂点対の木距離の和が最小になる全域木を求める 問題は,すべての重みが 1 であっても NP-hard である.• 全域木 + 木 [Bernath-Kiraly 2011] 全域木と全域とは限らない木を辺素に取れるかどうかを 判定する問題は NP-hard である. 62/ 71
  63. 63. 演習問題 / 発展課題• ランダムグラフの最小全域木 [Frieze 1985] n 頂点からなる完全グラフで,各枝の重みが独立に [0, 1] の一様分布に従うとき,最小全域木の重み期待値は n → ∞ で ζ(3) = 1 + 1/23 + 1/33 + · · · に収束する. ※各 n に対する一般式は 2013 年 3 月現在未知.• 全域木ゲーム [Lehman 1964] 2 人のプレイヤーが交互に次の操作を行う: (P1) グラフの枝を取り除く (P2) グラフの枝を固定する(以後取り除かれない) 操作ができなくなったときの残りのグラフが全域木のとき P2 の勝利とする.辺素な全域木が 2 つとれることと P2 に 必勝法が存在することは同値である. 63/ 71
  64. 64. 参考文献:最小全域木• T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein (2009): Introduction to Algorithms. 3rd eds., MIT Press.• R. L. Graham and P. Hell (1985): On the history of the minimum spanning tree problem. Annals of the History of Computing, vol.7, pp.43-57.• K. Murota (2003): Discrete Convex Analysis. SIAM Monographs on Discrete Mathematics and Applications, vol.10, SIAM, Philadelphia.• J. Oxley (2003): What is a matroid? Cubo, vol.5, pp.179-218.• A. Schrijver (2003): Combinatorial Optimization. Springer.• 秋葉拓哉, 岩田陽一, 北川宜稔 (2012): プログラミングコンテストチャ レンジブック. 2nd eds, マイナビ. 64/ 71
  65. 65. 参考文献:最小比全域木• R. Chandrasekaran (1977): Minimum ratio spanning trees. Networks, vol.7, pp.335-342.• W. Dinkelbach (1967): On nonlinear fractional programming. Management Science, vol.13, pp.492-498.• T. Radzik (1992): Newton’s Method for Fractional Combinatorial Optimization. Proceedings of 33rd Annual Symposium of Foundation of Computer Science, pp. 659-669. 65/ 71
  66. 66. 参考文献:第 k 最小全域木• D. Eppstein (1990): Finding the k-smallest spanning trees. 2nd Scandinavian Workshop on Algorithm Theory, Bergen, Norway, Lecture Notes in Computer Science, vol.447, pp.38-47.• R. E. Tarjan (1979): Applications of path compression on balanced trees. Journal of ACM, vol.26, pp.690-715.• 秋葉拓哉 (2011): 完全制覇・ツリー上でのクエリ処理技法. Competitive Programming Advent Calendar 2011-12-05, http://topcoder.g.hatena.ne.jp/iwiwi/20111205/1323099376 66/ 71
  67. 67. 参考文献:最小直径全域木• R. A. Cunninghame-Green (1975): The absolute center of a graph, Discrete Applied Mathematics,. vol.7, pp.275-283.• R. Hassin and A. Tamir (1995): On the minimum diameter spanning tree problem, Information Processing Letters, vol.53, pp.109-111.• J. Halpern (1979): A simple elimination criterion in a search for the center of a graph, Management Science, vol.7, pp.287-293.• O. Kariv and S. L. Hakimi (1979): An algorithmic approach to network location problem I: the p centers, SIAM Journal on Applied Mathematics, vol.37, no.513-518. 67/ 71
  68. 68. 参考文献:逆最小全域木• R. Ahuja and J. Orlin (2001): Inverse optimization, Operations Research, vol. 49 pp.771-783.• M. Cai and Y. Li (1997): Inverse matroid intersection problem ZOR Mathematical Methods of Operations Research, vol.45 pp.235-243.• C. Heuberger (2004): Inverse combinatorial optimization: A survey on problems, methods, and results. Journal of Combinatorial Optimization, vol.8, pp.329-361.• P. T. Sokkalingam, R. K. Ahuja, and J. B. Orlin (1996): Solving inverse spanning tree problems though network flow techniques. Operations Research, vol.47, no.2. 68/ 71
  69. 69. 参考文献:最小全域木 ×2• J. Edmonds (1970): Submodular functions, matroids, and certain polyhedra. Proceedings of the Calgary Conerence on Conbinatorial Combinatorial Structures and Their Ppplications, pp.69-87.• A. Frank (1981): A weighted matroid intersection algorithm. Journal of Algorithms, vol.2, no.4, pp.328-336.• H. N. Gabow and R. E. Tarjan, Robert (1984), Efficient algorithms for a family of matroid intersection problems. Journal of Algorithms, vol.5, no.1, pp.80-131.• J. Roskind and R. E. Tarjan (1985): A note on finding minimum-cost edge-disjoint spanning trees. Mathematics of Operations Research, vol.10, pp.701-708. 69/ 71
  70. 70. 参考文献:演習問題 / 発展課題• N. Katoh (1990): An ϵ-approximation scheme for minimum variance problems. Journal of the Operations Research Society of Japan, vol.33, no.1 46-65.• M. R. Garey and D. S. Johnson (1979): Computers and Intracctability: A Guide to the Theory of NP-Completeness. W. H. Freeman, New York.• H. Fernau, J. Kneis, D. Kratsch, A. Langer (2011), M. Liedloff, D. Raible, and P. Rossmanith: An exact algorithm for the maximum leaf spanning tree problem. Journal Theoretical Computer Science, vol.412, no.45, pp.6290-6302.• A. Bernath and Z. Kiraly (2011): On the tractability of some natural packing, covering and partitioning problems. Technical Report. 70/ 71
  71. 71. • A. M. Frieze (1985): On the value of a random minimum spanning tree problem. Discrete Applied Mathematics, vol.10, pp.47-56.• A. Frieze, M. Ruszink, and L. Thoma (2000): A note on random minimum length spanning trees, The Electronic Journal of Combinatorics, vol.7, R41.• A. Lehman (1964): A solution to Shannon’s switching game. Journal of the Society for Industrial and Applied Mathematics, vol.12, pp.687-725. 71/ 71
  • HealtyEternal

    Mar. 3, 2021
  • KentaroMajima

    Feb. 8, 2021
  • HirotaKinoshita

    Jul. 1, 2020
  • tanzaku

    Apr. 2, 2020
  • zimpha

    Feb. 23, 2020
  • TaiseiINOUE

    Dec. 5, 2019
  • TakehiroMimasu

    Aug. 27, 2019
  • ssuser61bb94

    Feb. 24, 2019
  • YuIwasaki3

    Jan. 15, 2019
  • syamaoka

    Oct. 4, 2018
  • KernelMarker

    Sep. 9, 2018
  • RyotaYonekura1

    Aug. 30, 2018
  • RintaroIkeshita

    Jun. 3, 2018
  • tskohm

    Dec. 20, 2017
  • tinsep19

    May. 7, 2017
  • tsuyoshitatsukawa

    Jun. 1, 2016
  • TakanoriHayashi3

    Mar. 19, 2016
  • ctyl

    Dec. 6, 2015
  • goodbaton

    Nov. 9, 2015
  • omochi621

    Sep. 8, 2015

2013 JOI春合宿 二日目講義

Vues

Nombre de vues

38 658

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

1 320

Actions

Téléchargements

148

Partages

0

Commentaires

0

Mentions J'aime

55

×