一般图最大独立集/最大团问题

一般图最大独立集/最大团问题

众所周知,一般图最大独立集/最大团问题是 NP-Hard 的,目前不存在多项式时间的算法,但存在一些复杂度较优的指数级算法

本文主要介绍基于 极大独立集 搜索的 Bron-Kerbosch 算法

Bron-Kerbosch 算法

对于最大独立集问题,由于最大独立集显然为极大独立集,BK 算法考虑搜索极大独立集

BK 算法过程中以三个集合 R,P,X 为状态,调用 Bron-Kerbosch(R,P,X),可以得到图的包含所有 R 中结点、P 中若干结点且不包含 X 中结点的全部极大独立集

值得一提的是,实现时可以使用大整数压位存储集合

该算法的灵魂在于 Pivoting

算法过程中,我们需要选取一个结点 uPX,最小化 |P({u}N(u))|

u 称为 Pivot 结点,然后枚举 {u}N(u) 中加入独立集 R 的第一个结点 v 递归到子问题

Pivoting 的正确性?

定理:无向图 G 的任意极大独立集 I 满足,对于任意一个结点 uI({u}N(u))

证明显然,考虑反证,极大独立集 I 可以加入 u

void BK(ll r,ll p,ll x){
	if(!p&&!x){mx=max(mx,popcnt(r));return ;}
	int z=n+1,u=-1;
	ll st=p|x;
	for(int i=0;i<n;i++){
		if(!((st>>i)&1))continue;
		int w=popcnt(p&N[i]);
		if(w<z)z=w,u=i;
	}
	st=p&N[u];
	for(int i=0;i<n;i++){
		if(!((st>>i)&1))continue;
		BK(r|(1ll<<i),p^(p&N[i]),x^(x&N[i]));
		p^=(1ll<<i),x|=(1ll<<i);
	}
	return ;
}

极大独立集个数

BK 算法的递归上界为 O(3n/3) ,那么我们可以知道 n 点无向图的极大独立集个数上界为 O(3n/3)

事实上这个上界也是一个确界,可以通过构造 n3 个相互独立的三元环达到

在图随机的情况下,这个上界是很松的,下图中 E(x) 为极大独立集个数的期望

参考文献

本文摘录自 国家集训队 2017 年钟知闲论文

posted @   juju527  阅读(980)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示