最大团问题

 

Ø完全子图:给定无向图G=(VE)。如果
UÍV,且对任意uvÎU(uv)ÎE,则称
UG的完全子图。
Ø
G的完全子图UG的团当且仅当U不包含
G的更大的完全子图中。
Ø
G的最大团:是指G中所含顶点数最多的团。
Ø
空子图:如果UÍV且对任意uvÎU(uv)
ÏE,则称UG的空子图。
Ø
独立集G的空子图UG的独立集当且仅当
U不包含在G的更大的空子图中。
ØG的最大独立集:是G中所含顶点数最多的
独立集。
Ø补图:对于任一无向图G=(VE)其补图G=
(V1E1)定义为:V1=V,且(uv)ÎE1当且
仅当(uv)ÏE
ØUG的最大团当且仅当UG的最大独立
集。
 
Ø解空间:子集树
Ø可行性约束函数:

顶点i

已选入的顶点集中每一个顶点都有边相连。

Ø上界函数:

有足够多的可选择顶点使得算法有可能

在右子树中找到更大的团。

Ø复杂度分析:

最大团问题的回溯算法backtrack所需的

计算时间显然为O(n2n)

 

void Clique::Backtrack(int i)// 计算最大团

{  if (i > n) {// 到达叶结点

      for (int j = 1; j <= n; j++) bestx[j] = x[j];

      bestn = cn;   return;}

  

   int OK = 1; // 检查顶点 i 与当前团的连接

   for (int j = 1; j < i; j++)

      if (x[j] && a[i][j] == 0) {

         // ij不相连

         OK = 0;  break;}

   if (OK) {// 进入左子树

      x[i] = 1;  cn++;

      Backtrack(i+1);

      x[i] = 0; cn--;}

   if (cn + n - i > bestn) {// 进入右子树

      x[i] = 0;

      Backtrack(i+1);}

}

Ø选择合适的搜索顺序,可以使得上
界函数更有效的发挥作用。例如在搜
索之前可以将顶点按度从小到大排
序。这在某种意义上相当于给回溯法
加入了启发性。
Ø 定义Si={vi,vi+1,...,vn},依次求出
Sn,Sn-1,...,S1的解。从而得到一个更
确的上界函数,若cn+Si<=max则剪
枝。同时注意到:从Si+1Si,如
果找到一个更大的团,那么vi必然属
于找到的团,此时有Si=Si+1+1,否
Si=Si+1。因此只要max的值被更新
过,就可以确定已经找到最大值,不
必再往下搜索了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值