Maximum Clique最大团问题
List
Knowledge-MaxClique
这段大部分转自JMJST,后面有链接
a.定义
一个无向图 G=(V,E),V 是点集,E 是边集。取 V 的一个子集 U,若对于 U 中任意两个点 u 和 v,有边 (u,v)∈E,那么称 U 是 G 的一个完全子图。 U 是一个团当且仅当 U 不被包含在一个更大的完全子图中。G的最大团指的是定点数最多的一个团。
b.常用做法
1、顺序贪婪启发式搜索算法
2、局部搜索启发式算法
3、智能搜索启发式算法
4、遗传算法
5、模拟退火算法
6、禁忌算法
7、神经网络算法
8、改进蚁群算法-AntMCP
突然发现自己是多弱,所以问度娘吧百度百科传送门:最大团问题
c.Search
咱不会那么多高大上的东西那就暴力吧!(n<=100可以过)
c-1.Normal
看显而易见的DFS
初始化:
从一个点 u 开始,把这个点加入到一个集合中,设为 U。遍历一遍所有和他相连的点,把他们放入另一个集合 S1 中,接下来进行第一遍 DFS第一遍 DFS :
从 S1 中选择一个点 u1,这个点肯定和集合 U 中的任何一个点相连。把集合 S1 中 u1 能访问到的点加入到集合 S2 中,并把 u1 加入到集合 U 中,进行第二遍 DFS
第二遍 DFS :
从 S2 中选择一个点 u2,这个点肯定和集合 U 中的任何一个点相连。把集合 S2 中 u2 能访问到的点加入到集合 S3 中,并把 u2 加入到集合 U 中,进行第三遍 DFS
第三遍 DFS :
从 S3 中选择一个点 u3,这个点肯定和集合 U 中的任何一个点相连。把集合 S3 中 u3 能访问到的点加入到集合 S4 中,并把 u3 加入到集合 U 中,进行第四遍 DFS
……
最底层的 DFS :
当某个 S 集合为空集的时候,DFS 结束,这时候我们就找到了一个完全子图,用这个完全子图更新我们的最大团。退出当前的 DFS,返回上层 DFS,接着找下一个完全子图,直到找完所有的完全子图