1D/1D动态规划的三种优化方法
1D/1D1D/1D1D/1D动态规划
形如dp[i]=min{dp[j]+w(j,i)}(Li≤j≤Ri)dp[i]=min\{dp[j]+w(j,i)\} (L_i\leq j\leq R_i)dp[i]=min{dp[j]+w(j,i)}(Li≤j≤Ri) 的dpdpdp方程被称作1D/1D1D/1D1D/1D动态规划,其中LiL_iLi和RiR_iRi单调递增,w(j,i)w(j,i)w(j,i)决定着优化策略选择。
(dp[i]=max{dp[j]+w(j,i)}dp[i]=max\{dp[j]+w(j,i)\}dp[i]=max{dp[j]+w(j,i)}与dp[i]=min{dp[j]+w(j,i)}dp[i]=min\{dp[j]+w(j,i)\}dp[i]=min{dp[j]+w(j,i)}类似,本文不赘述)
决策单调性优化DP
决策单调性
设j0[i]j_0[i]j0[i]表示dp[i]dp[i]dp[i]转移的最优决策点,那么决策单调性可描述为 ∀i≤j,j0[i]≤j0[j]\forall i\leq j,j_0[i]\leq j_0[j]∀i≤j,j0[i]≤j0[j]。也就是说随着iii的增大,所找到的最优决策点是递增态(非严格递增)。
四边形不等式
表述1:
w(x,y)w(x,y)w(x,y)为定义在整数集合上的一个二元函数,若 ∀a≤b≤c≤d,w(a,c)+w(b,d)≤w(a,d)+w(b,c)\forall a\leq b\leq c\leq d,w(a,c)+w(b,d)\leq w(a,d)+w(b,c)∀a≤b≤c≤d,w(a,c)+w(b,d)≤w(a,d)+w(b,c),那么函数www满足四边形不等式。
表述2:
w(x,y)w(x,y)w(x,y)为定义在整数集合上的一个二元函数,若 ∀a<b,w(a,b)+w(a+1,b+1)≤w(a+1,b)+w(a,b+1)\forall a<b,w(a,b)+w(a+1,b+1)\leq w(a+1,b)+w(a,b+1)∀a<b,w(a,b)+w(a+1,b+1)≤w(a+1,b)+w(a,b+1),那么函数www满足四边形不等式。
定理:
1D/1D1D/1D1D/1D动态规划具有决策单调性当且仅当函数www满足四边形不等式 时成立。
实现
单调队列优化DP
形如dp[i]=min{dp[j]+A(i)+B(j)}dp[i]=min\{dp[j]+A(i)+B(j)\}dp[i]=min{dp[j]+A(i)+B(j)}的dpdpdp方程均可尝试使用单调队列优化。
实现
斜率优化DP
形如dp[i]=min{A(i)×B(j)+C(i)+D(j)}dp[i]=min\{A(i)\times B(j)+C(i)+D(j)\}dp[i]=min{A(i)×B(j)+C(i)+D(j)}的dpdpdp方程可尝试使用斜率优化。
1.0 B(j)B(j)B(j)严格单调递增
法一:线性规划
考虑把 dp[i]=A(i)×B(j)+C(i)+D(j)dp[i]=A(i)\times B(j)+C(i)+D(j)dp[i]=A(i)×B(j)+C(i)+D(j) 化成y=kx+by=kx+by=kx+b的形式,其中y,xy,xy,x只与jjj有关,k,bk,bk,b只与iii有关,且 xxx严格单调递增。
则有:
D(j)=−A(i)×B(j)+dp[i]−C(i)D(j)=-A(i)\times B(j)+dp[i]-C(i)D(j)=−A(i)×B(j)+dp[i]−C(i)
其中y=D(j),k=−A(i),x=B(j),b=dp[i]−C(i)y=D(j),k=-A(i),x=B(j),b=dp[i]-C(i)y=D(j),k=−A(i),x=B(j),b=dp[i]−C(i)
在平面直角坐标系上把所有的(xj,yj)(x_j,y_j)(xj,yj)(即(B(j),D(j))(B(j),D(j))(B(j),D(j)))标出来。
要令dp[i]dp[i]dp[i]最小,则要令bbb最小,即是要找到某一点(xj,yj)(x_j,y_j)(xj,yj),使斜率为kkk的直线经过该点时算出来的bbb最小。
发现只有 在给出点的下凸壳上的点可能成为最优决策点。
法二:代数法+数形结合
设j1,j2j_1,j_2j1,j2 (0≤j1<j2<i)(0\leq j_1<j_2<i)(0≤j1<j2<i) 为dp[i]dp[i]dp[i]的两个决策点,且决策点j2j_2j2优于j1j_1j1,则有:
A(i)×B(j2)+C(i)+D(j2)≤A(i)×B(j1)+C(i)+D(j1)A(i)\times B(j_2)+C(i)+D(j_2)\leq A(i)\times B(j_1)+C(i)+D(j_1)A(i)×B(j2)+C(i)+D(j2)≤A(i)×B(j1)+C(i)+D(j1)
化简式子,使不等号左边只与iii有关,不等号右边只与j1,j2j_1,j_2j1,j2有关:
A(i)≤−D(j2)−D(j1)B(j2)−B(j1)A(i)\leq -\frac{D(j_2)-D(j_1)}{B(j_2)-B(j_1)}A(i)≤−B(j2)−B(j1)D(j2)−D(j1)
−A(i)≥D(j2)−D(j1)B(j2)−B(j1)-A(i)\geq \frac{D(j_2)-D(j_1)}{B(j_2)-B(j_1)}−A(i)≥B(j2)−B(j1)D(j2)−D(j1)
设xj=B(j),yj=D(j)x_j=B(j),y_j=D(j)xj=B(j),yj=D(j),则D(j2)−D(j1)B(j2)−B(j1)\frac{D(j_2)-D(j_1)}{B(j_2)-B(j_1)}B(j2)−B(j1)D(j2)−D(j1)可以看作Pj1(xj1,yj1)P_{j_1}(x_{j_1},y_{j_1})Pj1(xj1,yj1),Pj2(xj2,yj2)P_{j_2}(x_{j_2},y_{j_2})Pj2(xj2,yj2)两点连线的斜率。
也就是说,如果存在两个决策点j1,j2j_1,j_2j1,j2满足0≤j1<j2<i0\leq j_1<j_2<i0≤j1<j2<i,使得Pj1P_{j_1}Pj1,Pj2P_{j_2}Pj2两点连线的斜率≤−A(i)\leq -A(i)≤−A(i),那么决策点j2j_2j2优于j1j_1j1。
于是,对于这样子的三个点,可证BBB一定不是最优决策点。
我们可以将BBB从候选决策点中踢出去(删除),只留下AAA和CCC,删后的情况如下图所示:
最终,我们维护的候选决策点应该构成了一个下凸壳:
实现
进一步优化
若k0(i)=−A(i),B(j)k_0(i)=-A(i),B(j)k0(i)=−A(i),B(j)均单调不减,则该dpdpdp方程必定有决策单调性。那么就不需要在凸壳上二分找最优决策点了。
1D/1D动态规划的三种优化方法相关推荐
- html z-dext优先级顺序,$ext{1D/1D}$ 动态规划的三种优化
神必博主的沙雕前言 参考文献: 概念明晰 所谓 (ext{1D/1D}) 动态规划, 指的是状态数和单状态决策数都是 (O(n)) 的动态规划方程, 暴力求解的时间复杂度为 (O(n^2)). 四边形 ...
- 排序--Bubble的三种优化
BubbleSort 冒泡排序是许多人接触的第一种排序方式,由于这种方式比较简单,所以大部分人也没有深入研究,所以写出的代码是这样的: void BubbleSort(int *arr, i ...
- 支持向量机 (三): 优化方法与支持向量回归
拉格朗日乘子法 - KKT条件 - 对偶问题 支持向量机 (一): 线性可分类 svm 支持向量机 (二): 软间隔 svm 与 核函数 支持向量机 (三): 优化方法与支持向量回归 优化方法 一.S ...
- win 7计算机图标变了,win7系统图标变黑的三种解决方法(图文)
一些Win7旗舰版系统用户说桌面图标变黑了,也不知道怎么回事?严重影响桌面美观,这是由于下载一些有Bug的软件的缘故或者中了木马会导致图标缓存出错,具体表现为图标变黑的现象.那么有什么办法解决win7 ...
- 3维IC的三种实现方法【读论文】
[论文题目]Block-level 3D IC Design with through-silicon-via planning [简介]该论文首先介绍了目前三维IC设计的三种方法,并基于第二种--块 ...
- 数学建模matlab 优化模型,数学建模实验中三种优化模型的分析
1. 引言 在20世纪中期,数学建模 [1] 就在欧美国度首次被发现,而在中国的呈现稍晚些,但是大约在80年代初始咱们国家也就有了.它的核心即是创立数学模型 [2] ,使得问题获得最优化的解决.而数学 ...
- Topk问题的三种求解方法
Topk问题的三种求解方法 什么是Topk问题 方法一:堆排序法 方法二:把N个数建堆,取出前k个 方法三:建一个k个数的堆 什么是Topk问题 其实顾名思义,这个问题也就是在N个数中找出前k个最值. ...
- C/C++冒泡排序4种优化方法
冒泡排序应该是大多数人接触的第一种排序方法,虽然它的时间复杂度为O(n^2),但是它简单易懂,代码复杂度低,所以仍有很大的用武之地.最近在总结排序算法,决定重温下冒泡排序,以及它的优化方法. 冒泡排序 ...
- C语言快速排序算法及三种优化方式
C语言快速排序算法及三种优化方式 C语言快速排序算法及三种优化方式 原理 快速排序复杂度分析 1 时间复杂度 2 空间复杂度 快速排序代码实现 1 普通快速排序 2 快速排序优化1-三数取中优化不必要 ...
最新文章
- Xamarin.FormsShell基础教程(8)Shell的模版构成
- osgi框架 android,基于OSGi的Android应用模块动态加载框架设计与实现
- Atitit nlp重要节点 v3 目录 1. 语法分析重点 节点余额365个 1 2. nlp词性表 2 2.1. 词语分类13类 2 2.2. 副词 约20个 3 2.3. 代词30个 3 2
- 如何将两个pdf合成一个?
- 微信公众号迁移公证办理流程
- 聚类分析--k中心点算法
- 文明IV模组(MOD)制作指南
- 部署外网网站(二)——宝塔搭建服务器
- python读取千万级数据库数据类型_Python 基于Python从mysql表读取千万数据实践
- 崩坏三 夏日竞猜 7.21 第一场
- 移动硬盘在mac上无法显示 读不出来
- python发微信红包_微信现金红包 python
- 微信中无法直接下载秒借类金融贷款APP的解决方案
- 商务邮箱一般用什么?办公最常用的邮箱功能是?
- 【大学生数学竞赛】公式大全(补充中)
- Eclipse每次打包注意事项
- PHP日期转换为时间戳
- 30行Python代码,打造一个微信群聊助手~
- 买牛奶(南阳oj892)
- 千亿5G投资,谁会是新的赢家?
热门文章
- linux 全双工 wifi热点,Linux中的同时套接字读/写(“全双工”)(特别是aio)
- ios realm 文件_iOS开发中使用Realm数据库
- 69. Sqrt(x)010(二分法求解+详解注释)
- [EDA] 给出一个双进程状态机,请把它改为单进程状态机。
- 算法导论水壶问题(第三版第八章思考题8-4)
- Division CodeForces - 1445C(数论因子相关)
- 通过Java编写一个服务器理解动态Web,静态Web
- OpenCV 数据初始化空间分配
- P2303 [SDOI2012] Longge(数论/欧拉函数)
- P2487 [SDOI2011]拦截导弹(cdq分治/计数问题思想)