陽には与えられない、下に凸な関数 があるとします。 任意の に対して が 時間で計算できるとき、 任意の に対して が 時間で計算できます。 ただし、傾き が bound されていて、 とします。
アルゴリズム
を満たす を見つけます。
方針として二分探索と三分探索の 2 つが考えられます。
(傾き) 二分探索
簡単のために は 元集合とします。 を求める操作は、 と傾き の直線が接するときの接点の 座標を求める操作に対応しています。 が下に凸ですから、 は広義単調増加です。したがって二分探索ができます。
を求めます。 まず を計算します。次に、十分小さい について を計算します。このとき
が成り立ちます。したがって
より を求めることができます。あとは と の大小で分岐すれば良いです。 を計算する際に、同時に が計算できるならばこの部分は簡略化できます。
三分探索
任意の について次が成り立ちます。
移項して について をとると
が成り立ちます。 は上に凸ですから、三分探索ができます。
なお次のように式変形すると、制約 のラグランジュ緩和とのつながりがわかりやすくなります。ラグランジュ緩和と Aliens DP の対応については [1] に示されています。
整数値の場合
の値が等しくなる tie-breaking について注意を払う必要があります。
対処法については [2] が非常に参考になります。
ペナルティ回数の管理は、 の計算と同時に を求めることを指しています。三分探索については同様です。傾き二分探索については に注目します。
が与えられる場合
はじめ考えたのは が与えられたとき を求める問題です。
逆に が与えられたとき を求める問題も考えられます。
本記事の手法を用いて二分探索することもできますが、[2] で紹介されているように適切に を平行移動した後 について三分探索することで を一つ落とすことができます。
アルゴリズムの適用
[3] は Aliens DP の名前の由来となった問題です。 この問題のように 個使ったときの何らかの最適値、という関数について Aliens DP が適用できる可能性があります。これは次の可能性からです。
- を直接求めることが難しい
- 最適値を求める際に、これまでに何個使ったかを覚えておく必要があります
- 例えば 個の要素について 番目まで見て 個使ったときの最適値、とすると 時間です
- を求めることが易しい
- 添字に持つ必要があった個数の情報が、 を用いて DP の値に取り込まれます
- 個数の情報を持たない場合、 時間で計算できる可能性があります
[4] に Aliens 以外の問題への適用例がいくつか示されています。
参考文献
[1] Monge グラフ上の $d$-辺最短路長を計算するアルゴリズム, Kyopro Encyclopedia of Algorithms (ア辞典)
[2] Aliens DP における二分探索の色々 - noshi91のメモ