SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Downloaden Sie, um offline zu lesen
2013 年 3 月 20 日 @ NTT DATA 駒場研修センター
第 12 回日本情報オリンピオック春季トレーニング合宿




             様々な全域木問題



             前原 貴憲 (@tmaehara)


               国立情報学研究所
自己紹介

• 前原 貴憲(まえはら たかのり)
• Twitter: @tmaehara
• Web: http://www.prefield.com (Spaghetti Source)

• 略歴:
   2004 沼津工業高等専門学校卒
   2007 東京大学 工学部 計数工学科卒
   2012 東京大学大学院 情報理工学系研究科卒
   現在 国立情報学研究所

• 専門分野:連続・離散最適化,数値計算

                                               2/ 71
全域木問題




        3/ 71
木・全域木
• 無向グラフ G = (V, E),枝重み w : E → R
  – V :頂点集合,E :枝集合
   ※基本的に連結なグラフだけ考える

 – 木(tree):閉路のない連結部分グラフ(枝集合)
 – 森(forest):閉路のない部分グラフ(木の集まり)

 – 全域木(spanning tree):すべての頂点を繋ぐ木




                                   4/ 71
全域木に関する問題はとても多い!
しかも 効率的に解ける問題 がわりと多い
  → 効率的解法のテンプレ



 •   全域木存在判定     •   最速全域木
 •   最小全域木       •   ロバスト最小全域木
 •   最小比全域木      •   次数制約付全域木
 •   凸最小全域木      •   葉最多全域木
 •   逆最小全域木      •   確率的全域木
 •   最小直径全域木     •   最小ラベル全域木
 •   第 k 最小全域木   •   シュタイナー木
                     .
 •   最小全域有向木         .
                     .
                                 5/ 71
この講義の目標

 • マイナーな全域木問題 を題材にして

 • 解ける問題 の解法パターンを理解する


題材
•    最小全域木
                 • 最小直径全域木
•    葉指定最小全域木
                 • 逆最小全域木
•    最小比全域木
                 • 最小全域木 ×2
•    第 k 最小全域木
                 (EASY MEDIUM HARD)
                                6/ 71
だいぶ難しい内容なので

全部理解できなくても大丈夫!

• 問題の定義・解法の方針が分かれば上出来
• 細かい部分が気になったら調べましょう(see: 参考文献)


【前提知識】
秋葉・岩田・北川:プログラミングコンテストチャレンジブック
Cormen-Leiserson-Rivest-Stein:アルゴリズムイントロダクション


                                        7/ 71
最小全域木




        8/ 71
最小全域木
• 入力
 重み付きグラフ G = (V, E), w : E → R

• 問題:
 重み和が最小の全域木を求めよ


              3
                          1
          1       2   3
                          2
              2

                                 9/ 71
最小全域木
• 入力
 重み付きグラフ G = (V, E), w : E → R

• 問題:
 重み和が最小の全域木を求めよ


              3
                          1
          1       2   3
                          2
              2

                                 10/ 71
最小全域木
• 入力:
 重み付きグラフ G = (V, E), w : E → R

• 問題:
 重み和が最小の全域木を求めよ


• 解答:貪欲法(Kruskal)
 1. 枝の軽い順に採用していく
 2. ただし,閉路ができる場合は無視

Q. なぜ貪欲で解けるか? (→ どこまで拡張できるか?)

                                 11/ 71
