决策单调性

一些定义:

  • 四边形不等式

若函数 \(f\) 对于任意 \(1 \le i \le i' \le j' \le j\),都有 \(f(i', j) + f(i, j') \le f(i,j) + f(i', j')\),则称 \(f\) 满足四边形不等式。

(可以看成是四边形的两条对边和对角线的关系,可以简记为 "交叉小于包含"。)

性质 1.1:

对于任意 \(1 \le i \le j\),满足 \(f(i,j) + f(i + 1, j + 1) \le f(i,j + 1) + f(i + 1, j)\)\(f\) 满足四边形不等式的充要条件。

证明: 必要性是显然的。我们将 \(f(i, j) + f(i + 1, j + 1) \le f(i + 1, j) + f(i, j + 1)\)

\(f(i + 1, j + 2) + f(i, j + 1) \le f(i + 1, j + 1) + f(i, j + 2)\)

两边分别相加起来,即可达到一个拓展的效果。反复地做充分性即可得证。

  • 区间包含单调性

若有函数 \(f\),对于任意 \(1 \le i \le i' \le j' \le j\),都有 \(f(l, r) \le f(l', r')\), 则称 \(f\) 满足区间包含单调性。

  • 决策单调性

在最优化 \(dp\) 中,我们称使某个状态取到最优值的决策称为最优化决策。若这个最优化决策随着转移顺序的推进,随着一个方向单调递增或递减的移动,我们称这个 \(dp\) 具有决策单调性。

常见判定性质:

性质 2.1:

\(f, g\) 函数均满足决策单调性(或区间包含单调性),则对于 \(a, b > 0\)\(af + bg\) 也满足决策单调性(或区间包含单调性)。

这一点容易证明。

性质 2.2:

若函数 \(f(l , r) = g(r) - h(l)\),则 \(f\) 满足四边形不等式,若 \(g,h\) 有单调性,则 \(f\) 满足区间包含单调性。

证明: 使用性质 1.1 可以发现两边事实上是相等的。

性质 2.3:

若函数 \(f\) 是单调递增的下凸函数,\(w\) 满足四边形不等式,则 \(f(w(l,r)) 也满足四边形不等式。\)

证明:

我们令 \(w_1 = w(l, r), w_2 = w(l, r + 1), w_3 = w(l + 1, r), w_4 = w(l + 1, r + 1)\)。考虑证明:\(f(w_2) + f(w_3) \le f(w_1) + f(w_4)\)

我们现在有 \(w_2 + w_3 \le w_1 + w_4\),注意到 \(w_1, w_4\) 中一定有一个大于等于 \(w_2, w_3\) 的其中一个。不妨设 \(w_4 \ge w_2\)

对待证式和关于 \(w\) 的四边形不等式分别做一个变形:

\(w_2 - w_1 \le w_4 - w_3\)

\(f(w_2) - f(w_1) \le f(w4) - f(w3)\)

注意到 \(f\) 的性质:对于式子 \(f(x) - f(x - \delta)\)

  • \(delta\) 不变时,\(x\) 越大时,该式值越大。

  • \(x\) 不变时,\(delta\) 越大,该式值越大。

观察待证式发现,等式右边相对于等式左边满足两个条件,从而 \(f(w(l, r))\) 满足四边形不等式。


经典优化套路

(以下我们认为 \(w\) 函数可在 \(O(1)\) 时间内求出)

1D:

离线决策:

形式: \(f_i = \min _{j < i}g_{j - 1} + w(i, j)\)

性质:此时假如 \(w\) 函数满足四边形不等式,则 \(f\) 满足决策单调性。

证明:

考虑反证法,记 \(p_i, p_j\) 分别为 \(f_i, f_j\) 的最优决策,若 \(i, j\) 是不满足决策单调性的反例(即 \(p_i \le p_j \le j \le i\)),则我们有:

\(f_{p_i} + w(p_i + 1, i) \le f_{p_j} + w(p_j + 1, i)\)

\(f_{p_j} + w(p_j + 1, j) \le f_{p_i} + w(p_i + 1, j)\)

将两式左右分别相加,整理后发现与 \(w\) 满足四边形不等式的性质矛盾。

优化方式:分治

我们考虑递归解决该问题:

\(solve(l, r, lk, rk)\):表示要计算 \([l,r]\) 中所有 \(f\) 值,并且该区间内的所有点的最优决策点都在 \([lk, rk]\) 这个区间中。

