原博客:http://www.cnblogs.com/KirisameMarisa/p/4187637.html

换种思路,我们在判断一个当前的r的时候需要去求一个F(r)max,在二分之中我们仅仅判断了F(r)max与0的关系,这是利用率比较低的。其实我们可以将F(r)max利用起来。找到F(r)max所在的那一条直线,然后将r移动到这条直线的截距上面去(如下图,找到当前的F(r)max所在的直线,将r移动到r4上面去,这样做甚至只要2步即可到位)

它实质上是一种迭代,他是基于这样的一个思想:他并不会去二分答案,而是先随便给定一个答案,然后根据更优的解不断移动答案,逼近最优解。由于他对每次判定使用的更加充分,所以它比二分会快上很多。

在这个算法中,我们可以将r初始化为任意值,不过由于所有直线都只有y轴右边的部分,所以一般将r初始化为0。

例题POJ3111

#define zero(a) fabs(a)<epsdouble m[50000+10],w[50000+10];struct node{double num;int ord;} d[50000+10];bool cmp(node a,node b){return a.num>b.num;}int main()
{int N,K;scanf("%d%d",&N,&K);for(int i=0;i<N;i++)scanf("%lf%lf",&m[i],&w[i]); double l=0.0,ans;while(1){ans=l;for(int i=0;i<N;i++){d[i].num=m[i]-ans*w[i];d[i].ord=i;} sort(d,d+N,cmp);double p=0.0,q=0.0;for(int i=0;i<K;i++){p+=m[d[i].ord];q+=w[d[i].ord];}l=p/q;if(zero(ans-l))break;}printf("%.2f\n",ans);return 0;
}

不过需要注意的是,并不是可以放弃二分全用Dinkelbach算法。这只是最基本的0-1规划问题, Dinkelbach算法的弊端就是需要保存解。在更加复杂的问题中,有的时候二分更快,有时Dinkelbach算法更快。

二分和Dinkelbach算法写法都非常简单,各有长处,大家要根据题目谨慎使用。

(转)Dinkelbach算法(01二分规划更优解法)相关推荐

  1. bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)

    01分数规划问题: 给你n个物品,a[i]表示第i个物品的收益,b[i]表示代价,x[i]表示选或不选,求一个最佳方案使得下式取值最大 通用解: 当然是从式子上考虑,定义函数F[cnt]如下: 其中c ...

  2. 有多少种硬币组合,更优解法

    写在前面的自我检讨 v2 上周我发布了一篇博文有多少种硬币组合--找出独特子数组之和,是关于有多少种硬币组合的算法题的解法.虽然算法本身能够给出一个正确答案,可是仔细想来,我却没办法给出一个简单直接的 ...

  3. php阶梯电费,如何更优雅编码、更优算法 | 阶梯式电费算法 | 非常感谢、请指教~...

    如何更优雅编码.更优算法 | 阶梯式电费算法 | 非常感谢.请指教~ 电费的阶梯式算法 ?笑:-D~ 倒序进行中,如何更加优雅.使用更少的代码,甚至更优的算法呢? 常常会见到这种场景: 举个栗子,深圳 ...

  4. 转载二分 01 分数规划即最大化平均值的证明0/1分数规划、最优比率生成树、最优比率环

    首页 新随笔 联系 管理 订阅 随笔- 20  文章- 0  评论- 9 [Algorithm]01分数规划--Update:2012年7月27日 [关键字] 0/1分数规划.最优比率生成树.最优比率 ...

  5. 对于0-1分数规划的Dinkelbach算法的分析

    分类: 数学理论及总结 2012-08-16 10:12  278人阅读  评论(0)  收藏  举报 算法 c 优化 fp 武钢三中 吴豪[译] 摘要: 0-1分数规划问题是指求出解集{xi|xi= ...

  6. POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法

    首先,纪念我用Linux系统AC的第一题-   安装这个万恶的NOI Linux系统费了6小时的时间,不过好在最后终于装上了,但是因为我安装的Linux系统比较烂,还遭到了小花儿和js的鄙视,唉,本人 ...

  7. 算法提高课-图论-负环-AcWing 361. 观光奶牛:spfa判正环、负环、01分数规划、二分

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 题目要求ΣfiΣgi\frac{\Sigma{f_i}}{\Sigma{g_i}}Σgi​Σfi​​的最大值,这种问题称为01分数规 ...

  8. 算法提高课-图论-负环-AcWing 1165. 单词环:spfa判正环、二分、01分数规划

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 如何建图? 这样建图.以样例举例.起点是前两个字母,终点是末尾两个字母,边权是字符串的长度. 我们求的是什么呢? 题目要求Σ边权Σ1 ...

  9. 【基础算法】二分法(二分答案,二分查找),三分法,Dinkelbach算法,算法详解+例题剖析

    目录 一 . 二分法 二分搜索得要求: 二分查找步骤: 二分答案: 玄学的二分(二分答案) 二 . 三分法 例题 三.01分数规划问题相关算法与题目讲解(二分法与Dinkelbach算法) 一 . 二 ...

  10. POJ-3621 Sightseeing Cows 最优比率环、01分数规划

    题目链接:http://poj.org/problem?id=3621 这题是01分数规划问题,详细资料点这里.有了01分数规划的基础后,这个题目就很简单了.构建函数f(mid)=Σ(w[i]-mid ...

最新文章

  1. Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)
  2. 实习生笔试面试题总结
  3. mysql索引之间的区别
  4. 「机器人界的微软」创始人逝世,从iPhone到汽车都离不开他的创造
  5. Mysql or Mongodb LBS快速实现方案
  6. 说三件切身利益的大事!一定要看 减少损失
  7. Shell脚本里调用Python程序
  8. 美团自研无人机登场:15分钟配送到家
  9. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨0.8%
  10. mysql+分页脚本_MySql实现分页查询的SQL
  11. linux bzip指定名称,Linux命令学习手册-bzip2命令
  12. The Reactive Manifesto(响应式宣言)
  13. 2017北京国庆刷题Day2 afternoon
  14. 数据优化 | CnOpenData中国工业企业绿色专利及引用被引用数据
  15. swf文件数据格式分析
  16. 魔兽世界插件开发-暴雪设计工具/命令
  17. C语言中32个关键字详解
  18. 聊聊拒绝忽悠的批判性思维
  19. 局域网下两台电脑ping不通的问题
  20. C语言:strtok()的用法。

热门文章

  1. samba配置问题一则及配置详解
  2. 31、栈的压入、弹出序列(Python)
  3. foreach 循环中删除一条数据_SQL Server中删除重复数据的几个方法
  4. python实现在线答题_python实现用户答题功能
  5. avs php,linux 安装AdultVideoScript (AVS)全教程
  6. python中能用π吗_python里π
  7. 测试文档模板_基于模型的测试(贰)
  8. 【转】BeyondCompare3提示许可密钥过期完美解决方法
  9. 【error】vue-cli3 报Computed property “tableData” was assigned to but it has no setter.
  10. vue如何编写组件可以通过Vue.use()使用