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
29. 第 k 最小全域木
• 入力:
重み付きグラフ G = (V, E), w : E → R
正整数 k
• 問題:
重み和が k 番目に小さな全域木を出力
(注意:k = 1 のとき最小全域木)
ヒント 1:1 番目,2 番目,…と順番に求める
ヒント 2:同じ計算が多いので前処理する
29/ 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
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
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
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
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