保序回归问题学习笔记

保序回归问题

发现好像保序回归鸽了太久了,总是被喜欢保序回归的 CXY07 暴虐,悟一下论文

问题描述

给定正整数 p,和一张偏序关系形成的 DAG,和代价函数 (y,w),wi>0,其中如果 i 能到达 j,则有 vivj 的偏序关系

求点值序列 f,满足对于点对 (i,j) 满足 vivj,均有 fifj,最小化回归代价:

i=1nwi|fiyi|p,p[1,+)max{wi|fiyi|},p=+

对于相同的 p,统称 Lp 问题

约定

  1. 称"将序列 a 中不大于 l 的元素变为 l,不小于 r 的元素变成 r"为将序列 a 向集合 [l,r] 取整
  2. 点集 SLp 均值为满足最小化 i=1nwi|vyi|p,p[1,+)max{wi|vyi|},p=+v

特殊情形下的做法

贪心算法——例1 Approximation

给定长度为 n 的正整数序列 y,w ,求单调不减的实数序列 f ,最小化 i=1nwi(fiyi)2

n2×105

​ 引理 1:点集 SL2 均值为其加权平均数 iSwiyiiSwi

​ 证明:运用导数易证

​ 引理 2:1i<n,若有 yi>yi+1,那么最优解中一定满足 fi=fi+1

​ 证明见论文

​ 有了上述两个引理算法就很 naive 了

​ 我们只需要把 yi>yi+1i 全部合并到一起用 L2 均值即可

​ 具体实现可以使用单调栈,时间复杂度 O(n)

事实上,这样的做法可以扩展到 1p<+,只需将 L2 均值改成 Lp 均值即可

但是这个做法无法推广到一般的偏序结构上,因为引理2不再成立

维护折线算法——例2 「2018 集训队互测 Day 2」有向图

给定一个 n 个点 n1 条边的有向弱连通图 G=(V,E) ,每个点均有点权 di 和修改耗时 wi

对于每个 i(1in) ,每次修改可以花费 wi 的时间把 di1 或减 1 ,求最少消耗多少时间,使得 (u,v)E,dudv

n3×105,1di109,1wi104

​ 题目等价于偏序集为一棵树的 L1 问题,即最小化 i=1nwi|fidi|

​ 容易想到树形 dp

​ 首先,fi 的取值一定在集合 D={d1,d2,,dn} 中,记 Di 表示集合 D 中第 i 小的元素

​ 设 fi,j 表示 fi=Dj 且将边看成无向边时,最小的 ksubtree(i)wk|fkdk|

​ 动态规划的转移可以根据子边的指向利用 Pi,j=minkjfi,k,Si,j=minkjfi,k 来转移

​ 引理:x[1,n],fx,Px,Sx 均为斜率单调不降的折线

​ 证明:对于叶子节点 x,显然满足

​ 对于任意节点 x ,其 fx 可以由其所有子节点的 PxSx 以及折线 y=wi|xdi| 叠加得到

​ 而 Px 为将 fx 斜率大于 0 的部分变成 y=minfi,jSx 为将 fx 斜率小于 0 的部分变成 y=minfi,j

​ 所以可以归纳地证明结论

​ 可以用线段树维护折线 f,P,S 的每一段,显然折线的分界点在集合 D

​ 运用线段树合并即可实现此问题,时间复杂度 O(nlogn)

我们发现维护折线的做法仍然无法向一般的偏序结构上扩展,瓶颈在于需要整张图的偏序结构支持自底向上的 dp

一般问题的做法

整体二分法

考虑在 Lp 问题的基础上构造一个新的 S=(a,b) 问题:

在满足原问题的所有限制条件下还满足限制 afib,最小化回归代价

p=1 的情况

引理:在 L1 问题中,如果任意 yi 均不在区间 (a,b) 内,且存在一个最优解序列 f 满足其 元素 fi 均不在区间 (a,b) 内,若 fSS 问题的一组最优解,那么一定存在 f 是原问题的一组最优解且 f 可以通过向 S 取整得到 fS

​ 证明见论文

根据引理,通过一组 S 问题的最优解,可以知道某一组原问题最优解中 fia,b 的大小关系

对于 L1 问题,最优解 fi 一定在 Y={y1,y2,,yn} 中,故只需要在该集合上做整体二分:

当二分到区间 [l,r] 时,计算 S=(Ymid,Ymid+1) 问题的最优解,即可将节点划分到左右两边

这样对于每个节点,仅需 logn 层计算即可确定选值

1<p<+ 的情况

引理 1:当 1<p<+ 时,任意集合 SLp 均值是唯一的

​ 证明:求导证明导函数单调性和至少有一个零点即可,具体证明见论文

引理 2:如果 V 的任意非空子集的 Lp 均值均不在区间 (a,b)(a<b) 内,且存在最优解 f 满足其元素 fi 也均不在 (a,b) 内。若 f^ 为相同偏序集上代价函数为 (y,w)L1 问题的一组最优解:

(yi,wi)={(0,wi((byi)p(ayi)p)),yia(1,wi((yia)p(yib)p)),yi>a

存在 f 是原问题的一组最优解,满足 f^i=0 当且仅当 fia

​ 证明见论文

根据引理1,最优解中的元素和所有的 Lp 均值的并集为有限集,故对于任意 a ,一定存在 ϵ>0,满足区间 (a,a+ϵ) 中不存在上述元素

考虑到引理2中的 wi 直接做是一个浮点数,可能有精度问题,我们可以把所有 wi 除以 ϵ

wif(x)=wi(xyi)pwi(yix)p 的导数即可,注意第二种式子可能需要带负号

套用 p=1 的做法,改成实数上整体二分即可

对于 fi 取值为整数的情况下,可以参考 [省选联考 2020 A 卷] 魔法商店

建立网络流模型

对于 L1 上的 S 问题,可以看作一个 0/1 决策问题,而 fifj 的限制可以看作 fi1fj 也得选 1

这样问题就变为了经典的最小权闭合子图问题,可以用网络流解决

例3 ExtremeSpanningTrees

给定一张 n 个点 m 条边的无向连通图 G=(V,E) 和边集 E1,E2(E1,E2E) ,每条边有初始的权值 di ,每次操作可以把一条边的权值加 1 或减 1 ,求通过最少多少次操作可以满足:

  1. 边集 E1 组成的子图是整张图的最小生成树
  2. 边集 E2 组成的子图是整张图的最大生成树

n50,m1000

可以对 m 条边建立偏序关系,计算生成树中非树边和其对应树上路径中的树边的偏序关系

之后问题转化为一般偏序集上的 L1 问题

特殊偏序结构上的优化

树上问题

对于类似例2的偏序集为树形的保序回归问题,可以在整体二分的基础上套用线性的树形 dp 来解决 S 问题

特别的是,该算法能够扩展到仙人掌上,在环上 dp 时只用枚举一个点的 0/1 选值,破环成链即可

时间复杂度为 O(nlogn)(忽略了计算 xp1 的复杂度)

多维偏序

未施工

L 问题的算法

二分法

由于 L 问题要求最小化 max,想到二分答案

每次二分后可以确定每个点的选值范围,然后在 DAG 上 dp

计算每个点在考虑完所有其后继节点后 fx 的最小值并检查其是否可行

时间复杂度 O(mlogmaxyi)

posted @   juju527  阅读(362)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示