ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

01 分数规划

2021-07-09 16:04:31  阅读:157  来源: 互联网

标签:分数 直线 01 max sum value cost 最优 规划


写在前面:

放假之前水篇博客 = =

问题描述

给定一个二元组 \((value_i,cost_i)\) ,\(value_i\) 是选择此二元组获得的价值(非负),\(cost_i\) 是这个二元组的代价(非负),设 \(x_i (x_i \in {0, 1})\) 表示第 \(i\) 个二元组选不选,最大化(最小化)下面柿子

\[max(min)~r = \frac{\sum value_i * x_i}{\sum cost_i * x_i} \]

下面以最大值为例(最小值也一个样)

\[max_r = \frac{\sum value_i * x_i}{\sum cost_i * x_i}\\ ~~\\ \sum value_i * x_i - maxr * \sum{cost_i * x_i} = 0 \]

构造一个函数

\(f(r) = \sum value_i * x_i - r * \sum{cost_i * x_i}\)

对于如果 \(x_i\) 确定那么 \(f(r)\) 就成了 \(f(r) = -kr + b\) 的一条直线 \(k, b\) 都为常数

因为 \(value_i\) 和 \(cost_i\) 都非负,所以 \(k, b > 0\) ,所有直线都是一条斜率为负,纵截距为正的直线

画出来是这样的

求最大的 \(r\) 就是求一条横截距最大的直线

求一条垂直于 \(y\) 的线

  • 如果存在直线与这条直线的交点纵坐标为正,则最优解在该直线右边
  • 如果所有直线与这条直线的交点纵坐标为负,则最优解在该直线左边
  • 如果一条直线与该直线交点纵坐标为 0,其余都为负,则该交点横坐标为最优解 \(max_r\)

具体实现

对 \(r\) 二分答案

  • \(max(f(r)) > 0\) ,\(max_r > r\) 二分右区间

  • \(max(f(r)) < 0\), \(max_r < r\) 二分左区间

  • \(max(f(r)) = 0\) ,\(max_r = r\) 统计答案

接下来就剩怎么求 \(max(f(r))\) 了

对上面的柿子稍微变一下形

\(f(r) = \sum (value_i - r * cost_i)*x_i\)

对于前面的一坨如果知道了 \(r\) 可以直接求,然后现在就是找一组 \(x_i\) 使得 \(f(r)\) 最大,怎么求这一组 \(x_i\),要根据具体题目分析

常见模型:最优比率生成树,最优比率环,最大密度子图

参考:tianxiang971016

标签:分数,直线,01,max,sum,value,cost,最优,规划
来源: https://www.cnblogs.com/Arielzz/p/14990909.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有