最优比例树总结

每条边有两个权值,一个费用h一个长度l,求连通整个图的最小r r=总费用/总长度  

r=(h1*x1+h2*x2*.....hn*xm)/(l1*x1+l2*x2+...ln*xm) 最小,其中x取0,1表示边不在或在树中

直接列出两种解法:

(1)二分比率r 将原图边权值修改为h-r*l ,求最小生成树,如果大于0,则可放大r,否则缩小r ,

(2) 01分数规划 Dinkelbach 算法,首先任选可以构造一棵树的n-1条边,numerator表示费用总和,denominator表示长度总和,r*表示最后最优解,再构造一个当前的最优解r=numerator/denominator ,把r作为比例同样将原图边权修改为h-r*l ,作一次MST,结束时可得到另一个最优解r' ,r'会无穷地向最优解r*收敛,根据题目定义当fabs(r*-r')<1e-6 则break ;最后r*=r' ,时间复杂度为O(MST)*min(n^2,log(n*m)),这个算法是可行的,中间N多证明过程略...

你可能感兴趣的:(总结)