模型描述
一张无向图(G = (V, E)),没有点权也没有边权。
选取一个子图,使得(frac{|E'|}{|V'|})最大。
注意:这里的子图指的是,选取一些点,与之相关的边不一定全选。但是如果选取了某条边,那么其两个顶点必选。
但是因为全选与这些点相关的边,肯定是最优的,于是下文就默认是全选的。
解决方法
利用01分数规划的方法,原问题可以转化为最大化(|E'| - lambda |V'|),即最小化(lambda |V'| - |E'|)
对于这个式子的化简,需要应用到一个技巧,就是把每条边拆成两份,两个端点分别占有一份。
这里(ar{V'})是(V')的补图,(deg(v))是点(v)的度数。
下面就可以建图了,原图的每一条边对应成流网络中一条容量是(1)的边。每个点向虚拟汇点(t)连容量是(2g - deg(v) + U)的边,这里的(U)是一个自己设置的常数,目的是使得容量恒大于(0)。
设置一个虚拟源点(s),向每个点连容量是(U)的边。如图所示:
下面证明结果的最优性:
令(V' = S - {s}, ar{V'} = V - V')
因此,(|E'| - lambda |V'| = frac{nU - c[s, t]}{2})
模型拓展
若有边权
目标式子改为(frac{sum_{e in E'} w_e}{|V'|})。
只需要重新定义一下(deg(v))即可,定义(deg(v))为以(v)为顶点的边的边权和。
若有点权
目标式子改为(frac{sum_{e in E'} w_e + sum_{v in V'} p_v}{|V'|})
重新推导目标式子为:(frac{1}{2}(sum_{v in V'}(2g - deg(v) - 2p_v) + c[V', ar{V'}]))
(v)到(t)的边权改为(2g - deg(v) - 2p_v + U)。其他不变。