斜率凸优化小结

斜率凸优化小结

前言

很久以前考了一道叫做"林克卡特树"的题目( 还记得被八省联考支配的恐惧吗?)
正解是用直线去切一个凸函数......
当时并不是很会。然而\(APIO\)讲课竟然讲了并且卧槽我竟然还听懂了。
所以就回来把这个坑给填了。

斜率凸优化

当遇到关于需要恰好选取\(K\)个的\(DP\)问题的时候,
一般做法就是在\(DP\)数组上再设一维。这样做时间代价是\(O(n)\)的。
其实不如给每次选取加一个权值\(C\)。
那么每次选取就需要付出\(C\)的代价。所以\(C\)越大选的越少,\(C\)越小选的越多。
所以?二分\(C\)即可。时间代价变为\(O(logn)\)。
形象的来说,对于\(DP\)数组,取\(E\)个时的答案\(best(E)\)是一个上凸的。
所以我们用\(f(x) = Cx\)这条直线去切这个上凸包,直到\(best(K)-KC\)是最优的。
那么此时选取的个数就是题目所需的\(K\)个了。
下面给一张图(引用自cjfdf):

例1:[APIO2014]序列分割

题目戳这里
可以发现,对于不在同一段的任意两个元素\(a\),\(b\),都对答案有\(ab\)的贡献。
所以处理出前缀和\(pre\)。
那么转移:\(f_{i,j} = max\{f_{k,j-1} + pre_k * (pre_i - pre_k)\}\)。
斜率优化不解释,复杂度\(O(nK)\),可以直接通过原题。
如果\(K \leq 200\) 变为\(K \leq n\)呢? 直接斜率凸优化即可,复杂度\(O(nlogK')\)。
代码戳这里

例2:[八省联考2018]林克卡特树lct

题目戳这里
本质上就是要选择出\(K+1\)条不相交的路径使它们的权值和最大。
考虑树形\(DP\)。设\(f_{u,j,0/1/2}\)分别表示\(u\)点的度数为\(0/1/2\)时的最优解。
定义\(Ans_{u,j}\)表示\(max\{f_{u,j,0/1/2}\}\)。
转移:
对于\(f_{u,j,0}\)有:

  • \(f_{u,j,0} = max\{ f_{u,j-t,0} + Ans_{v,t} \}\)

对于\(f_{u,j,1}\)有:

  • \(f_{u,j,1} = max\{ f_{u,j-t,1} + Ans_{v,t}\}\)
  • \(f_{u,j,1} = max\{ f_{u,j-t,0} + f_{v,t,1} + Edge_{u,v}\}\)
  • \(f_{u,j,1} = max\{ f_{u,j-t-1,0} + f_{v,t,0} + Edge_{u,v}\}\)

对于\(f_{u,j,2}\)有:

  • \(f_{u,j,2} = max\{ f_{u,j-t,2} + Ans_{v,t}\}\)
  • \(f_{u,j,2} = max\{ f_{u,j-t+1,1} + f_{v,t,1} + Edge_{u,v}\}\)

上述转移复杂度\(O(nK^2)\),不够优秀。
发现对于 表示选择个数的第二维\(j\) 可以进行斜率凸优化。
直接斜率凸优化即可,复杂度变为\(O(nlogK')\)。实现代码戳我

原文地址:https://www.cnblogs.com/GuessYCB/p/9051438.html

时间: 2024-10-15 20:47:57

斜率凸优化小结的相关文章

凸优化之优化、对偶、KKT-七月算法(julyedu.com)4 月机器学习算法班学习笔记

优化 一般优化问题的基本形式 凸优化的基本形式 共轭函数 共轭函数是凸函数 对偶问题 拉格朗日函数 拉格朗日对偶函数 KKT条件 小结 优化 一般优化问题的基本形式 minimizef0(x),x∈Rn s.t.fi(x)≤0,i=1?m s.t.hj(x)=0,j=1?n 定义域为 当 m=n=0 时,约束优化问题退化成无约束优化问题 注意:这是是优化问题的一般形式,对 fi(x) 和 hi(x) 无特殊要求.就是并不要求这些函数一定可导,也不要求只有一个极值点,就是啥要求都没. 凸优化的基本

《凸优化》学习笔记(一)

?凸优化在数学优化中有着重要且特殊的身份.数学优化是一个广泛的话题,理解凸优化之前,请先理解线性优化.在机器学习算法中,已知的比如LogisticRegression,SVM,都与数学优化有关,在数学中,不存在无约束优化问题.比较常见的构建损失函数方法,从最简单的两个向量的二阶范数的平方(KNN,Kmeans)到linearRegression.LogisticRegression的最小二乘模型,再到SVM的二次凸优化,都和数学优化理论紧密相关.本篇笔记主要学习数学优化的前奏部分:凸优化的概念部

Convex optimization 凸优化

zh.wikipedia.org/wiki/凸優化 以下问题都是凸优化问题,或可以通过改变变量而转化为凸优化问题:[5] 最小二乘 线性规划 线性约束的二次规划 半正定规划 Convex function Convex minimization is a subfield of optimization that studies the problem of minimizing convex functions over convex sets. The convexity makes opt

关于凸优化的一些简单概念

http://www.cnblogs.com/tornadomeet/p/3300132.html 没有系统学过数学优化,但是机器学习中又常用到这些工具和技巧,机器学习中最常见的优化当属凸优化了,这些可以参考Ng的教学资料:http://cs229.stanford.edu/section/cs229-cvxopt.pdf,从中我们可以大致了解到一些凸优化的概念,比如凸集,凸函数,凸优化问题,线性规划,二次规划,二次约束二次规划,半正定规划等,从而对凸优化问题有个初步的认识.以下是几个重要相关概

非凸优化问题

凸优化就是函数是凸函数,定义域也是凸集,不会有局部极小值问题:非凸优化就是在寻找最小值(或最大值)时会陷入局部极小值,这就是机器学习里某些算法经常遇到的问题. 记录今天学习到的matlab函数: 1. numel(A),求A的元素个数,即number of elements: 2. rem(A,a),求余,如果是向量,则返回的也是向量,每个元素对应原来除以a后的余数: 3. assert(expression,‘提示内容’),产生错误提示,当表达式expression不满足时,提示单引号内的内容

七月算法--12月机器学习在线班-第四次课笔记—凸优化

七月算法--12月机器学习在线班-第四次课笔记—凸优化 七月算法(julyedu.com)12月机器学习在线班学习笔记 http://www.julyedu.com

凸优化

凸优化 作者:樱花猪 摘要: 本文为七月算法(julyedu.com)12月机器学习第四次课在线笔记."凸优化"指的是一种比较特殊的优化,通过"凸优化"我们能够把目标函数转化成一个"凸函数"然后利用凸函数的性质求极值来求解问题."凸优化"不仅仅在机器学习中有所应用,几乎在任何用到有关于目标函数求值的问题都会用到.本次课程由浅入深,将学术上复杂的问题解释的通俗易懂,个人认为是机器学习系列课程非常有亮点的一课. 引言: 本文用凸函

凸优化中的基本概念(1)

1.1 什么是凸集? 简单来说, 凸集是一个点集, 这个点集有一个性质, 就是在这个集合中任取不同的两个点x和y, 他们之间的线段(包括端点)上的点都属于这个点集,那么就说这个点集是一个凸集. 比如下图中左边的图形是凸集,而右边不是,因为我们可以找到两个点,使它们之间的线段上的点不在集合中 数学上,凸集的定义如下: 给定集合$C$,$\forall x,y\in C$,$0\leq\theta\leq 1$,如果有 $$ \theta x + (1-\theta y)\in C$$ 我们就称集合

凸优化和机器学习

CSDN的博主poson在他的博文<机器学习的最优化问题>中指出"机器学习中的大多数问题可以归结为最优化问题".我对机器学习的各种方法了解得不够全面,本文试图从凸优化的角度说起,简单介绍其基本理论和在机器学习算法中的应用. 1.动机和目的     人在面临选择的时候重视希望自己能够做出"最好"的选择,如果把它抽象成一个数学问题,那么"最好的选择"就是这个问题的最优解.优化问题,就是把你考虑的各个因素表示成为一组函数(代价函数),解决这