最適化問題を考える際の基本
                  {∑
                       e∈X   w(e) 閉路なし
       f (X) :=
                  +∞               閉路あり

• 全部の X を調べると O(2m ) 時間
• もし f が 良い不等式 を満たすなら
 全部調べなくても,一部だけ調べれば十分!

• 一番扱いやすい不等式:凸不等式(2つの解 ≥ 間の解)

                   Y         f (X) + f (Y )
      X
                               ≥ 2f ((X + Y )/2)

                                              12/ 71
最小全域木問題の凸不等式
                   {∑
                        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
凸不等式が成り立つこと(左辺有限 ⇒ 右辺有限)
f (X) + f (Y ) ≥ f (X − e + e′ ) + f (Y + e − e′ )




 e

                        ≥
       e′




     (よくある教科書の証明は,中でこれを示している)
                                             14/ 71
凸不等式を使った証明
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
最小全域木 まとめ

• 最小全域木問題は貪欲で解ける


 関数が満たす不等式を考える
  特に凸不等式が成り立つとハッピー

 凸不等式が成り立てば貪欲で解ける
  (「貪欲」1ステップが複雑な場合も;後述)


(例:w(X)2 の最小化など:凸不等式成立なので貪欲)


                          16/ 71
葉を指定した最小全域木




              17/ 71
葉を指定した最小全域木
• 入力
 重み付きグラフ G = (V, E), w : E → R+
 頂点の部分集合 U ⊆ V

• 問題:
  U が葉である 全域木の中で,重み和最小のもの




                                  18/ 71
グラフ問題の大原則:頂点問題 vs 枝問題

 • 頂点に対する問題は解きにくい
 • 枝に対する問題は解きやすい

    頂点に対する問題     枝に対する問題
    ハミルトンパス       オイラーパス
      頂点被覆          枝被覆
        .
        .            .
                     .
        .            .

葉を指定した最小全域木:
 「U を葉にする」(頂点条件)を 枝条件 で書き換える

                           19/ 71
頂点条件を枝条件で書き換える
           (1) U 同士を繋ぐ枝を使わない
U を葉にする ⇐⇒ (2) U とそれ以外を繋ぐ枝を
               |U | 本以上使わない
(1):U 同士を繋ぐ枝は先に除去
(2):全域木は少なくとも |U | 本 (2) 型の枝を使う
    ⇒ U の枝はできるだけ使わないようにする

∴ Kruskal 法の最初の枝ソートの部分を以下のように修正
(1) U 以外を繋ぐ枝(重み順ソート)
(2) U と U 以外を繋ぐ枝(重み順ソート)


                                  20/ 71
葉を指定した最小全域木 まとめ

• 頂点条件を枝条件に書き換える
 – U を葉にせよ ⇒ U と接続する枝を減らせ
 ⇒ Kruskal の変形版が適用可能



基本的に「頂点は難しい / 枝は簡単」

⇒ できるだけ枝条件であらわすようにする
(例:最長しりとり:文字列を枝に対応させる(オイラー路)
   頂点に容量のある最大流:頂点を増やして枝容量に)
                            21/ 71
最小比全域木




         22/ 71
最小比全域木
• 入力:
 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
パラメタを用いた分数関数の凸化
                {
                    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
パラメトリックアプローチ
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
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
最小比全域木 まとめ
              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
第 k 最小全域木




            28/ 71
第 k 最小全域木
• 入力:
 重み付きグラフ G = (V, E), w : E → R
 正整数 k

• 問題:
 重み和が k 番目に小さな全域木を出力
(注意:k = 1 のとき最小全域木)


ヒント 1:1 番目,2 番目,…と順番に求める
ヒント 2:同じ計算が多いので前処理する



                                 29/ 71
簡単のため:第 2 最小全域木
(1) MST を計算
(2) MST の枝を 1 本使用禁止 にして再び MST 計算
    MST のすべての枝 n 通りについて実行して min をとる
正当性:
•「2ndMST で使わない 1stMST の枝」が少なくとも 1 本存在
  ⇒ 「使わない枝」を禁止すると 2ndMST が出る
         (どれが「使わない枝」か不明なので全部試す)


これを繰り返すと第 k も求まる!



                                30/ 71
第 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
前処理 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
前処理 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
不可避ロスの計算
前処理 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
第 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/ 71
最小直径全域木
• 入力
 重み付きグラフ G = (V, E), w : E → R+

• 問題:
 全域木 T で,直径が最小のもの
(木の直径:二点対間距離の最大値)

ヒント:
   「グラフのどまんなか」を探す
  ⇒ 「どまんなか」からの最短路木 = 最小直径全域木


SPOJ PT07C: The GbAaY Kingdom
SPOJ MDST: Minimum Diameter Spanning Tree
                                            37/ 71
グラフの絶対中心
グラフ G の絶対中心:maxv∈V d(c, v) が最小の点

絶対中心は頂点ではない可能性がある




                  6
                  c


 絶対中心からの最短路木 = 最小直径全域木

⇒ どの枝の内側に絶対中心があるかを全部試す

                                   38/ 71
枝の内点からの距離
枝 (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∈V

g(t) の最小値 = (u, v) 間に中心があるとしたときの半径
∴ すべての枝について,g(t) の最小値を計算すればいい!
                   w


                    u t       v
                          6
                          c
                                             39/ 71
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
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
最小直径全域木 まとめ
• 最小直径全域木 = 絶対中心 からの最短路木
• 絶対中心の探索:∧ 型の端点(一次関数の交差)
計算量:

• 前処理:全点対間最短路 O(n3 ) (Floyd Warshall)
• 端点計算: O(mn)
(切片のソートは最短路計算のときに一緒に行える)


 やや珍しいパターン
(例:施設配置問題;グラフの絶対中央値)


                                   42/ 71
逆最小全域木




         43/ 71
問題:逆最小全域木
• 入力:
 重み付きグラフ G = (V, E), w : E → R
 全域木 T

• 問題:
  T が最小全域木になるような最小重み修正:
    - T は重み w + p のときの最小全域木,
      ∑
    - e |p(e)| 最小化

ヒント 1:T が MST であるための必要十分条件
ヒント 2:最低限必要な修正量を計算


                                 44/ 71
最小全域木の必要十分条件(最適性基準)
                   {∑
                        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
最低限必要な修正量
最低限必要な修正量は2部グラフマッチングでわかる

2部グラフ B = ({T, E  T }, A):

                e, e′ 間に辺がある
                    ⇐⇒ e, e′ は交換可能
                      (重み = 交換したときの得)

   T      ET     マッチング = その対を同時に交換

最大重みマッチングの分だけは,絶対修正が必要
       (負の辺 = 交換して損する辺は除いておく)

                                 46/ 71
逆全域木問題の最大最小定理

      min 重み変更量 = max マッチング


≥ は簡単(前ページ)
≤ は難しい;当面そういうものと覚えてもよい

             e, e′ 間に辺がある
                 ⇐⇒ e, e′ は交換可能
                   (重み = 交換したときの得)

  T    ET    マッチング = その対を同時に交換

                              47/ 71
最大最小定理証明のアウトライン
(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
逆最小全域木 まとめ
• 最適性基準:どの枝を交換しても得しない

• 交換可能枝の間の二部グラフを作る
    必要な修正量 ≥ マッチング

• 必要な修正量 = 最大マッチング 定理
    ⇒ 二部グラフ最大重みマッチング で解ける



 既知のうまく解ける逆問題は,だいたいフローに帰着
(例:逆二部マッチング,逆最小カット,逆最短路@ DAG)

                            49/ 71
最小全域木 ×2




           50/ 71
最小全域木 ×2
• 入力
 重み付きグラフ G = (V, E), w : E → R

• 問題
 辺を共有しない(辺素な)全域木を2つ取り
 重み和が最小になるようにせよ

ヒント 1:目的関数が凸になるように作る → 貪欲
ヒント 2:貪欲の 1 ステップごとに探索が発生




                                 51/ 71
うまくいかない関数定義

           {
            w(X) + w(Y )   閉路なし・辺共有しない
g(X, Y ) =
            +∞             それ以外


「辺共有しない」という条件のせいで凸にならない
(貪欲するときに X と Y のどちらに足すべきかが不明)

※ダメ解法:Kruskal で UnionFind×2 = この関数で貪欲




                                   52/ 71
凸になる関数の定義
          {
            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
凸なので貪欲で解ける(Kruskal と同じ)
         {
          w(X)          X をうまく配分すると森 × 2
  g(X) =
          +∞            それ以外

 for e ∈ E: 軽い順
     if X ∪ {e}: 森 ×2
        X = X ∪ {e}

必要なサブルーチン

 X が森 ×2 に配分できるとき,
 X ∪ {e} が森 ×2 に配分できるかの判定


                                      54/ 71
X :森 ×2 に e を追加できるか
• X = {F1 , F2 }:森 ×2 の形を常に保持
• e を追加できるかどうか:交換手順を探索
    (1) e が F1 に追加できれば終了
    (2) できなかったら e の交換可能枝を列挙
        それぞれについて F2 に追加を試みる 二部マッチング
    (3) F1 , F2 交互に繰り返す     増加道探索と類似

• 最短手数の交換だけ探す:幅優先探索
   (a) 同じ枝は何度もチェックしない
     → 探索中に 木を動的変更しなくてよい
交換枝の列挙:動的木を使えば全体で O(n2 )
 ☆ 列挙の順番を工夫すると動的木なしで O(n)
                                55/ 71
{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
最小全域木 ×2 まとめ
          {
           w(X)   X をうまく配分すると森 × 2
   g(X) =
           +∞     それ以外


• 凸なので貪欲で解ける
 (※ただし貪欲の 1 ステップが複雑)

• 効率的に貪欲するには:
  – X = {F1 , F2 } の形で保持
  – 交換経路を探索
     枝列挙順序を工夫して O(n)



                                57/ 71
まとめ




      58/ 71
まとめ
 • 最小全域木
                • 最小直径全域木
 • 葉指定最小全域木
                • 逆最小全域木
 • 最小比全域木
                • 最小全域木 ×2
 • 第 k 最小全域木



• 問題の定義・解答の方針
  ⇒ 興味の湧いた問題は調べてみましょう

 (ここで述べた内容はだいたい「マトロイド」に拡張可)
                             59/ 71
60/ 71
演習問題 / 発展課題
• 分散最小全域木 [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
演習問題 / 発展課題
• 次数制約付き最小全域木 [Garey-Johnson 1976]
  各頂点の次数が b 以下となる全域木を求める問題は
  NP-hard である.
• 葉最多全域木 [Garey-Johnson 1979]
 葉の数が最多の全域木を求める問題は NP-Hard である.
• 全距離最小木 [Garey-Johnson 1979]
 全頂点対の木距離の和が最小になる全域木を求める
 問題は,すべての重みが 1 であっても NP-hard である.
• 全域木 + 木 [Bernath-Kiraly 2011]
 全域木と全域とは限らない木を辺素に取れるかどうかを
 判定する問題は NP-hard である.
                                     62/ 71
演習問題 / 発展課題
• ランダムグラフの最小全域木 [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
参考文献:最小全域木
• 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
参考文献:最小比全域木
• 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
参考文献:第 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
参考文献:最小直径全域木
• 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
参考文献:逆最小全域木
• 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
参考文献:最小全域木 ×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
参考文献:演習問題 / 発展課題
• 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
• 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

Weitere ähnliche Inhalte

Was ist angesagt?

プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
 
指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端
Yoichi Iwata
 

Was ist angesagt? (20)

プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
直前合宿 講義スライド
直前合宿 講義スライド直前合宿 講義スライド
直前合宿 講義スライド
 
全域木いろいろ
全域木いろいろ全域木いろいろ
全域木いろいろ
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
ダブリング
ダブリングダブリング
ダブリング
 
指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
 

Ähnlich wie 様々な全域木問題

mathemaical_notation
mathemaical_notationmathemaical_notation
mathemaical_notation
Kenta Oono
 
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3
noname409
 
若手研究者のための招待講演会
若手研究者のための招待講演会若手研究者のための招待講演会
若手研究者のための招待講演会
Joe Suzuki
 
070 統計的推測 母集団と推定
070 統計的推測 母集団と推定070 統計的推測 母集団と推定
070 統計的推測 母集団と推定
t2tarumi
 
Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)
Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)
Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)
Daisuke Yoneoka
 

Ähnlich wie 様々な全域木問題 (20)

PRML 1.6 情報理論
PRML 1.6 情報理論PRML 1.6 情報理論
PRML 1.6 情報理論
 
mathemaical_notation
mathemaical_notationmathemaical_notation
mathemaical_notation
 
E : 解説
E : 解説E : 解説
E : 解説
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
 
代数トポロジー入門
代数トポロジー入門代数トポロジー入門
代数トポロジー入門
 
統計概論 isseing333
統計概論 isseing333統計概論 isseing333
統計概論 isseing333
 
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3
 
PRML 8.4-8.4.3
PRML 8.4-8.4.3 PRML 8.4-8.4.3
PRML 8.4-8.4.3
 
PRML上巻勉強会 at 東京大学 資料 第1章後半
PRML上巻勉強会 at 東京大学 資料 第1章後半PRML上巻勉強会 at 東京大学 資料 第1章後半
PRML上巻勉強会 at 東京大学 資料 第1章後半
 
PFDS 5.5 Pairing heap
PFDS 5.5 Pairing heapPFDS 5.5 Pairing heap
PFDS 5.5 Pairing heap
 
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
 
ロマ数16 simizut
ロマ数16 simizutロマ数16 simizut
ロマ数16 simizut
 
Re revenge chap03-1
Re revenge chap03-1Re revenge chap03-1
Re revenge chap03-1
 
8.4 グラフィカルモデルによる推論
8.4 グラフィカルモデルによる推論8.4 グラフィカルモデルによる推論
8.4 グラフィカルモデルによる推論
 
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27) 2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
 
topology of musical data
topology of musical datatopology of musical data
topology of musical data
 
パターン認識と機械学習6章(カーネル法)
パターン認識と機械学習6章(カーネル法)パターン認識と機械学習6章(カーネル法)
パターン認識と機械学習6章(カーネル法)
 
若手研究者のための招待講演会
若手研究者のための招待講演会若手研究者のための招待講演会
若手研究者のための招待講演会
 
070 統計的推測 母集団と推定
070 統計的推測 母集団と推定070 統計的推測 母集団と推定
070 統計的推測 母集団と推定
 
Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)
Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)
Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)
 

Mehr von tmaehara

クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)
tmaehara
 
クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)
tmaehara
 
inversion counting
inversion countinginversion counting
inversion counting
tmaehara
 
はじめてのKrylov部分空間法
はじめてのKrylov部分空間法はじめてのKrylov部分空間法
はじめてのKrylov部分空間法
tmaehara
 
競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系
tmaehara
 
simultaneous block diagonalization of matrices
simultaneous block diagonalization of matricessimultaneous block diagonalization of matrices
simultaneous block diagonalization of matrices
tmaehara
 

Mehr von tmaehara (8)

ICPC国内予選F解説
ICPC国内予選F解説ICPC国内予選F解説
ICPC国内予選F解説
 
クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)
 
Slide
SlideSlide
Slide
 
クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)
 
inversion counting
inversion countinginversion counting
inversion counting
 
はじめてのKrylov部分空間法
はじめてのKrylov部分空間法はじめてのKrylov部分空間法
はじめてのKrylov部分空間法
 
競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系
 
simultaneous block diagonalization of matrices
simultaneous block diagonalization of matricessimultaneous block diagonalization of matrices
simultaneous block diagonalization of matrices
 

Kürzlich hochgeladen

Kürzlich hochgeladen (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

様々な全域木問題

  • 1. 2013 年 3 月 20 日 @ NTT DATA 駒場研修センター 第 12 回日本情報オリンピオック春季トレーニング合宿 様々な全域木問題 前原 貴憲 (@tmaehara) 国立情報学研究所
  • 2. 自己紹介 • 前原 貴憲(まえはら たかのり) • Twitter: @tmaehara • Web: http://www.prefield.com (Spaghetti Source) • 略歴: 2004 沼津工業高等専門学校卒 2007 東京大学 工学部 計数工学科卒 2012 東京大学大学院 情報理工学系研究科卒 現在 国立情報学研究所 • 専門分野:連続・離散最適化,数値計算 2/ 71
  • 4. 木・全域木 • 無向グラフ G = (V, E),枝重み w : E → R – V :頂点集合,E :枝集合 ※基本的に連結なグラフだけ考える – 木(tree):閉路のない連結部分グラフ(枝集合) – 森(forest):閉路のない部分グラフ(木の集まり) – 全域木(spanning tree):すべての頂点を繋ぐ木 4/ 71
  • 5. 全域木に関する問題はとても多い! しかも 効率的に解ける問題 がわりと多い → 効率的解法のテンプレ • 全域木存在判定 • 最速全域木 • 最小全域木 • ロバスト最小全域木 • 最小比全域木 • 次数制約付全域木 • 凸最小全域木 • 葉最多全域木 • 逆最小全域木 • 確率的全域木 • 最小直径全域木 • 最小ラベル全域木 • 第 k 最小全域木 • シュタイナー木 . • 最小全域有向木 . . 5/ 71
  • 6. この講義の目標 • マイナーな全域木問題 を題材にして • 解ける問題 の解法パターンを理解する 題材 • 最小全域木 • 最小直径全域木 • 葉指定最小全域木 • 逆最小全域木 • 最小比全域木 • 最小全域木 ×2 • 第 k 最小全域木 (EASY MEDIUM HARD) 6/ 71
  • 7. だいぶ難しい内容なので 全部理解できなくても大丈夫! • 問題の定義・解法の方針が分かれば上出来 • 細かい部分が気になったら調べましょう(see: 参考文献) 【前提知識】 秋葉・岩田・北川:プログラミングコンテストチャレンジブック Cormen-Leiserson-Rivest-Stein:アルゴリズムイントロダクション 7/ 71
  • 9. 最小全域木 • 入力 重み付きグラフ G = (V, E), w : E → R • 問題: 重み和が最小の全域木を求めよ 3 1 1 2 3 2 2 9/ 71
  • 10. 最小全域木 • 入力 重み付きグラフ G = (V, E), w : E → R • 問題: 重み和が最小の全域木を求めよ 3 1 1 2 3 2 2 10/ 71
  • 11. 最小全域木 • 入力: 重み付きグラフ G = (V, E), w : E → R • 問題: 重み和が最小の全域木を求めよ • 解答:貪欲法(Kruskal) 1. 枝の軽い順に採用していく 2. ただし,閉路ができる場合は無視 Q. なぜ貪欲で解けるか? (→ どこまで拡張できるか?) 11/ 71
  • 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. 最小全域木問題の凸不等式 {∑ 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. 凸不等式が成り立つこと(左辺有限 ⇒ 右辺有限) f (X) + f (Y ) ≥ f (X − e + e′ ) + f (Y + e − e′ ) e ≥ e′ (よくある教科書の証明は,中でこれを示している) 14/ 71
  • 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. 最小全域木 まとめ • 最小全域木問題は貪欲で解ける 関数が満たす不等式を考える 特に凸不等式が成り立つとハッピー 凸不等式が成り立てば貪欲で解ける (「貪欲」1ステップが複雑な場合も;後述) (例:w(X)2 の最小化など:凸不等式成立なので貪欲) 16/ 71
  • 18. 葉を指定した最小全域木 • 入力 重み付きグラフ G = (V, E), w : E → R+ 頂点の部分集合 U ⊆ V • 問題: U が葉である 全域木の中で,重み和最小のもの 18/ 71
  • 19. グラフ問題の大原則:頂点問題 vs 枝問題 • 頂点に対する問題は解きにくい • 枝に対する問題は解きやすい 頂点に対する問題 枝に対する問題 ハミルトンパス オイラーパス 頂点被覆 枝被覆 . . . . . . 葉を指定した最小全域木: 「U を葉にする」(頂点条件)を 枝条件 で書き換える 19/ 71
  • 20. 頂点条件を枝条件で書き換える (1) U 同士を繋ぐ枝を使わない U を葉にする ⇐⇒ (2) U とそれ以外を繋ぐ枝を |U | 本以上使わない (1):U 同士を繋ぐ枝は先に除去 (2):全域木は少なくとも |U | 本 (2) 型の枝を使う ⇒ U の枝はできるだけ使わないようにする ∴ Kruskal 法の最初の枝ソートの部分を以下のように修正 (1) U 以外を繋ぐ枝(重み順ソート) (2) U と U 以外を繋ぐ枝(重み順ソート) 20/ 71
  • 21. 葉を指定した最小全域木 まとめ • 頂点条件を枝条件に書き換える – U を葉にせよ ⇒ U と接続する枝を減らせ ⇒ Kruskal の変形版が適用可能 基本的に「頂点は難しい / 枝は簡単」 ⇒ できるだけ枝条件であらわすようにする (例:最長しりとり:文字列を枝に対応させる(オイラー路) 頂点に容量のある最大流:頂点を増やして枝容量に) 21/ 71
  • 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. パラメタを用いた分数関数の凸化 { 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. パラメトリックアプローチ 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. 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. 最小比全域木 まとめ 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
  • 29. 第 k 最小全域木 • 入力: 重み付きグラフ G = (V, E), w : E → R 正整数 k • 問題: 重み和が k 番目に小さな全域木を出力 (注意:k = 1 のとき最小全域木) ヒント 1:1 番目,2 番目,…と順番に求める ヒント 2:同じ計算が多いので前処理する 29/ 71
  • 30. 簡単のため:第 2 最小全域木 (1) MST を計算 (2) MST の枝を 1 本使用禁止 にして再び MST 計算 MST のすべての枝 n 通りについて実行して min をとる 正当性: •「2ndMST で使わない 1stMST の枝」が少なくとも 1 本存在 ⇒ 「使わない枝」を禁止すると 2ndMST が出る (どれが「使わない枝」か不明なので全部試す) これを繰り返すと第 k も求まる! 30/ 71
  • 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. 前処理 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. 前処理 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. 不可避ロスの計算 前処理 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. 第 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
  • 37. 最小直径全域木 • 入力 重み付きグラフ G = (V, E), w : E → R+ • 問題: 全域木 T で,直径が最小のもの (木の直径:二点対間距離の最大値) ヒント: 「グラフのどまんなか」を探す ⇒ 「どまんなか」からの最短路木 = 最小直径全域木 SPOJ PT07C: The GbAaY Kingdom SPOJ MDST: Minimum Diameter Spanning Tree 37/ 71
  • 38. グラフの絶対中心 グラフ G の絶対中心:maxv∈V d(c, v) が最小の点 絶対中心は頂点ではない可能性がある 6 c 絶対中心からの最短路木 = 最小直径全域木 ⇒ どの枝の内側に絶対中心があるかを全部試す 38/ 71
  • 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∈V g(t) の最小値 = (u, v) 間に中心があるとしたときの半径 ∴ すべての枝について,g(t) の最小値を計算すればいい! w u t v 6 c 39/ 71
  • 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. 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. 最小直径全域木 まとめ • 最小直径全域木 = 絶対中心 からの最短路木 • 絶対中心の探索:∧ 型の端点(一次関数の交差) 計算量: • 前処理:全点対間最短路 O(n3 ) (Floyd Warshall) • 端点計算: O(mn) (切片のソートは最短路計算のときに一緒に行える) やや珍しいパターン (例:施設配置問題;グラフの絶対中央値) 42/ 71
  • 44. 問題:逆最小全域木 • 入力: 重み付きグラフ G = (V, E), w : E → R 全域木 T • 問題: T が最小全域木になるような最小重み修正: - T は重み w + p のときの最小全域木, ∑ - e |p(e)| 最小化 ヒント 1:T が MST であるための必要十分条件 ヒント 2:最低限必要な修正量を計算 44/ 71
  • 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. 最低限必要な修正量 最低限必要な修正量は2部グラフマッチングでわかる 2部グラフ B = ({T, E T }, A): e, e′ 間に辺がある ⇐⇒ e, e′ は交換可能 (重み = 交換したときの得) T ET マッチング = その対を同時に交換 最大重みマッチングの分だけは,絶対修正が必要 (負の辺 = 交換して損する辺は除いておく) 46/ 71
  • 47. 逆全域木問題の最大最小定理 min 重み変更量 = max マッチング ≥ は簡単(前ページ) ≤ は難しい;当面そういうものと覚えてもよい e, e′ 間に辺がある ⇐⇒ e, e′ は交換可能 (重み = 交換したときの得) T ET マッチング = その対を同時に交換 47/ 71
  • 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. 逆最小全域木 まとめ • 最適性基準:どの枝を交換しても得しない • 交換可能枝の間の二部グラフを作る 必要な修正量 ≥ マッチング • 必要な修正量 = 最大マッチング 定理 ⇒ 二部グラフ最大重みマッチング で解ける 既知のうまく解ける逆問題は,だいたいフローに帰着 (例:逆二部マッチング,逆最小カット,逆最短路@ DAG) 49/ 71
  • 51. 最小全域木 ×2 • 入力 重み付きグラフ G = (V, E), w : E → R • 問題 辺を共有しない(辺素な)全域木を2つ取り 重み和が最小になるようにせよ ヒント 1:目的関数が凸になるように作る → 貪欲 ヒント 2:貪欲の 1 ステップごとに探索が発生 51/ 71
  • 52. うまくいかない関数定義 { w(X) + w(Y ) 閉路なし・辺共有しない g(X, Y ) = +∞ それ以外 「辺共有しない」という条件のせいで凸にならない (貪欲するときに X と Y のどちらに足すべきかが不明) ※ダメ解法:Kruskal で UnionFind×2 = この関数で貪欲 52/ 71
  • 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. 凸なので貪欲で解ける(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. 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. {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. 最小全域木 ×2 まとめ { w(X) X をうまく配分すると森 × 2 g(X) = +∞ それ以外 • 凸なので貪欲で解ける (※ただし貪欲の 1 ステップが複雑) • 効率的に貪欲するには: – X = {F1 , F2 } の形で保持 – 交換経路を探索 枝列挙順序を工夫して O(n) 57/ 71
  • 58. まとめ 58/ 71
  • 59. まとめ • 最小全域木 • 最小直径全域木 • 葉指定最小全域木 • 逆最小全域木 • 最小比全域木 • 最小全域木 ×2 • 第 k 最小全域木 • 問題の定義・解答の方針 ⇒ 興味の湧いた問題は調べてみましょう (ここで述べた内容はだいたい「マトロイド」に拡張可) 59/ 71
  • 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. 演習問題 / 発展課題 • 次数制約付き最小全域木 [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. 演習問題 / 発展課題 • ランダムグラフの最小全域木 [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. 参考文献:最小全域木 • 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. 参考文献:最小比全域木 • 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. 参考文献:第 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. 参考文献:最小直径全域木 • 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. 参考文献:逆最小全域木 • 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. 参考文献:最小全域木 ×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. 参考文献:演習問題 / 発展課題 • 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. • 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