01分数规划问题相关算法与题目讲解(二分法与Dinkelbach算法)

01分数规划算法 信息学竞赛 OI ACM 二分 Dinkelbach 最优比率生成树 最优比率环


01分数规划


张天翔

blog.csdn.net/hzoi_ztx
[email protected]


前置技能

  • 二分思想
  • 最短路算法
  • 一些数学脑细胞?

问题模型1

基本01分数规划问题

给定 n n n个二元组 ( v a l u e i , c o s t i ) (value_i,cost_i) (valuei,costi) v a l u e i value_i valuei是选择此二元组获得的价值(非负), c o s t i cost_i costi是选择此二元组付出的代价(非负),设 x i ( x i ∈ { 0 , 1 } ) x_i(x_i\in \{0,1\}) xi(xi{ 0,1})代表第 i i i个二元组的选与不选,最大(小)化下式
m a x i m i z e ( o r   m i n i m i z e )     r = ∑ v a l u e i ⋅ x i ∑ c o s t i ⋅ x i maximize(or\ minimize)\ \ \ r = \frac{\sum value_i \cdot x_i}{\sum cost_i\cdot x_i} maximize(or minimize)   r=costixivalueixi

下面先说最大化

解决方法

二分法

r r r最大值为 r ∗ r^* r
r ∗ = ∑ v a l u e i ⋅ x i ∑ c o s t i ⋅ x i r^* = \frac{\sum value_i \cdot x_i}{\sum cost_i\cdot x_i} r=costixivalueixi

∑ v a l u e i ⋅ x i − r ∗ ⋅ ∑ c o s t i ⋅ x i = 0 \sum value_i \cdot x_i - r^*\cdot \sum cost_i\cdot x_i = 0 valueixircostixi=0

设一个函数,自变量为 r r r值,
f ( r ) = ∑ v a l u e i ⋅ x i − r ∗ ⋅ ∑ c o s t i ⋅ x i f(r) =\sum value_i \cdot x_i - r^*\cdot \sum cost_i\cdot x_i f(r)=valueixircostixi

观察这个函数,假如 { x i } \{x_i\} { xi}固定,则这个函数就是坐标系中一条直线( y = B − A ⋅ x y = B - A\cdot x y=BAx),每一组 { x i } \{x_i\} { x

  • 60
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值