zoukankan      html  css  js  c++  java
  • 最优比率生成树 (最优比例生成树)

    转自

    http://www.cnblogs.com/lotus3x/archive/2009/03/21/1418480.html
    

      

    概念

    有带权图G, 对于图中每条边e[i], 都有benifit[i](收入)和cost[i](花费), 我们要求的是一棵生成树T, 它使得 ∑(benifit[i]) / ∑(cost[i]), i∈T 最大(或最小).

    这显然是一个具有现实意义的问题.

    解法之一 0-1分数规划

    设x[i]等于1或0, 表示边e[i]是否属于生成树.

    则我们所求的比率 r = ∑(benifit[i] * x[i]) / ∑(cost[i] * x[i]), 0≤i<m .

    为了使 r 最大, 设计一个子问题---> 让 z = ∑(benifit[i] * x[i]) - l * ∑(cost[i] * x[i]) = ∑(d[i] * x[i]) 最大 (d[i] = benifit[i] - l * cost[i]) , 并记为z(l). 我们可以兴高采烈地把z(l)看做以d为边权的最大生成树的总权值.

    然后明确两个性质:

     1.  z单调递减

      证明: 因为cost为正数, 所以z随l的减小而增大.

     2.  z( max(r) ) = 0

      证明: 若z( max(r) ) < 0, ∑(benifit[i] * x[i]) - max(r) * ∑(cost[i] * x[i]) < 0, 可化为 max(r) < max(r). 矛盾;

              若z( max(r) ) >= 0, 根据性质1, 当z = 0 时r最大. 

    到了这个地步, 七窍全已打通, 喜欢二分的上二分, 喜欢Dinkelbach的就Dinkelbach.

    复杂度

    时间 O( O(MST) * log max(r) )

    空间 O( O(MST) )

  • 相关阅读:
    Object doesn't support property or method 'flat'
    yapi的部署
    mongoDB 安装
    排序
    直播原理
    文件怎么都删不掉,压缩,命令行都不行
    computed和watch
    docker安装
    跨域问题的解决方案
    一次普通的http请求
  • 原文地址:https://www.cnblogs.com/yangjiyuan/p/5762564.html
Copyright © 2011-2022 走看看