一般图最大独立集/最大团问题
一般图最大独立集/最大团问题
众所周知,一般图最大独立集/最大团问题是 NP-Hard 的,目前不存在多项式时间的算法,但存在一些复杂度较优的指数级算法
本文主要介绍基于 极大独立集 搜索的 Bron-Kerbosch 算法
Bron-Kerbosch 算法
对于最大独立集问题,由于最大独立集显然为极大独立集,BK 算法考虑搜索极大独立集
BK 算法过程中以三个集合 为状态,调用 ,可以得到图的包含所有 中结点、 中若干结点且不包含 中结点的全部极大独立集
值得一提的是,实现时可以使用大整数压位存储集合
该算法的灵魂在于 Pivoting
算法过程中,我们需要选取一个结点 ,最小化
将 称为 Pivot 结点,然后枚举 中加入独立集 的第一个结点 递归到子问题
Pivoting 的正确性?
定理:无向图 的任意极大独立集 满足,对于任意一个结点 ,
证明显然,考虑反证,极大独立集 可以加入 点
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 算法的递归上界为 ,那么我们可以知道 点无向图的极大独立集个数上界为
事实上这个上界也是一个确界,可以通过构造 个相互独立的三元环达到
在图随机的情况下,这个上界是很松的,下图中 为极大独立集个数的期望
参考文献
本文摘录自 国家集训队 2017 年钟知闲论文
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix