双対性
- 8. P ⊆ NP ∩ co-NP
Noを示すもっと簡単な証明はないだろうか?
8
P
NP co-NP
s t
1本は不可能?
最小値を計算したら
2だったので無理です
多項式時間で解ける(P)ならば
アルゴリズムの実行自体が効率
的に検証可能な証明といえる。
- 10. 双対問題
min
𝑥∈𝑃
𝑓 𝑥 = max
𝑦∈𝑄
𝑔(𝑦)
となるように 𝑄, 𝑔 を設計出来れば、𝑦を与えることでNo
が証明可能!
10
min
𝑥∈𝑃
𝑓(𝑥)
𝑃の範囲で𝑓(𝑥)を最小化せよ
max
𝑦∈𝑄
𝑔(𝑦)
𝑄の範囲で𝑔(𝑦)を最大化せよ
一致
𝑓(𝑥)の範囲
𝑔(𝑦)の範囲
- 11. よくあるパターン
1. 𝑓 𝑥 ≥ 𝑔(𝑦) (∀𝑥 ∈ 𝑃, ∀𝑦 ∈ 𝑄) が簡単に示せる
2. アルゴリズムの停止時に 𝑓 𝑥 = 𝑔(𝑦) となる 𝑥 ∈ 𝑃
と 𝑦 ∈ 𝑄 が得られることが示せる
→ 強双対定理とアルゴリズムの正当性が導かれる
11
(強)双対定理
min
𝑥∈𝑃
𝑓(𝑥) = max
𝑦∈𝑄
𝑔(𝑦)
- 13. 更に勉強したい人向け参考書
ネットワークフロー入門(JOI 2014-2015 春合宿)
保坂和宏、http://hos.ac/slides/20150319_flow.pdf
• 最大流・最小費用流の入門に
プログラミングコンテストチャレンジブック
秋葉拓哉、岩田陽一、北川宜稔
• 競プロ向け最大流・最小費用流の基礎と応用例
離散凸解析と最適化アルゴリズム
室田一雄、塩浦昭義
• 最適化アルゴリズムを離散凸という観点から一般化
Graphs, Networks and Algorithms
D. Jungnickel
• フローの色々なアルゴリズムが載ってる
Combinatorial Optimization
A. Schrijver
• 3部からなる超大作(オススメ)
13
- 15. 線形計画問題(LP: Linear Programming)
目的関数と制約が全て一次式な連続最適化問題
整数性条件は無し
多項式時間で解ける
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4
−2𝑥1 + 𝑥2 ≤ 2
𝑥1 ≤ 3
𝑥1, 𝑥2 ≥ 0
15
Max =
22
3
𝒙 =
2
3
,
10
3
本当に最大?
- 16. 解の上界を示す
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4 (1)
−2𝑥1 + 𝑥2 ≤ 2 (2)
𝑥1 ≤ 3 (3)
𝑥1, 𝑥2 ≥ 0
(1) + (2) + 2(3): 𝑥1 + 2𝑥2 ≤ 12
2 1 : 𝑥1 + 2𝑥2 ≤ 2𝑥1 + 2𝑥2 ≤ 8
5
3
1 +
1
3
(2): 𝑥1 + 2𝑥2 ≤
22
3
16
22
3
より大は無理
- 17. 解の上界を示す
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4 (1)
−2𝑥1 + 𝑥2 ≤ 2 (2)
𝑥1 ≤ 3 (3)
𝑥1, 𝑥2 ≥ 0
より一般に、(1)を𝑦1倍、(2)を𝑦2倍、(3)を𝑦3倍して足すと、
𝑦1 − 2𝑦2 + 𝑦3 𝑥1 + 𝑦1 + 𝑦2 𝑥2 ≤ 4𝑦1 + 2𝑦2 + 3𝑦3
17
- 18. 解の上界を示す
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4 (1)
−2𝑥1 + 𝑥2 ≤ 2 (2)
𝑥1 ≤ 3 (3)
𝑥1, 𝑥2 ≥ 0
より一般に、(1)を𝑦1倍、(2)を𝑦2倍、(3)を𝑦3倍して足すと、
𝑦1 − 2𝑦2 + 𝑦3 𝑥1 + 𝑦1 + 𝑦2 𝑥2 ≤ 4𝑦1 + 2𝑦2 + 3𝑦3
目的関数: 1𝑥1 + 2𝑥2
18
≥
≥
2つの ≥ が成り立てば、
右辺が最大値の上界
- 19. 双対LP
出来るだけ良い上界を示す問題もLPとなる。
19
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4 (× 𝑦1)
−2𝑥1 + 𝑥2 ≤ 2 (× 𝑦2)
𝑥1 ≤ 3 (× 𝑦3)
𝑥1, 𝑥2 ≥ 0
minimize 4𝑦1 + 2𝑦2 + 3𝑦3
subject to 𝑦1 − 2𝑦2 + 𝑦3 ≥ 1
𝑦1 + 𝑦2 ≥ 2
𝑦1, 𝑦2, 𝑦3 ≥ 0
双対
主問題
双対問題
- 21. 強双対性
21
maximize 𝒄𝒙
subject to 𝐴𝒙 ≤ 𝒃
𝒙 ≥ 𝟎
minimize 𝒃𝒚
subject to 𝐴T 𝒚 ≥ 𝒄
𝒚 ≥ 𝟎
=
双対LPの意味(制約の線形和で出来るだけ良い上
界・下界を示す)さえ理解すれば簡単に双対が取れ
るので標準形を暗記する必要はない。
双対LPの作り方から ≤ は明らかだが、実は常に等号
が成立する (強双対性)
もしくは (∞, 解なし)、(解なし、 − ∞)
ただし、等号が成立する整数解があるとは限らない
標準形
- 24. 例題: Min-Max (出典: POJ Monthly)
𝑛 (≤ 50000)次元の非負実数ベクトル (𝜇1, … , 𝜇 𝑛) が
あり、 σ𝑖 𝜇𝑖 = 1 を満たしている。2つのベクトル 𝑝, 𝑞 と
実数𝐶が与えられる。σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶 であるとき、σ𝑞𝑖 𝜇𝑖 の
取りうる値の最小値・最大値を求めよ。
24
http://poj.org/problem?id=2595
- 25. 例題: Min-Max (出典: POJ Monthly)
最小値を求める問題をLPで書くと、
min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖
σ𝑖 𝜇𝑖 = 1
σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶
𝜇𝑖 ≥ 0
双対LPを作ってみると、
25
- 26. 例題: Min-Max (出典: POJ Monthly)
最小値を求める問題をLPで書くと、
min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖
σ𝑖 𝜇𝑖 = 1
σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶
𝜇𝑖 ≥ 0
双対LPを作ってみると、
max
𝑥,𝑦
𝑥 + 𝐶𝑦
𝑥 + 𝑝𝑖 𝑦 ≤ 𝑞𝑖 (× 𝜇𝑖)
26
× 𝑥
(× 𝑦)
- 27. 例題: Min-Max (出典: POJ Monthly)
max
𝑥,𝑦
𝑥 + 𝐶𝑦
𝑥 + 𝑝𝑖 𝑦 ≤ 𝑞𝑖
これは、二次元の多角形内部で、(1, 𝐶)方向に一番遠
い点を求める問題。多角形を𝑂(𝑛 log 𝑛)で構築して端
点を全て調べれば良い。
27
実は定数次元のLPは線形時間で
解けることが知られている。
(Seidel’s LP algorithm など)
- 30. 𝒔-𝒕最短路問題をLPで書いてみる
辺 𝑒 を通る回数を表す変数 𝑓𝑒
𝑤𝑒 ≔ 辺𝑒の長さ
𝛿+ 𝑣 ≔ 𝑣から出る辺集合、𝛿− 𝑣 ≔ 𝑣へ入る辺集合
𝑓 𝐹 ≔ σ 𝑒∈𝐹 𝑓𝑒
minimize σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒
subject to 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = ൞
−1 (𝑣 = 𝑠)
1 (𝑣 = 𝑡)
0 (otherwise)
𝑓𝑒 ≥ 0 (∀𝑒 ∈ 𝐸)
(注意:負の閉路があると最小値は − ∞になる)
30
𝑣
𝛿−
(𝑣) 𝛿+(𝑣)
- 31. 双対LP
minimize 𝑓 σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒
s.t. 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = ൞
−1 𝑣 = 𝑠 (× 𝑝𝑠)
1 𝑣 = 𝑡 (× 𝑝𝑡)
0 otherwise (× 𝑝 𝑣)
𝑓𝑒 ≥ 0
maximize 𝑝 𝑝𝑡 − 𝑝𝑠
s.t. 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 (× 𝑓𝑢𝑣)
31
= ただし、整数解で一致するとは
まだ言っていない
目的関数・制約ともに「二変数の差」の形
二変数の差が現れたら双対ゲーを疑おう!
- 32. 距離関数
𝑠から𝑣への最短距離を𝑝 𝑣とすると、
1. 𝑝𝑡 − 𝑝𝑠 = 𝑠−𝑡最短路の長さ
2. ∀𝑢𝑣 ∈ 𝐸に対して、𝑝 𝑣 ≤ 𝑝 𝑢 + 𝑤 𝑢𝑣
が成り立つので、𝑝は双対LPの最適解である。つまり、
最短路アルゴリズムで双対LPが解ける。
𝑤が整数なら整数解が求まる。
ただし、負閉路がある場合に注意
32
maximize 𝑝 𝑝𝑡 − 𝑝𝑠
s.t. 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 for ∀𝑢𝑣 ∈ 𝐸
- 34. 解ける問題
目的関数が 𝑝𝑡 − 𝑝𝑠 の形
𝑠 から 𝑡 への最短距離を求める
制約が全て 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 の形
𝑢 から 𝑣 へ長さ 𝑤 𝑢𝑣 の辺を張る
𝑤 𝑢𝑣 ≤ 𝑝 𝑣 − 𝑝 𝑢 の形も 𝑝 𝑢 − 𝑝 𝑣 ≤ −𝑤 𝑢𝑣 と書けるので 𝑣 か
ら 𝑢 へ長さ −𝑤 𝑢𝑣 の辺を張れば良い
Bellman-Fordの更新式を思い出せばグラフは自然に作れる
𝑑 𝑣 ← min(𝑑 𝑣, 𝑑 𝑢 + 𝑤 𝑢𝑣) だから停止時に 𝑑 𝑣 ≤ 𝑑 𝑢 + 𝑤 𝑢𝑣 が成立
34
maximize 𝑝 𝑝𝑡 − 𝑝𝑠
s.t. 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 for ∀𝑢𝑣 ∈ 𝐸
- 35. 「二変数の差」を作る頻出テク
1. 絶対値上限制約: 𝑝 𝑢 − 𝑝 𝑣 ≤ 𝑤 𝑢𝑣
−𝑤 𝑢𝑣 ≤ 𝑝 𝑢 − 𝑝 𝑣 ≤ 𝑤 𝑢𝑣
2. 一変数制約: 𝑝𝑖 ≤ 𝑤𝑖
新しい変数 𝑝0 を導入し、全ての変数𝑝𝑗を𝑝𝑗 − 𝑝0
で置き換えると、𝑝𝑖 − 𝑝0 ≤ 𝑤𝑖 となる
既存の二変数制約 𝑝𝑗 − 𝑝𝑖 ≤ 𝑤𝑖𝑗 は変化しない
3. 二部グラフ
𝑥𝑖 + 𝑦𝑗 型のときは、全ての𝑦の符号を反転させる
ことで、𝑥𝑖 − 𝑦𝑗型になる
グリッドグラフとかで頻出
35
- 36. 「二変数の差」を作る頻出テク
4. 区間の和: 𝑥𝑖 + 𝑥𝑖+1 + ⋯ + 𝑥𝑗 ≤ 𝑤𝑖𝑗
𝑝𝑖 − 𝑝0 ≔ 𝑥1 + ⋯ + 𝑥𝑖 とおくと、𝑝𝑗 − 𝑝𝑖−1 ≤ 𝑤𝑖𝑗
5. 円形区間和: 𝑥𝑖 + 𝑥𝑖+1 + ⋯ + 𝑥 𝑛 + 𝑥1 + ⋯ + 𝑥𝑗
総和 𝑆 ≔ 𝑥1 + ⋯ + 𝑥 𝑛 を全通り試す・二分探索
などにより固定し、制約 𝑥1 + ⋯ + 𝑥 𝑛 = 𝑆 を追加
𝑆 − (𝑥𝑗+1 + ⋯ + 𝑥𝑖−1) と通常の区間和になる
(𝑆は変数でなく定数なことに注意)
36
= −
- 37. 例題: Asteroids2 (出典: UTPC 2013)
https://utpc2013.contest.atcoder.jp/tasks/utpc2013_08
𝑁次元ベクトル𝑝, 𝑞と 𝑁 × 𝑁行列𝐴, 𝐵 が与えられるので
0 ≤ 𝑢𝑖 ≤ 𝑝𝑖 𝑖 ∈ 𝑁
0 ≤ 𝑣𝑗 ≤ 𝑞 𝑗 (𝑗 ∈ [𝑁])
𝐴𝑖𝑗 ≤ 𝑢𝑖 + 𝑣𝑗 ≤ 𝐵𝑖𝑗 𝑖, 𝑗 ∈ N
を満たす整数ベクトル 𝑢, 𝑣 が存在するか判定せよ。
37
∞
−∞
3
2
1
1
7
5
3
1 2
4
No
- 38. 例題: Asteroids2 (出典: UTPC 2013)
新たに変数𝑠を導入し、𝑢𝑖 → 𝑢𝑖 − 𝑠, 𝑣𝑖 → 𝑠 − 𝑣𝑖 と置き
直すと、
0 ≤ 𝑢𝑖 − 𝑠 ≤ 𝑝𝑖 𝑖 ∈ 𝑁
0 ≤ 𝑠 − 𝑣𝑗 ≤ 𝑞 𝑗 (𝑗 ∈ [𝑁])
𝐴𝑖𝑗 ≤ 𝑢𝑖 − 𝑣𝑗 ≤ 𝐵𝑖𝑗 𝑖, 𝑗 ∈ N
全て差の形になったので負閉路検出して終了
38
- 39. 例題: Cashier Employment (出典: Tehran 2000)
http://poj.org/problem?id=1275
24時間営業のスーパーが店員を募集している。𝑖 時か
ら 𝑖 + 8 時までの8時間働く(日を跨ぐ可能性あり)こと
を希望する応募者が𝑐𝑖人居る。𝑖 時から 𝑖 + 1 時の間は
少なくとも 𝑟𝑖 人の店員が必要である。最小何人の店員
を雇えばよいか?
𝑖 時から 𝑖 + 8 時希望の応募者から 𝑥𝑖 人を雇うとすると、
σ 𝑗=0
7
𝑥(𝑖−𝑗) mod 24 ≥ 𝑟𝑖 が満たされる必要がある。
円形区間和
39
- 40. 例題: Cashier Employment (出典: Tehran 2000)
雇う人数の最小値を二分探索で求めよう。
𝑝𝑖 − 𝑝0 ≔ 𝑥0 + ⋯ + 𝑥𝑖−1 とすると、𝑘 人で可能かは以
下のLPで判定できる。
𝑝24 − 𝑝0 = 𝑘
0 ≤ 𝑝𝑖+1 − 𝑝𝑖 ≤ 𝑐𝑖 (𝑖 = 0, … , 23)
𝑝𝑖+1 − 𝑝𝑖−7 ≥ 𝑟𝑖 (𝑖 = 7, … , 23)
𝑘 − 𝑝17+𝑖 − 𝑝𝑖+1 ≥ 𝑟𝑖 𝑖 = 0, … , 6
全て差の形になったので負閉路検出して終了
40
類題: YamanoteLine (SRM553Hard)
円形区間和の上限・下限制約で総和の取りうる値の総数を求める
- 43. フロー
各辺𝑒に容量𝑐 𝑒(≥ 0)のある有向グラフと供給需要関数
𝑏: 𝑉 → ℝ に対して、以下を満たす𝑓: 𝐸 → ℝ≥0 を「許容
フロー」という。
𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = −𝑏 𝑣
0 ≤ 𝑓𝑒 ≤ 𝑐 𝑒 ∀𝑒 ∈ 𝐸
43
𝑣
𝛿−
(𝑣) 𝛿+(𝑣)
𝑏 𝑣 > 0な点では
𝑏 𝑣湧き出る
𝑏 𝑣 = 0な点では
入る量=出る量
𝑒を通して最大𝑐 𝑒
まで流せる
𝑏 𝑣 < 0な点では
−𝑏 𝑣消費する
- 44. 最小費用流問題
最小重みの許容フローを求める問題
最短路(𝑏𝑠 = 1, 𝑏𝑡 = −1, 𝑏 𝑣 = 0)の自然な拡張
minimize 𝑓 σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒
subject to 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = −𝑏 𝑣
0 ≤ 𝑓𝑒 ≤ 𝑐 𝑒 (∀𝑒 ∈ 𝐸)
多項式時間で解ける
アルゴリズムの解説は省略
他の資料で勉強してね
44
- 45. 双対LP
minimize 𝑓 σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒
s.t. 𝑓 𝛿−
𝑣 − 𝑓 𝛿+
𝑣 = −𝑏 𝑣 (× 𝑝 𝑣)
0 ≤ 𝑓𝑒 ≤ 𝑐 𝑒 (× 𝑧 𝑒)
maximize 𝑝,𝑧 − σ 𝑣 𝑏 𝑣 𝑝 𝑣 − σ 𝑒 𝑐 𝑒 𝑧 𝑒
s.t. 𝑝 𝑣 − 𝑝 𝑢 − 𝑧 𝑢𝑣 ≤ 𝑤 𝑢𝑣 (× 𝑓𝑢𝑣)
𝑧 𝑒 ≥ 0
𝑤が整数なら、𝑝も整数最適解が存在
最短路反復法で使うポテンシャル𝑝が実は双対最適解
45
=
- 46. もう少し整理
maximize 𝑝,𝑧 − σ 𝑣 𝑏 𝑣 𝑝 𝑣 − σ 𝑒 𝑐 𝑒 𝑧 𝑒
s.t. 𝑝 𝑣 − 𝑝 𝑢 − 𝑧 𝑢𝑣 ≤ 𝑤 𝑢𝑣
𝑧 𝑒 ≥ 0
minimize 𝑝,𝑧 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑒 𝑐 𝑒 𝑧 𝑒
s.t. 𝑝 𝑣 − 𝑝 𝑢 − 𝑧 𝑢𝑣 ≤ 𝑤 𝑢𝑣
𝑧 𝑒 ≥ 0
minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
46
−1倍
=
𝑧 𝑢𝑣 の値は 𝑝 𝑢, 𝑝 𝑣 から定まる
- 47. 解ける問題
47
minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
線形関数とmax(0, 二変数の差 − 定数)の和
𝑝 𝑣 − 𝑝 𝑢
0 𝑤 𝑢𝑣
傾き = 𝑐 𝑢𝑣 > 0
- 49. 解ける問題
49
minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
「二変数の差に関する下に凸な折れ線」の和
の最小化は最小費用流で解ける。
折れ線を分解して上の形にしてからグラフを構築すれば
良い
σ 𝑣 𝑏 𝑣 = 0 なことを考えると、σ 𝑣 𝑏 𝑣 𝑝 𝑣の部分もこの形
最短路のときの「二変数の差」を作る頻出テクがこっちで
も役に立つ
途中で−1倍したので、最小値 = −最小費用流なことに
注意
- 50. 例題: How to Create a Good Game (出典: JAG Summer 2010)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2230
𝑁(≤ 100)点𝑀(≤ 1000)辺のDAGが与えられる。点0か
ら点𝑁 − 1へのLongest Pathの長さを変えないように、
出来るだけ辺の重みを増やしたい。増やす重みの和の
最大値を求めよ。
Longest Pathの長さを𝐷、辺𝑒の重みを𝑤𝑒、増やす量を
𝑎 𝑒とすると、
max
𝑎≥0
σ 𝑒 𝑎 𝑒
s.t. Longest Pathの長さが𝐷
50
- 51. 例題: How to Create a Good Game (出典: JAG Summer 2010)
最短路の双対から、Longest Pathの長さが𝐷以下
⇔ 以下を満たす𝑝が存在。
𝑝 𝑁−1 − 𝑝0 ≤ 𝐷
𝑝 𝑣 − 𝑝 𝑢 ≥ 𝑤 𝑢𝑣 + 𝑎 𝑢𝑣
よって、解きたい問題は
max
𝑎,𝑝
σ 𝑒 𝑎 𝑒
𝑝 𝑁−1 − 𝑝0 ≤ 𝐷
𝑝 𝑣 − 𝑝 𝑢 ≥ 𝑤 𝑢𝑣 + 𝑎 𝑢𝑣
𝑎 𝑒 ≥ 0
51
- 52. 例題: How to Create a Good Game (出典: JAG Summer 2010)
52
min
𝑎,𝑝
σ −𝑎 𝑒
𝑝 𝑁−1 − 𝑝0 ≤ 𝐷
𝑝 𝑣 − 𝑝 𝑢 ≥ 𝑤 𝑢𝑣 + 𝑎 𝑢𝑣
𝑎 𝑒 ≥ 0
𝑝 𝑣 − 𝑝 𝑢
0 𝑤 𝑢𝑣
傾き−1
∞
−𝑎 𝑢𝑣
下に凸なので分解して最小費用流で終了
−1倍して
= ∞ max 0, 𝑝 𝑢 − 𝑝 𝑣 + 𝑤 𝑢𝑣
+ 𝑝 𝑢 − 𝑝 𝑣 + 𝑤 𝑢𝑣
- 53. 例題: じょうしょうツリー (出典: UTPC 2012)
https://utpc2012.contest.atcoder.jp/tasks/utpc2012_12
各頂点𝑣が値𝑐𝑖を持つ𝑁(≤ 105)点の根付き木が与えら
れる。コストを1払うことで一つの頂点の値を±1変更で
きる。各点𝑢とその子供𝑣について、𝑐 𝑢 > 𝑐 𝑣が成り立つ
ように変更する最小コストを求めよ。
53
コスト8
- 54. 例題: じょうしょうツリー (出典: UTPC 2012)
簡単な変形で、 𝑐 𝑢 > 𝑐 𝑣ではなく 𝑐 𝑢 ≥ 𝑐 𝑣 を目指す問題に出来る。
𝑝 𝑣 ≔ 変更後の𝑣の値、とすると
min
𝑝
σ 𝑣 |𝑝 𝑣 − 𝑐 𝑣|
s.t. 𝑝 𝑢 ≥ 𝑝 𝑣
|𝑝 𝑣 − 𝑐 𝑣|が一変数なので𝑝 𝑣 → 𝑝 𝑣 − 𝑝0と置き直すと
min 𝑝 σ 𝑣 |𝑝 𝑣 − 𝑝0 − 𝑐 𝑣|
s.t. 𝑝 𝑢 ≥ 𝑝 𝑣
54
𝑝 𝑣 − 𝑝0
0 𝑐 𝑣
|𝑝 𝑣 − 𝑝0 − 𝑐 𝑣|
下に凸なので分解して最小費用流で終了
…と言いたいところだが𝑁が大きいのでTLE
- 55. 例題: じょうしょうツリー (出典: UTPC 2012)
min 𝑝 σ 𝑣 |𝑝 𝑣 − 𝑝0 − 𝑐 𝑣|
s.t. 𝑝 𝑢 ≥ 𝑝 𝑣
分解すると、
min
𝑝
σ 𝑣 max(0, 𝑝 𝑣 − 𝑝0 − 𝑐 𝑣)
0から𝑣へ容量1重み𝑐 𝑣
+ σ 𝑣 max(0, 𝑝0 − 𝑝 𝑣 + 𝑐 𝑣)
𝑣から0へ容量1重み−𝑐 𝑣
+ σ 𝑢𝑣 ∞max(0, 𝑝 𝑣 − 𝑝 𝑢)
𝑢から𝑣へ容量∞重み0
55
𝑣
𝑢
0 0
𝑐 𝑢
−𝑐 𝑢
𝑐 𝑣
−𝑐 𝑣
- 56. 例題: じょうしょうツリー (出典: UTPC 2012)
需要供給無しなので、負閉路を詰め込む問題。
グラフの形から全ての負閉路は0 → 𝑢 → 子供 → ⋯ → 𝑣 → 0という形をして
おり、葉から根に向かって以下の貪欲法で解ける。
𝑢 … 𝑣0というパスでまだ使えるものの長さをヒープで管理する。
𝑢を以下のようにして処理する
1. 子供のヒープを全てマージ
2. ヒープにパス𝑢0の長さ−𝑐 𝑢を突っ込む
3. 𝑐 𝑢 + ヒープの最小値 < 0 ならばヒープからpopして貪欲に使う
データ構造をマージする一般的テクで𝑂(𝑛 log2
𝑛)
マージ可能ヒープを用いると𝑂(𝑛 log 𝑛)
56
𝑣
𝑢
0 0
𝑐 𝑢
−𝑐 𝑢
𝑐 𝑣
−𝑐 𝑣
- 57. 例題: じょうしょうツリー (出典: UTPC 2012)
𝑢 … 𝑣0というパスでまだ使えるものの長さをヒープで管理する。
𝑢を以下のようにして処理する
1. 子供のヒープを全てマージ
2. ヒープにパス𝑢0の長さ−𝑐 𝑢を突っ込む
3. 𝑐 𝑢 + ヒープの最小値 < 0 ならばヒープからpopして貪欲に使う
57
6
2 10
3 5 8
9 5
−9 −5
−3 −5
−9, −8, −5 → −8, −5
−5, −3, −2 → −3, −2 −10, −8, −5
−10, −8, −5, −3, −2
答え: 9 − 8 + 5 − 2 + 10 − 6 = 8
- 58. 例題: じょうしょうツリー (出典: UTPC 2012)
貪欲の証明:
𝐷 𝑢 ≔ 𝑢以下の頂点集合(𝑢を含む)とすると、𝑢を処理し終えた段
階で𝐺[ 0 ∪ 𝐷 𝑢]の最小費用流が求まっていることを示す。
𝐺[ 0 ∪ 𝐷 𝑢 ∖ 𝑢 ]の最小費用流は、グラフの形から各子供𝑣につ
いて𝐺[ 0 ∪ 𝐷𝑣]の最小費用流の和と等しい。
𝑢を追加したことで生じる新たな閉路は0𝑢 … 𝑣0という形のものだ
けであり、0𝑢の容量が1であることから、この中で最小のものを1
つ選べば最小費用流になる。
58
類題: 花火 (第二回ドワンゴからの挑戦状予選)
Farm Village (JAG Asia 2017)
特殊なグラフの最小費用流
- 63. ラグランジュ双対
出来るだけ良い上界を求める問題を考えよう。
(この問題をラグランジュ双対という)
𝐿 𝜆 ≔ max
𝑥∈𝑃
𝑓 𝑥 − 𝜆𝑔(𝑥) とすると、𝐿(𝜆)は下に凸となるので、
(三分探索などで)最小化出来る。
𝐿 𝛼𝜆1 + 1 − 𝛼 𝜆2 = 𝑓 𝑥∗ − 𝛼𝜆1 + 1 − 𝛼 𝜆2 𝑔(𝑥∗)
= 𝛼 𝑓 𝑥∗ − 𝜆1 𝑔 𝑥∗ + 1 − 𝛼 𝑓 𝑥∗ − 𝜆2 𝑔 𝑥∗
≤ 𝛼𝐿 𝜆1 + 1 − 𝛼 𝐿(𝜆2)
63
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 = 0
min
𝜆
max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥≤
- 64. 強双対性
𝑓 𝑥 − 𝜆𝑔(𝑥) を最大化する𝑥の集合を𝑋(𝜆)と定義する。もし、
𝑥 ∈ 𝑋(𝜆)であって、𝑔 𝑥 = 0 となるものが存在すれば、等号が
成立する。𝜆 を小さくすれば𝑔(𝑥)は大きくなり、大きくすれば𝑔(𝑥)
は小さくなるので、二分探索すればちょうど0になるものが見つか
り元の問題が解けるのでは?
等号が成立しても全ての 𝑥 ∈ 𝑋(𝜆) で𝑔 𝑥 = 0 となるとは限らないの
で、実際に𝑥を構築する方法は少し考えないといけない
最適値を求めるだけなら二分探索して終了
64
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 = 0
min
𝜆
max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥
=
?
一般には成り立たない
が、LPでは成り立つ
- 65. 強双対性(LPの場合)
𝐴𝒙 ≤ 𝒃 の多面体中で、(𝒄 − 𝜆𝒅)方向に一番遠い点を
求める問題。
𝜆 を動かすと、𝑋(𝜆)の範囲も連続的に動くので、ちょう
ど𝒅𝒙 = 𝑘 となる点が存在する。
65
max
𝒙
𝒄𝒙
s.t. 𝐴𝒙 ≤ 𝒃
𝒅𝒙 = 𝑘
min
𝜆
max
𝒙
𝒄𝒙 − 𝜆(𝒅𝒙 − 𝑘)
s.t. 𝐴𝒙 ≤ 𝒃
=
𝐴𝒙 ≤ 𝒃 𝒄 − 𝜆𝒅
𝒅𝒙 = 𝑘 𝑋(𝜆)
整数解に限定したら飛び越すかも
- 66. 𝒈 𝒙 ≤ 𝟎 の場合
LPの場合は等号成立
66
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 ≤ 0
min
𝜆≥0
max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥
≤
∵ 𝑔 𝑥 ≤ 0, 𝜆 ≥ 0 なら −𝜆𝑔 𝑥 ≥ 0
- 68. 双対LPとの関係
全部の制約をラグランジュ緩和すれば双対LPになる。
𝑥𝑖の係数は 𝑐𝑖 − 𝐴∗𝑖 𝒚 (𝐴∗𝑖 ≔ 𝐴の𝑖列ベクトル)
もし、ある 𝑖 で 𝑐𝑖 − 𝐴∗𝑖 𝒚 > 0 なら、max
𝒙
⋯ = ∞
逆に、全ての 𝑖 で 𝑐𝑖 − 𝐴∗𝑖 𝒚 ≤ 0 なら、max
𝒙
⋯ = 𝒃𝒚
68
max
𝒙
𝒄𝒙 s.t. 𝐴𝒙 ≤ 𝒃, 𝒙 ≥ 0
min
𝒚≥0
max
𝒙
𝒄𝒙 − 𝒚T(𝐴𝒙 − 𝒃) s.t. 𝒙 ≥ 0
=
min
𝒚
𝒃𝒚 s.t. 𝐴T 𝒚 ≥ 𝒄, 𝒚 ≥ 0
=
- 71. 例題: Min-Max (出典: POJ Monthly) の別解
𝑛 (≤ 50000)次元の非負実数ベクトル (𝜇1, … , 𝜇 𝑛) が
あり、 σ𝑖 𝜇𝑖 = 1 を満たしている。2つのベクトル 𝑝, 𝑞 と
実数𝐶が与えられる。σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶 であるとき、σ𝑞𝑖 𝜇𝑖 の
取りうる値の最小値・最大値を求めよ。
71
http://poj.org/problem?id=2595
min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖
σ𝑖 𝜇𝑖 = 1
σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶
𝜇𝑖 ≥ 0
←この制約がなければ非常に簡単
(一番小さい𝑞𝑖に対して𝜇𝑖 = 1とすればよい)
- 72. 例題: Min-Max (出典: POJ Monthly) の別解
ラグランジュ双対を取ると、
max
𝜆
min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖 + 𝜆(σ𝑖 𝑝𝑖 𝜇𝑖 − 𝐶)
σ𝑖 𝜇𝑖 = 1
𝜇𝑖 ≥ 0
(𝑞𝑖 + 𝜆𝑝𝑖) が一番小さい 𝑖 に対して、𝜇𝑖 = 1 とすれば
内側の最小化可能。
𝑝𝑖 − 𝐶 の符号で二分探索すれば外側の最大化が出
来る。
双対LPで幾何の問題にするより、かなり簡単!
72
- 73. 例題: Skyland (出典: JAG Spring 2012)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2396
𝑛 (≤ 100)個の浮遊島がある。各島の高度は0以上の
任意の実数値に設定できる。𝑖 番目の島を高度ℎにする
にはコストが𝑑𝑖ℎかかる。島𝑖と島𝑗の高度差が𝑥あるとコ
ストが𝑐𝑖𝑗 𝑥かかる。高度の合計を𝐻以上にする最小コス
トを求めよ。(本来はそのようなℎを求める問題)
73
min
ℎ
σ𝑖 𝑑𝑖ℎ𝑖 + σ𝑖𝑗 𝑐𝑖𝑗|ℎ𝑖 − ℎ𝑗|
σ𝑖 ℎ𝑖 ≥ 𝐻
ℎ𝑖 ≥ 0
←この制約がなければ
双対最小費用流の形
- 74. 例題: Skyland (出典: JAG Spring 2012)
ラグランジュ双対を取ると、
双対最小費用流で内側の最小化が可能
よく眺めると全ての重みが0なので、供給需要を満
たすフローがあるか判定問題→最大流
許容フローがあるかどうかで二分探索すれば外側の
最大化が可能
解の構築はこの方針だともう少し考察が必要
74
max
𝜆≥0
min
ℎ
σ𝑖 𝑑𝑖ℎ𝑖 + σ𝑖𝑗 𝑐𝑖𝑗|ℎ𝑖 − ℎ𝑗| −𝜆(σ𝑖 ℎ𝑖 − 𝐻)
ℎ𝑖 ≥ 0
- 77. 例題: Longest Shortest Path (出典: JAG Asia 2015)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2736
𝑁(≤ 200)点𝑀(≤ 2000)辺の重み付き有向グラフが与
えられる。各辺𝑒について、コスト𝑥 ⋅ 𝑐 𝑒(非負実数)支払う
ことで重みを𝑤𝑒から𝑤𝑒 + 𝑥に増加させることが出来る。
予算𝑃の範囲内で𝑠-𝑡最短路の長さを最大化せよ。
77
max
𝑥
(重み𝑤 + 𝑥での𝑠−𝑡距離)
σ 𝑒 𝑐 𝑒 𝑥 𝑒 ≤ 𝑃
𝑥 𝑒 ≥ 0
- 78. 例題: Longest Shortest Path (出典: JAG Asia 2015)
ラグランジュ双対を取ると、
双対最小費用流で内側の最大化が可能
σ 𝑒 𝑐 𝑒 𝑥 𝑒 − 𝑃の符号で二分探索すれば外側の最小化
が可能
78
min
𝜆≥0
max
𝑥
(𝑤 + 𝑥での𝑠−𝑡距離) − 𝜆 σ 𝑒 𝑐 𝑒 𝑥 𝑒 − 𝑃
𝑥 𝑒 ≥ 0
min
𝜆≥0
max
𝑥,𝑝
𝑝𝑡 − 𝑝𝑠 − 𝜆 σ 𝑒 𝑐 𝑒 𝑥 𝑒 − 𝑃
𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 + 𝑥 𝑢𝑣
𝑥 𝑒 ≥ 0
=
𝑠-𝑡最短路の双対
- 79. 例題: Longest Shortest Path (出典: JAG Asia 2015)
入力が小さいのでこのままでも解けるが、もう少し高速
化が可能。𝜆 → 1/𝐹 と置き換えると、
これは(流量𝐹の最小費用流 + 𝑃)/𝐹 を最小化する問題
⇒ 𝐹 を1ずつ増やしていくことで解ける
79
min
𝐹>0
max
𝑥,𝑝
(𝐹𝑝𝑡 − 𝐹𝑝𝑠 − σ 𝑒 𝑐 𝑒 𝑥 𝑒 + 𝑃)/𝐹
𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 + 𝑥 𝑢𝑣
𝑥 𝑒 ≥ 0
- 80. 例題: きたまさの逆襲 (出典: UTPC 2012)
https://utpc2012.contest.atcoder.jp/tasks/utpc2012_10
重み付き二部グラフ𝐺 = (𝑈, 𝑉)がある。秋葉さんは大きさ|𝑉|の
マッチングで出来るだけ重みの小さいものが欲しい。きたまささ
んは重みを操作することで秋葉さんの妨害をしたい。𝑈の分割
𝑈 = 𝑈1 ∪ ⋯ ∪ 𝑈 𝑑があり、コスト𝑏𝑖を支払うことで𝑈𝑖に接続する全
ての辺の重みを1増えせる(複数回増やして良い)。(秋葉さんの
マッチングの重み)−(きたまささんのコスト)を最大化せよ。
80
max
𝜆1,…,𝜆 𝑑≥0
min
𝑓
σ𝑖 σ 𝑢∈𝑈 𝑖
σ 𝑣(𝑤 𝑢𝑣 + 𝜆𝑖) 𝑓𝑢𝑣 − σ𝑖 𝑏𝑖 𝜆𝑖
𝑓: 大きさ|𝑉|のマッチング
- 81. 例題: きたまさの逆襲 (出典: UTPC 2012)
ラグランジュ双対をとった形だと思うと、
81
max
𝜆1,…,𝜆 𝑑≥0
min
𝑓
σ 𝑒 𝑤𝑒 𝑓𝑒 + σ𝑖(σ 𝑢∈𝑈 𝑖
σ 𝑣 𝑓𝑢𝑣 − 𝑏𝑖)𝜆𝑖
𝑓: 大きさ|𝑉|のマッチング
=min
𝑓
σ 𝑒 𝑤𝑒 𝑓𝑒
𝑓: 大きさ|𝑉|のマッチング
σ 𝑢∈𝑈 𝑖
σ 𝑣 𝑓𝑢𝑣 ≤ 𝑏𝑖
- 82. 例題: きたまさの逆襲 (出典: UTPC 2012)
これは(双対でなく普通の)最小費用流
82
min
𝑓
σ 𝑒 𝑤𝑒 𝑓𝑒
𝑓: 大きさ|𝑉|のマッチング
σ 𝑢∈𝑈 𝑖
σ 𝑣 𝑓𝑢𝑣 ≤ 𝑏𝑖
𝑠 𝑈𝑖 𝑢 𝑣 𝑡
重み
容量
0 0 𝑤 𝑢𝑣 0
𝑏𝑖 1 1 1
この容量制約の双対変数が𝜆𝑖
よって整数解が存在
𝑈𝑖から出る流量
の和が𝑏𝑖以下
- 83. 例題: Homework (ICPC Asia 2017)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1385
(意訳) 2つの二部グラフ𝐺1 = (𝑈1 ∪ 𝑉, 𝐸1)と𝐺2 = (𝑈2 ∪
𝑉, 𝐸2)が与えられる。𝑉 = 𝑉1 ∪ 𝑉2と分割し、(𝑈1, 𝑉1)と
(𝑈2, 𝑉2)の最大マッチングの和を最小化せよ。
83
a b c
1 4 6
2 3 5
A B C
2 3 5
1 4 6
𝑈1
𝑉
𝑉
𝑈2
1 + 1 = 2
- 84. 例題: Homework (ICPC Asia 2017)
𝑓𝑒 ≔ 𝑒をマッチングに含めるか
𝜆 𝑣 ≔ 𝑣 を 𝑉1に含めるか
と定義し、min max ~ の形で書くと
84
min
𝜆∈ 0,1 𝑉
max
𝑓
𝑢𝑣∈𝐸1
𝜆 𝑣 𝑓𝑢𝑣 +
𝑢𝑣∈𝐸2
(1 − 𝜆 𝑣)𝑓𝑢𝑣
𝑓: 𝐺1, 𝐺2のマッチング
𝜆 𝑣 = 0なら𝑢𝑣を使っても意味なし
- 85. 例題: Homework (ICPC Asia 2017)
85
min
𝜆∈ 0,1 𝑉
max
𝑓
𝑒∈𝐸2
𝑓𝑒 +
𝑣
𝜆 𝑣
𝑢∈𝑈1
𝑓𝑢𝑣 −
𝑢∈𝑈2
𝑓𝑢𝑣
𝑓: 𝐺1, 𝐺2のマッチング
max
𝑓
σ 𝑒∈𝐸2
𝑓𝑒
𝑓: 𝐺1, 𝐺2のマッチング
σ 𝑢∈𝑈1
𝑓𝑢𝑣 − σ 𝑢∈𝑈2
𝑓𝑢𝑣 = 0 ∀𝑣 ∈ 𝑉
≥
𝜆 ∈ 0,1 𝑉となる最適解があれば等号成立
- 86. 例題: Homework (ICPC Asia 2017)
𝐺1で𝑣を使うなら𝐺2でも𝑣を使うような最大マッチングを
求める、最大流の基礎的な応用問題 (Dining@POJ
3281 と同じ問題)
最大流の双対解=最小カットは0,1の値を取るので
等号成立
他にも色々な方法で同じ解法に至れる(マトロイド交
差の双対など)
86
max
𝑓
σ 𝑒∈𝐸2
𝑓𝑒
𝑓: 𝐺1, 𝐺2のマッチング
σ 𝑢∈𝑈1
𝑓𝑢𝑣 − σ 𝑢∈𝑈2
𝑓𝑢𝑣 = 0 ∀𝑣 ∈ 𝑉
- 88. まとめ
min max ~ 最適化
⇒ ラグランジュ双対とみなして元に戻してみよう
双対LPが最適整数解を持つなら、ラグランジュ乗
数も最適整数解を持つ
88
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 = 0
min
𝜆
max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥
≤ LPでは等号成立
解ける問題+邪魔な制約
⇒ ラグランジュ双対をとって𝑔 𝑥 の符号で
二分探索しよう
出来るだけ良い
上界を得たい
- 89. 全体のまとめ
LP双対
制約式の線形和で出来るだけ良い上界(下界)を作る
最短路・負閉路
目的関数・制約が「二変数の差」
最小費用流
「二変数の差に関する下に凸な折れ線」の和の最小化
minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
ラグランジュ双対
LP双対の途中段階とみなせる
邪魔な制約の除去
min max ~ 型最適化
89