分数规划整理
分数规划问题,是指这样一类问题:
要求f(x)/g(x)的最值,其中f(x),g(x)都是线性函数,而其中被研究的最多的是0-1分数规划,即求这样的一个式子的极值
r=(∑(ci*xi))/(∑(di*xi)),其中xi∈{0,1}
我们可以把这个式子变换一下
z=(∑(ci*xi))-r'*(∑(di*xi)),其中z是左边这个式子的最大(小)值
由于di为正数,xi为非负数,所以
r'>r 时 z(r')<0
r'=r 时 z(r')=0
r'<r 时 z(r')>0
易证z函数严格单调递减,那么我们可以二分r',直到z(r')=0,此时r'=r,问题得解
PS:z函数也是凸函数
除了二分,还有一种算法叫Dinkelbach算法
每次将r'代入z函数中计算以后,我们将得到一组x
让r''=(∑(ci*xi))/(∑(di*xi))
当r''=r'时,r''就是我们需要的解
否则将r'=r'',继续迭代
这种方法比二分法要快一点
POJ 2728
大意:给定每条边的距离和代价,求一棵生成树使得代价和/距离和最小
这是一道最优比率生成树的题目,是个很明显的0-1分数规划,设每条边代价为ci,距离为di
则题目要求(∑(ci*xi))/(∑(di*xi))的最小值
那么二分这个最小值,将这个式子化成xi(ci-r'*di)的形式,每条边的权值变成ci-r'*di
对于这些边,求一棵最小生成树,MST的值即为z(r')
HNOI2009 最小圈
题目大意是给定一个无向图,定义环的平均值为环上的边权和/边数,求出最小的环平均值
这道题虽然看上去不像分数规划,但是巧妙地应用了分数规划的思想
二分这个平均值,然后对每条边,重新把它的权值赋为(原权值-二分值)
如果存在某一个环,他的平均值刚好是二分的值,那么新的边权和是0
如果环的平均值小于二分值,那么图中将出现负环,上界可缩小
否则需将下界变大
__EOF__

本文链接:https://www.cnblogs.com/shenben/p/6379356.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术