最近注意到了图论中的最大团问题。最大团问题是一个 NP 完全问题,在此对它做简单介绍,并介绍具有代表性的 Bron-Kerbsch 算法。
什么是一个团?
最大团问题首先一个图的问题,假设读者已经知道图的概念。
假设一个无向图


极大团指的是,该团不包含于图

最大团指的是结点数量最多的极大团。
最大团问题的 Bron-Kerbosch 算法
对于一个无向图,找到其最大团是 NP 完全问题。本文介绍最大团问题的 Bron-Kerbosch 算法。
Bron–Kerbosch 算法是由荷兰科学家 Coenraad Bron 和 Joep Kerbosch 设计的,他们于1973年发表了论文《Algorithm 457: finding all cliques of an undirected graph》。理论上,在输入更少的最大独立子集时,算法运行时间最短。Bron–Kerbosch 算法和后续算法通常被认为在实践中比其他算法更加有效。
Akkoyunlu(1973)在同时代提出的算法虽然用不同的术语表示,但由于它生成相同的递归搜索树,因此可以看作与 Bron-Kerbosch 算法相同。
无枢轴算法
Bron–Kerbosch 算法的基本形式是一种递归回溯算法,用于搜索给定图

总体上,给定三个不相交的顶点集














在开始递归算法前,将





















该算法可以写作以下伪代码形式:
R := {}
P := node set of G
X := {}
BronKerbosch1(R, P, X):
if P and X are both empty:
report R as a maximal clique
for each vertex v in P:
BronKerbosch1(R ⋃ {v}, P ⋂ N(v), X ⋂ N(v))
P := P {v}
X := X ⋃ {v}
关于算法原理,谈一些个人理解。算法开始时,







采用回溯策略的原因是,我们并不知道某个顶点



在递归的过程中,









该算法还有很多后续改进的研究,如果学习到将补充在这里。