最大团问题算法的改进

简介

 最大团问题(Maximum Clique Problem, MCP)是图论中一个经典的组合优化问题,也是一类NP完全问题,在国际上已有广泛的研究,而国内对MCP问题的研究则还处于起步阶段,因此,研究最大团问题具有较高的理论价值和现实意义。

 给定无向图G=(V,E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U V,且对任意两个顶点u,v∈U有(u,v)∈E,则称U是G的完全子图。G的完全子图U是G的团。G的最大团是指G的最大完全子图。
 如果UÍV且对任意u,v∈U有(u,v)不属于E,则称U是G的空子图。G的空子图U是G的独立集当且仅当U不包含在G的更大的空子图中。G的最大独立集是G中所含顶点数最多的独立集。
对于任一无向图G=(V,E),其补图G’=(V’,E’)定义为:V’=V,且(u,v)∈E’当且仅当(u,v)∉E。
如果U是G的完全子图,则它也是G’的空子图,反之亦然。因此,G的团与G’的独立集之间存在一一对应的关系。特殊地,U是G的最大团当且仅当U是G’的最大独立集。
通俗点讲就是在一个无向图中找出一个点数最多的完全图。


改进思路

 定义Si={vi,vi+1,…,vn},按照Sn,Sn-1,…,S1的顺序求解。从 而得到一个更精确的上界函数,若currSize+solution[Si]<=max则 剪枝。同时注意到:从Si+1到Si,如果找到一个更 大的团,那么vi必然属于找到的团,此时有 Si=Si+1+1,否则Si=Si+1。因此只要max的值被更新过, 就可以确定已经找到最大值,不必再往下搜索了
伪代码(原作者:Patric R. J. Ostergard)
在这里插入图片描述
具体java代码如下:

/*
 * Copyright (c) 2019 Ng Kimbing, HNU, All rights reserved. May not be used, modified, or copied without permission.
 * @Author: Ng Kimbing, HNU.
 * @LastModified:2019-05-12 T 16:02:57.411 +08:00
 */
package ACMProblems.BackTrack;

import java.util.*;

import static ACMProblems.ACMIO.*;

public class MaxCliqueProblem {
   
    private static int max = 0;
    private static boolean found = false;
    private static boolean matrix[][] = new boolean[100][100];
    private static int[] sol = new int[100];
    private static int v;
    private static Set&l
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值