我们先考虑计算 \([l,r]\) 的中点 \(mid\)\(f\) 值。直接暴力遍历 \([lk, rk]\) 即可。同时求出 \(mid\) 的最优决策点 \(pos\)。那么由决策单调性, \([l, mid - 1]\) 中的点的最优决策点一定在 \([lk, pos]\) 中。同理 \([mid + 1, r]\) 中的点的最优决策点在 \([pos, rk]\) 中。于是我们递归 \(solve(l, mid - 1, lk, pos)\)\(solve(mid + 1, r, pos, rk)\)

不难发现该算法的递归层数为 \(O(\log n)\),每层中的每个遍历区域都是紧密排列的,从而该算法的时间复杂度为 \(O(n \log n)\)

在线决策:

形式: \(f_i = \min _{j < i} f_{j - 1} + w(i, j)\)

性质:\(w\) 函数满足四边形不等式,则 \(f\) 满足决策单调性。

证明: 同上。

优化方式:二分队列

此时发现分治的做法不管用了,因为我们不能先决策 \(mid\)

我们令 \(P_i\)\(f_i\) 的最优决策位置。考虑一个个遍历每个决策位置并维护 \(P\) 数组。

容易观察到 \(P\) 的形态会变成紧密排列的相等值段。于是我们用一个队列维护三元组 \((id, l, r)\),其中 \(id\) 是决策位置,且 \(P_i = id(l \le i \le r)\).

当我们加入一个决策 \((id, l, r)\) 时,我们这样操作:

\(1\). 取出队头 \((id_h, l_h, r_h)\),若 \(r_h < id\) 则弹出队头,令 \(P_{i} = id_h (l_h \le i \le r_h)\),并重复执行 \(1\),否则来到 \(2\)

\(2\). 取出队尾 \((id_t, l_t, r_t)\):

  • \((a).\)\(id\) 对于 \(f_{l_t}\)\(id_t\) 更优,弹出队尾,重复执行 \(2(a).\)

  • \((b).\)\(id\) 对于 \(f_{r_t}\)\(id_t\) 更劣,我们令 \(l = r_t + 1, r = n\),执行 \(3\).

  • \((c).\) 若不满足 \(2(a).\)\(2(b).\),在区间 \([l_t, r_t]\) 二分找出最小的 \(pos\),使得 \(id\) 对于 \(f_{pos}\)\(id_t\) 更优,并令 \(r_t = pos - 1\)\(l = pos\)\(r = n\)。执行 \(3\).

\(3\). 加入决策 \((id, l, r)\)

2D:

分层决策:

形式: \(f_{i , k} = \min_{j < i} {f_{j - 1,k - 1} + w(i, j)}\)

优化方法: 我们令 \(g_i = f_{i, k - 1}\),按 \(\rm 1D\) 方式转移即可。

合并决策:

形式: \(f_{i,j} = \min_{i \le k < j} {f(i, k) + f(k + 1, j) + w(i, j)}\)(特殊的,令 \(f_{i,i} = 0\)

性质:

\((1)\)

结论:\(w\) 满足四边形不等式,则 \(f\) 也满足四边形不等式。

证明: 发现转移顺序是按区间长度从小到大的,于是我们尝试使用数学归纳法证明。

加入我们已经证明了区间长度小于等于 \(len - 1\) 的情况,显然 \(len = 1\) 时成立。证明 \(len\) 的情况很容易由性质 \(2.1\) 推出。

\((2)\)

结论:\(pos_{i, j}\)\(f\) 的最优决策。若 \(w\) 满足四边形不等式,则有 \(pos_{i - 1, j} \le pos_{i, j} \le pos_{i, j + 1}\)

证明: 我们考虑反证法,若有一对 \((i, j)\) 的最优决策 \(pos_{i, j} > pos_{i + 1, j}\),同时我们令 \(s_1 = pos_{i, j}, s_2 = pos_{i + 1, j}\)。其中 \(i \le s_2 < s_1 < j\)

由条件我们有:

\(f_{i, s_1} + f_{s_1 + 1, j} \le f_{i, s_2} + f_{s_2 + 1, j}\)

\(f_{i + 1, s_2} + f_{s_2 + 1, j} \le f_{i + 1, s_1} + f_{s_1 + 1, j}\)

两式左右分别相加可知:

\(f_{i, s_1} + f_{i + 1, s_2} \le f_{i + 1, s_1} + f_{i, s_2}\)

注意到 \(f\) 是满足四边形不等式的,于是就导出了矛盾。

优化方式:

通过上面的性质 \((2)\),我们可以让 \(k\) 只遍历区间 \([pos_{i - 1, j}, pos_{i, j + 1}]\)。此时的转移均摊下来就是 \(O(1)\) 的了。可以把时间复杂度从 \(O(n^3)\) 优化到 \(O(n ^ 2)\)

posted @ 2024-05-21 17:30  Little_corn  阅读(163)  评论(0编辑  收藏  举报