最大点权独立集---入门

 

转:

 
  
problem:
有个图有n个结点,y条边
任选图中一个顶点,把它染成黑色,则和它相连的顶点必须都被染成白色,但与被染成白色的顶点相连的顶点可以被染成白色也可以被染成黑色,问:这个图最多有多少个顶点能被染成黑色?

---------------------------------------------------------------
相当于求图的最大独立集。
独立集: 图的顶点集的子集,其中任意两点不相邻。
求一般图的最大独立集是NP hard。

具体程序实现可以通过求最小覆盖集来求最大独立集。

图G(V,E)的覆盖集D是顶点集的一个子集,并满足:任意
< vi,vj > 属于E,vi属于D或vj属于D

定义
* + 满足交换率,结合率,
* + 分配 (a + b) * c = a * c + b * c

吸收率:
a
+ ab = a
a
* a = a
a
+ a = a

这样,求极小覆盖集:

M(连乘)( (v[i]
+ M(所有与v[i]相邻的点) )
i
= 0 to n

结果化简后的每个因子项即对应一个极小覆盖集。

for example:
a
--- b --- c
\
/ \ /
d e

(a
+ bd)(b + acde)(c + be)(d + ab)(e + bc)
= acde + abe + bcd + abc + bde

acde,abe,bcd,abc,bde 既是G的各个极小覆盖集。

因为极小覆盖集和极大独立集互补,用abcde 减去各个极小覆盖集,
既得到极大独立集:
b dc ae de ac

其中dc ae de ac是最大独立集。
————————————————————————————————————————

算了一下,发现根据式子直接运算就可以得到最简答案,不需要什么技巧。
比如初始化为 a
+ bd。
然后用 b
+ acde分别和上面的式子相乘,相乘时注意运用 a * a = a(可以用集合来实现),相加时注意运用 a + a = a和a + ab = a(如果其它项是该项的子集则取消该项),一直下去就能得出最终结果了。

 

转载于:https://www.cnblogs.com/cykun/archive/2011/01/16/1936566.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值