SlideShare a Scribd company logo
1 of 71
Download to read offline
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

More Related Content

What's hot

二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方Kensuke Otsuki
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木理玖 川崎
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドMasaki Hara
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズムTakuya Akiba
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』Proktmr
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~Yuma Inoue
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdfcatupper
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方joisino
 

What's hot (20)

二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
 
arc047
arc047arc047
arc047
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 

Similar to 様々な全域木問題

PRML 1.6 情報理論
PRML 1.6 情報理論PRML 1.6 情報理論
PRML 1.6 情報理論sleepy_yoshi
 
mathemaical_notation
mathemaical_notationmathemaical_notation
mathemaical_notationKenta Oono
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説AtCoder Inc.
 
代数トポロジー入門
代数トポロジー入門代数トポロジー入門
代数トポロジー入門Tatsuki SHIMIZU
 
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3noname409
 
PRML上巻勉強会 at 東京大学 資料 第1章後半
PRML上巻勉強会 at 東京大学 資料 第1章後半PRML上巻勉強会 at 東京大学 資料 第1章後半
PRML上巻勉強会 at 東京大学 資料 第1章後半Ohsawa Goodfellow
 
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 回帰分析とモデル選択 1hirokazutanaka
 
8.4 グラフィカルモデルによる推論
8.4 グラフィカルモデルによる推論8.4 グラフィカルモデルによる推論
8.4 グラフィカルモデルによる推論sleepy_yoshi
 
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27) 2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27) Akira Asano
 
topology of musical data
topology of musical datatopology of musical data
topology of musical dataTatsuki SHIMIZU
 
パターン認識と機械学習6章(カーネル法)
パターン認識と機械学習6章(カーネル法)パターン認識と機械学習6章(カーネル法)
パターン認識と機械学習6章(カーネル法)Yukara Ikemiya
 
若手研究者のための招待講演会
若手研究者のための招待講演会若手研究者のための招待講演会
若手研究者のための招待講演会Joe Suzuki
 
070 統計的推測 母集団と推定
070 統計的推測 母集団と推定070 統計的推測 母集団と推定
070 統計的推測 母集団と推定t2tarumi
 
Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)
Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)
Rで学ぶデータサイエンス第13章(ミニマックス確率マシン)Daisuke Yoneoka
 

Similar to 様々な全域木問題 (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章(ミニマックス確率マシン)
 

More from tmaehara

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

More from 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
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Recently uploaded (8)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

様々な全域木問題

  • 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