《浅谈保序回归问题》 - 学习笔记

特殊情况下可能可以使用贪心或 DP 维护分段函数解决,这里不再展开。

4 一般问题的算法

整体二分也不用介绍了。

4.2 新问题的构造

\(L_p\) 基础上加入另一个限制,得到 \(S=\{a,b\}(a<b)\) 问题:满足原问题所有限制的同时,还满足 \(a\le f_i\le b\) ,最小化回归代价。

4.3 \(p=1\) 的情况

\(p=1\) 之所以特殊,是因为一个点集 \(U\)\(L_p\) 均值(在不考虑最小的情况下)可能是一个区间。但是另外一个性质是存在一个最优解满足所有 \(f\) 都在 \(\{y_i\}\) 中,并且移动一些 \(f\) 时带来的额外代价是简单的一次函数。

然后是一个引理:在 \(L_1\) 问题中,如果

  1. 任意 \(y_i\) 不在区间 \((a,b)\) 中,且
  2. 存在一个最优解序列 \(z\) 满足 \(z_i\) 均不在 \((a,b)\) 中(好像很显然),且
  3. \(z^S\)\(S\) 问题的一组最优解

那么原问题一定存在一组最优解 \(z\) ,使得 \(z\)\(S\) 取整能得到 \(z^S\)

我会感性理解(((

然后就可以整体二分所有 \(z\) 的取值。二分到 \(y_l,y_r\) 时,计算 \(S=\{y_{mid},y_{mid+1}\}\) 问题的最优解,以此确定现在这些 \(z\) 要被划分进 \(y_{[l,mid]}\) 还是 \(y_{[mid+1,r]}\)

4.4 \(1<p<\infty\) 的情况

引理 4.2 :可以证明任意集合 \(U\)\(L_p\) 均值唯一,且代价函数在 \(<L_p\) 时递减, \(>L_p\) 时递增。

取一个极小的区间,然后就可以套用 \(p=1\) 的证明方法。不是很想看具体证明过程。

5 特殊偏序结构上的优化

5.1 树上问题

直接套用整体二分方法,然后跑树形 DP ,即可得到 \(O(n\log n)\) 做法,看起来显然比维护分段函数好得多。

仙人掌也可以这么做。

5.2 多维偏序

定义: \(d\) 维偏序,就是点在 \(d\) 维空间里,有 \((a_1,a_2,\cdots,a_d)\le (b_1,b_2,\cdots,c_d)\) 当且仅当 \(\forall 1\le i\le d,a_i\le b_i\)

这里其实是偏序关系恰好为多维偏序,比如像下面这题:

显然在整体二分的任意时刻,每行剩下的点都是一个区间,并且这一次也只会切成两个区间,所以随便 DP 即可。

更高维的情况可能也不是很好做吧。

6 \(L_{\infty}\) 问题的算法与拓展

6.1 简单的二分法

无脑二分答案,得到每个变量的一个取值范围,然后在 DAG 上无脑 DP 即可。

6.2 问题的拓展

出题人一拍脑袋,让你在满足所有限制的情况下对每个前缀的 \(\max\) 求最小值,即对于 \(k\) ,令 \(w_i=0,i>k\) ,然后求最小值。但是现在增加了条件, \(v_i\le v_j\) 当且仅当 \(i\le j\)

此时就不能二分了,我们来找一个神奇性质。

此时显然有答案 \(\ge \max\limits_{i,j} \{mean\_err(v_i,v_j)\}\) ,然后构造这么一组解。

对于 \(v_k\) ,选择 \(mean\_err(v_i,v_j)\) 最大的一组 \(v_i,v_j(v_i\le v_k\le v_j)\) ,令 \(f_k=mean(v_i,v_j)\) (如果都是 0 那就直接选 \(y_k\) ?)。然后分三步证明这样构造的正确性。

如果有另一组 \(v_{i'},v_{j'}\)\(mean\_err\) 与这组相等,那么可以证明它们的 \(mean\) 也相等。否则如果 \(mean(v_{i'},v_{j'})\) 更大,即交点在右边,那么可以发现一组更大的 \(mean\_err\)

然后证明 \(err(v_k,mean(v_i,v_j))\) 不超过 \(mean\_err(v_i,v_j)\) :如果超过了,那么选择 \((v_i,v_k)\)\((v_k,v_j)\) 得到的 \(mean\_err\) 会更大。

最后证明这样构造满足偏序关系。考虑偏序关系 \(v_a\le v_b\) ,设 \(C_a,D_a\) 分别表示 \(v_e\le v_a\)\(err\) 函数的左半支的射线集合,和 \(v_e\ge v_a\)\(err\) 函数的右半支的射线集合, \(C_b,D_b\) 同理。那么 \(f_a\) 取的值就是 \(C_a,D_a\) 的所有交点中 \(y\) 坐标最大的那个点的 \(x\) 坐标。考虑从 \(a\) 推到 \(b\) ,会使得 \(C\) 中加入一些射线, \(D\) 中删除一些射线。分别考虑 \(C,D\) 组成的下凸壳,给 \(C\) 加一条射线的时候最大 \(y\) 坐标不降,那么 \(x\) 坐标也不降;给 \(D\) 删一条射线同理。

构造完成。于是证明了答案可以取到下界。

回到例题,那就可以设 \(pre(v_i)=\max\{mean\_error(v_{j},v_i)\mid j\le i)\}\) ,然后答案就是前缀 \(\max\) 。无脑做已经得到 \(O(n^2)\) 的复杂度了。维护之前所有函数的左半支的凸壳,然后求这个函数的右半支与凸壳的交点,即可做到 \(O(n\log n)\)

注意如果 DAG 的形式并没有 \(v_i\le v_j\Leftrightarrow i\le j\) 这么好看,那还是要 \(O(n^2)\) 的复杂度。

posted @ 2021-02-07 20:48  p_b_p_b  阅读(882)  评论(0编辑  收藏  举报