基础

团、独立集与顶点覆盖

团是一组两两相连的顶点,独立集是一组互不相连的顶点,而顶点覆盖是一组触及每条边的顶点。本指南说明为什么这三个问题其实是同一个问题、为什么极大不等于最大、如何精确地和近似地求出答案、它们在一般情况下为何如此困难,以及 Ramsey 理论对它们有何论断,全程配有经过测试的 Python 代码。

23 分钟阅读 更新时间:2026 年 10 月 入门级
Mohammed Islam Hadjoudj
Mohammed Islam Hadjoudj
Expert Operations Research Engineer

1. 团、独立集与顶点覆盖

图论中研究最多的三个问题都与顶点集合有关,每个问题都可以用一句话表述。

团和独立集是一对反义概念:一个要求所选顶点之间有全部可能的边,另一个要求一条边也没有。在朋友关系网络中,团是一群人人互相认识的人,独立集则是一群互不相识的人。“团”(clique)这个词来自社会学,Luce 和 Perry 在 1949 年正是用它来称呼这样的群体。顶点与边指南介绍了这些定义所依赖的术语。

每个问题的措辞里都藏着一个陷阱。如果一个集合在不破坏该性质的前提下无法再加入任何顶点(对覆盖而言,是无法再去掉任何顶点),就称它是极大的。如果不存在具有该性质的更大集合(对覆盖而言,是更小的集合),就称它是最大的。每个最大集合都是极大的,但反过来不成立,而大多数算法正是在这两者的区别上出错的。

2. 一个图,三个答案,一个恒等式

贯穿全文的示例图有 8 个顶点和 12 条边。顶点 A、 B、 C 和 D 两两相连, D、 E 和 F 构成一个三角形,而长度为 5 的环 C、 D、 F、 G、 H 绕过底部:

E = {AB, AC, AD, BC, BD, CD, CH, DE, DF, EF, FG, GH}      8 个顶点,12 条边

deg:   A 3   B 3   C 4   D 5   E 2   F 3   G 2   H 2
同一个八顶点图画了三遍。左:团 A、B、C、D 及其六条边以蓝色突出显示,标注为 omega 等于 4。中:独立集 A、E、G 以绿色显示,标注为 alpha 等于 3。右:顶点覆盖 B、C、D、F、H 以橙色显示,标注为 tau 等于 5。
示例图的最大团、最大独立集和最小顶点覆盖。这个覆盖恰好由独立集之外的顶点组成。

最大团是 {A, B, C, D},所以 ω = 4,而且它是唯一一个这么大的团。最大独立集有 3 个顶点,例如 {A, E, G},所以 α = 3;这样的集合共有七个。最小顶点覆盖有 5 个顶点,例如 {B, C, D, F, H},所以 τ = 5,同样也有七个。这两个七并非巧合。

有两个简短的论证把这三个数联系在一起。第一,一个图的补图恰好在原图没有边的地方有边,所以 G 中的团就是补图中的独立集,反之亦然: ω(G) 等于补图的 α。第二,集合 S 是独立集,当且仅当其余顶点构成一个顶点覆盖。如果某条边不碰到其余任何顶点,它的两个端点就都在 S中,于是 S 就不是独立集;反方向的论证也完全一样。取最大的 S,就得到最小的覆盖:

α(G) + τ(G) = n,对每个有 n 个顶点的图都成立。

这个恒等式通常归功于 Gallai,他在 1959 年发表了它。在本例中, 3 + 5 = 8,而七个最大独立集恰好是七个最小覆盖的补集。实际的结论是:这三个问题是同一个问题换了三身装扮。其中任何一个问题的算法,在原图或其补图上运行,都能精确地解决另外两个问题。

3. 极大不等于最大

三角形 {D, E, F} 是一个团,而且无法再向其中加入任何顶点,因为没有其他顶点同时与 D、 E 和 F三者相邻。它是一个大小为 3 的极大团,而最大团的大小是 4。边 CH、 FG 和 GH 也是极大团,大小为 2:它们都不在任何三角形中。示例图一共有五个极大团,其中只有一个是最大团。

示例图的两个面板。左:三角形 D、E、F 以紫色突出显示,这是一个无法再扩大的极大团,但只有 3 个顶点,而 A、B、C、D 有 4 个。右:贪心得到的独立集 D、G 以绿色显示;其他每个顶点都与 D 或 G 相邻,然而最大独立集有 3 个顶点。
两条死路。每个集合都是极大的,因为无法再加入任何顶点,但都比可能的最优解小。

独立集更容易落入同样的陷阱。自然的贪心方法依次遍历顶点,只要某个顶点的邻居都还没被选中,就选中它。结果总是极大的,但其大小取决于顺序。如果从 D开始,也就是从度最高的顶点开始,那么 D 一下子就挡住了五个顶点;选中 G 之后,剩下的每个顶点都与这两个顶点之一相邻,方法停在 {D, G},比最优解少一个。示例图有十个极大独立集,其中三个大小为 2,七个大小为 3。从度低的顶点开始(它们挡住的顶点少)是更好的习惯,但没有哪种贪心顺序对每个图都正确。

这个教训同样适用于软件。一个“找团”或“找独立集”的程序通常会很快地返回一个极大的集合。找出最大的集合是另一项困难得多的任务,本文其余部分讨论的就是如何精确求解、如何近似以及如何给出界。

4. 列出所有极大团:Bron–Kerbosch

寻找所有极大团的经典方法是 Bron 和 Kerbosch 在 1973 年发表的算法。它逐个顶点地扩大一个团 R,并另外维护两个集合: P,即仍可加入的顶点,因为它们与 R中的所有顶点都相邻;以及 X,即可以加入但已经探索过的顶点,因此用到它们的团都已报告过。当 P 和 X 都为空时, R 无法再扩大,也没有遗漏任何东西,所以 R 是一个极大团。

def graph(edges):
    adj = {}
    for u, v in edges:
        adj.setdefault(u, set()).add(v)
        adj.setdefault(v, set()).add(u)
    return adj

def bron_kerbosch(R, P, X, adj, out):
    """报告每个包含 R、只使用 P 中顶点且避开 X 的极大团。"""
    if not P and not X:
        out.append(sorted(R))                 # 无法再加入任何顶点:R 是极大的
        return
    pivot = max(P | X, key=lambda u: len(P & adj[u]))
    for v in sorted(P - adj[pivot]):          # 枢轴的邻居稍后再尝试
        bron_kerbosch(R | {v}, P & adj[v], X & adj[v], adj, out)
        P.remove(v)
        X.add(v)                              # 所有含 v 的团现在都已报告

def maximal_cliques(adj):
    out = []
    bron_kerbosch(set(), set(adj), set(), adj, out)
    return sorted(out, key=lambda c: (-len(c), c))

def complement(adj):
    return {v: set(adj) - adj[v] - {v} for v in adj}

G = graph(['AB', 'AC', 'AD', 'BC', 'BD', 'CD', 'CH', 'DE', 'DF', 'EF', 'FG', 'GH'])

print(maximal_cliques(G))
# [['A', 'B', 'C', 'D'], ['D', 'E', 'F'], ['C', 'H'], ['F', 'G'], ['G', 'H']]
print(maximal_cliques(complement(G)))   # G 的极大独立集
# [['A', 'E', 'G'], ['A', 'E', 'H'], ['A', 'F', 'H'], ['B', 'E', 'G'], ['B', 'E', 'H'], ['B', 'F', 'H'], ['C', 'E', 'G'], ['C', 'F'], ['D', 'G'], ['D', 'H']]

让它变快的关键是枢轴。任何极大团都必须包含枢轴或某个与枢轴不相邻的顶点,所以循环只需在枢轴的非邻居上分支;选择 P 或 X 中在 P 里邻居最多的顶点作为枢轴,可以省去最多的工作。Tomita、Tanaka 和 Takahashi 在 2006 年证明,采用这条规则时运行时间为 O(3n/3),而且这个界无法再改进,因为 Moon 和 Moser 在 1965 年证明,有 n 个顶点的图可以有 3n/3 个极大团,只要 n 是 3 的倍数。达到这个极值的图是 n/3 个不相交三角形的补图:它在 9 个顶点上有 27 个极大团,在 30 个顶点上有 59,049 个。

第一行输出按从大到小的顺序列出第 3 节中的五个极大团。第二行在补图上运行同一个函数,因此列出十个极大独立集。该函数已在 3,000 个最多 10 个顶点的随机图上,与 networkx 中的团查找函数(它使用同一个算法)进行了对比检验。

5. 精确求出最大独立集

列出每个极大集合往往超出需要,可以改用直接搜索来求出答案。两条规则就足以得到一个正确的方法。度为 0 的顶点总是可以选取。度为 1 的顶点 v 也总是可以选取:如果某个最大独立集包含它唯一的邻居 u,那么把 u 换成 v 后,它仍是独立集,大小也不变。当两条规则都不适用时,选一个顶点并尝试两种可能:选取它并删除它的邻居,或者不选它。

def graph(edges):
    adj = {}
    for u, v in edges:
        adj.setdefault(u, set()).add(v)
        adj.setdefault(v, set()).add(u)
    return adj

def remove(adj, gone):
    return {u: adj[u] - gone for u in adj if u not in gone}

def greedy_independent_set(adj, order):
    """依次选取每个顶点,除非它的某个邻居已被选取。结果总是极大的。"""
    chosen = set()
    for v in order:
        if not adj[v] & chosen:
            chosen.add(v)
    return chosen

def max_independent_set(adj):
    """精确算法:度为 0 或 1 的顶点总是可以放心选取;否则进行分支。"""
    if not adj:
        return set()
    v = min(adj, key=lambda u: len(adj[u]))
    if len(adj[v]) <= 1:
        return {v} | max_independent_set(remove(adj, {v} | adj[v]))
    v = max(adj, key=lambda u: len(adj[u]))
    take = {v} | max_independent_set(remove(adj, {v} | adj[v]))   # 选 v,删去其邻居
    skip = max_independent_set(remove(adj, {v}))                  # 不选 v
    return take if len(take) >= len(skip) else skip

G = graph(['AB', 'AC', 'AD', 'BC', 'BD', 'CD', 'CH', 'DE', 'DF', 'EF', 'FG', 'GH'])

print(sorted(greedy_independent_set(G, 'DGABCEFH')))   # 从度最高的顶点开始
# ['D', 'G']
best = max_independent_set(G)
print(sorted(best), sorted(set(G) - best))             # 最大独立集,最小覆盖
# ['A', 'E', 'G'] ['B', 'C', 'D', 'F', 'H']

第一行重现了第 3 节中贪心的死路。第二行给出一个最大独立集 {A, E, G},根据第 2 节的恒等式,它没有选中的顶点构成一个最小顶点覆盖 {B, C, D, F, H}。该函数已在同样的 3,000 个随机图上与 networkx 进行了对比检验,它返回的每个集合都是独立集,而且大小正确。

在度最大的顶点上分支是有意为之:选取它会删除最多的顶点,所以这一分支让图缩小得最快。度规则还意味着,搜索在森林上根本不会分支,因为每个森林都有度为 0 或 1 的顶点,而删除顶点后它仍是森林。在一般图上,搜索仍是指数级的,但规模远小于全部 2n 个子集:Tarjan 和 Trojanowski 在 1977 年把这类规则改进为一个 O(2n/3) 的算法,后来的研究又进一步降低了底数。

6. 顶点覆盖:2-近似与快速精确检验

顶点覆盖有两个它的同伴所没有的性质,两者都来自对边的观察。第一个是一个简单的近似算法。遍历所有边,每当一条边的两个端点都还不在覆盖中时,就把两个端点都加入。这样选出的边没有公共顶点,所以它们构成一个匹配;而且不可能再有边加入它们,所以这是一个极大匹配。任何覆盖都必须包含每条匹配边的至少一个端点,而这些端点各不相同,所以 τ 至少等于匹配边的条数。该方法每条匹配边恰好选取两个顶点,所以它的覆盖永远不会超过最优解的两倍。这个论证通常归功于 Gavril 和 Yannakakis,而 Garey 和 Johnson 1979 年的著作使它广为人知。

def matching_cover(edges):
    """2-近似:对每条仍未被覆盖的边,选取它的两个端点。"""
    cover = set()
    for u, v in edges:
        if u not in cover and v not in cover:
            cover |= {u, v}                   # 这些边构成一个极大匹配
    return cover

def cover_of_size(edges, k):
    """返回至多 k 个顶点的顶点覆盖,若不存在则返回 None。至多 2^k 个分支。"""
    if not edges:
        return set()
    if k == 0:
        return None
    u, v = edges[0]                           # 任何覆盖都必须包含 u 和 v 之一
    for w in (u, v):
        rest = [e for e in edges if w not in e]
        found = cover_of_size(rest, k - 1)
        if found is not None:
            return found | {w}
    return None

E = ['AB', 'AC', 'AD', 'BC', 'BD', 'CD', 'CH', 'DE', 'DF', 'EF', 'FG', 'GH']

print(sorted(matching_cover(E)))
# ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
print(cover_of_size(E, 4))
# None
print(sorted(cover_of_size(E, 5)))
# ['A', 'B', 'D', 'F', 'H']
左:匹配边 A-B、C-D、E-F 和 G-H 以橙色粗线画出,全部八个顶点都被选入覆盖。右:由五个顶点 A、B、D、F、H 组成的一个最小覆盖,匹配边一并画出以供比较。
四条边的匹配迫使任何覆盖至少包含四个顶点,而该方法选取了八个。最优值五介于两者之间。

在本例中,匹配为 AB、 CD、 EF 和 GH,该方法选取了全部八个顶点。这是一个很差的覆盖,但这个匹配同时证明了不存在少于四个顶点的覆盖,所以该方法无需知道最优值,就知道自己的答案在 2 倍以内。一个诱人的替代方法是反复选取度最高的顶点,但它没有这样的保证:在精心构造的图上,它得到的覆盖可能比最优解差上一个随图的规模增长的倍数。

第二个性质是:小的覆盖很容易精确求出。任意一条边 uv 都必须有 u 或 v 在覆盖中,所以函数 cover_of_size 尝试这两种情况,并以 k − 1的预算继续。搜索树的深度至多为 k,至多有 2k 片叶子,与顶点数无关。在本例中,它报告不存在 4 个顶点的覆盖,并找到一个 5 个顶点的覆盖。取 k = 20时,无论图有多大,搜索树至多约有一百万片叶子:搜索的规模取决于覆盖的大小,而不是顶点数。具有这种性质的问题称为固定参数可解的。

Buss 和 Goldsmith 1993 年论文中的一条预处理规则可以先缩小输入。邻居多于 k 个的顶点必须属于每个大小为 k的覆盖,否则它的所有邻居都需要被选入。选取这样的顶点之后,剩下的每个顶点至多覆盖 k 条边,所以如果剩下的边多于 k2 条,答案就是否定的。已知最好的精确算法由 Chen、Kanj 和 Xia 在 2010 年给出,运行时间为 O(1.2738k + kn)。

7. 这些问题有多难?

判定一个图是否含有大小为 k 的团是 NP 完全的,判定它是否含有大小为 k的顶点覆盖也是如此。两者都在 Karp 1972 年列出的 21 个 NP 完全问题之中,而通过第 2 节的恒等式,独立集问题可由其中任何一个推出。目前对其中任何一个问题都没有已知的多项式时间算法,而找到一个就能证明 P = NP。

这些恒等式保持精确答案,却不保持近似答案,三个问题在这里分道扬镳。正如第 6 节所示,顶点覆盖可以在 2 倍以内近似。团和独立集则基本上完全无法近似:Håstad 在 1999 年证明,对每个 ε > 0,除非 NP = ZPP,否则没有多项式时间算法能在 n1−ε 倍以内近似最大团;Zuckerman 在 2007 年证明,只需假设 P ≠ NP,同样的结论就成立。一个小计算说明了为什么这个恒等式不能传递近似保证:在一个有 1,000 个顶点且 τ = 500的图中,一个 1,000 个顶点的覆盖在 2 倍以内,但它留下的独立集却是空的。

即使是顶点覆盖的 2 倍也可能已经是极限了。Dinur 和 Safra 在 2005 年证明,在 1.36 倍以内近似它是 NP 困难的;Khot 和 Regev 在 2008 年证明,如果唯一博弈猜想(Unique Games Conjecture)成立,那么在 2 − ε 倍以内近似也是困难的。参数化的图景同样不同。正如第 6 节所示,顶点覆盖是固定参数可解的,而寻找大小为 k 的团是 W[1] 完全的(Downey 和 Fellows 在 1995 年证明),这强有力地表明它不存在运行时间为 f(k) · nc 的算法。

8. 可以手算验证的界

由于精确值难以计算,简单的界就很有价值,其中有几个把这些问题与着色和度联系了起来。

9. Ramsey 理论:秩序不可避免

Turán 定理说稠密的图含有大的团。Ramsey 理论则给出了更强的结论:每个足够大的图,无论稠密程度如何,都含有一个大的团或一个大的独立集。 Ramsey 数 R(s, t) 是满足以下条件的最小 n:每个有 n 个顶点的图都含有大小为 s 的团或大小为 t的独立集。Ramsey 在 1930 年证明了这些数存在。

左:五个人排成一个五边形;外圈的边是朋友关系,用蓝色实线表示,内部五角星的边是陌生关系,用橙色虚线表示,图中没有同色三角形。右:某人 v 与 x、y、z 之间有朋友边;x、y、z 中任意一对是朋友,都会与 v 构成三角形,如果一对也没有,x、y、z 就是三个互不相识的人。
聚会问题。五个人可以既没有三个互为朋友的人,也没有三个互不相识的人;六个人就做不到。

最小的情形是聚会问题:任意六个人中,总有三个人互为朋友或三个人互不相识,所以 R(3, 3) = 6。证明只需几行。任选一个人 v。在其余五人中,至少有三人是 v 的朋友,或者至少有三人与 v互不相识;不妨设有三个朋友 x、 y 和 z。如果他们中有任意两人是朋友,这两人就与 v构成三个互为朋友的人。如果一对也没有, x、 y 和 z 就是三个互不相识的人。五个人是不够的:让他们排成五边形,相邻的人是朋友,其余都是陌生人,就不会出现任何一种三人组。对六个人的 15 对关系标记为朋友或陌生人的全部 32,768 种方式进行穷举检验,证实了这个结果。

超出最小的情形之后,Ramsey 数是出了名的难求。Greenwood 和 Gleason 在 1955 年求出了 R(4, 4) = 18。对于 R(5, 5),Exoo 在 1989 年证明它至少是 43,而 Angeltveit 和 McKay 在经过数十年的计算之后,于 2024 年证明它至多是 46;其确切值至今仍不知道。对于一般的 k,Erdős 和 Szekeres 在 1935 年证明 R(k, k) 小于 4k,而 Erdős 在 1947 年证明它大于 2k/2,方法是证明随机图通常既没有大的团也没有大的独立集,这是概率方法最早的应用之一。后来的工作压低了上界,但底数 4 一直未被突破,直到 Campos、Griffiths、Morris 和 Sahasrabudhe 把它降到 (4 − ε)k,相关论文于 2023 年首次发布。

10. 问题变得容易的特殊图类

NP 困难性是关于所有图的论断。实际中出现的许多图类具有特殊结构,使这些问题变得易于处理。

11. 团、独立集与覆盖的应用

12. 常见错误

错误为什么错修正
把极大集合当成最大集合{D, E, F} 无法再扩大,但最大团有 4 个顶点说明程序返回的是哪一种;大多数快速方法返回的是极大集合
轻信贪心顺序从度最高的顶点 D 出发,最终停在 {D, G},还差一个才达到 α = 3小图使用精确搜索,并把贪心结果当作下界
通过顶点覆盖来近似独立集2 倍以内的覆盖可能留下一个空的独立集把 α + τ = n 仅用于精确答案
覆盖顶点而不是覆盖边顶点覆盖必须触及每条边,而不是到达每个顶点检查每条边都有一个端点在集合中;支配集是另一个问题
想当然地认为 ω = χ长度为 5 的环团数为 2,却需要 3 种颜色把 ω 当作下界;在完美图中等号成立
不用枢轴就列举团朴素回溯会多次探索同样的团使用带 Tomita 枢轴规则的 Bron–Kerbosch
以为平面性让一切都变容易在最大度为 3 的平面图上,顶点覆盖仍是 NP 完全的只有团问题变容易,因为 ω ≤ 4

13. 术语表

术语含义
团两两相邻的一组顶点
团数, ω(G)最大团的大小
独立集任意两个都不相邻的一组顶点;也称稳定集
独立数, α(G)最大独立集的大小
顶点覆盖包含每条边至少一个端点的一组顶点
顶点覆盖数, τ(G)最小顶点覆盖的大小
极大无法在不失去该性质的前提下再扩充
最大在所有具有该性质的集合中尽可能大
补图恰好在原图没有边的地方有边的图
枢轴Bron–Kerbosch 用来跳过不会产生新团的分支的顶点
固定参数可解可在 f(k) · nc 时间内求解,其中参数为 k
Ramsey 数, R(s, t)最少的顶点数,使图中必有大小为 s 的团,或者独立数至少为 t

14. 常见问题

图论中的团是什么?

团是一组顶点,其中每两个顶点之间都有一条边相连,因此这些顶点在更大的图中构成一个完全图。最大团的大小称为团数,记作 omega(G)。极大团无法再通过加入另一个顶点来扩充,而最大团是整个图中最大的团。

极大与最大有什么区别?

极大集合无法在不失去其性质的前提下扩大,但图中其他地方可能存在更大的集合。最大集合是所有存在的集合中最大的那一个。每个最大团或最大独立集都是极大的,但反过来不成立,而贪心方法只能保证得到一个极大集合。

独立集与顶点覆盖有什么关系?

一个顶点集合是独立集,当且仅当其余顶点构成一个顶点覆盖。因此在每个有 n 个顶点的图中,独立数加上顶点覆盖数等于 n,这个恒等式归功于 Gallai。最大独立集与最小顶点覆盖互为补集,而图中的团就是其补图中的独立集。

最大团问题是 NP 困难的吗?

是的。判定一个图是否含有给定大小的团是 NP 完全的,它和顶点覆盖一样,都在 Karp 1972 年列出的 21 个 NP 完全问题之中。团问题也很难近似:除非 P 等于 NP,否则没有多项式时间算法能在 n 的 1 减 epsilon 次方倍以内近似最大团。

如何近似最小顶点覆盖?

反复选取一条两个端点都不在覆盖中的边,并把它的两个端点都加入覆盖。选出的边构成一个极大匹配,而任何覆盖都至少需要其中每条边的一个端点,所以结果至多是最优解的两倍。要做到优于最优解的约 1.36 倍是 NP 困难的;如果唯一博弈猜想成立,要做到优于 2 倍也是困难的。

Bron-Kerbosch 算法是做什么的?

Bron-Kerbosch 算法通过回溯列出一个图的所有极大团。它维护当前的团、可以扩充它的候选顶点,以及已经探索过的顶点。如果枢轴选得好,它在最坏情况下的运行时间为 O(3 的 n/3 次方),这是最优的,因为一个图可以有这么多个极大团。

15. 参考文献

以上定义、定理和归属均出自以下文献,按时间顺序排列。

  1. Mantel, W. (1907). "Problem 28 (Solution by H. Gouwentak, W. Mantel, J. Teixeira de Mattes, F. Schuh and W. A. Wythoff)." Wiskundige Opgaven 10,60 至 61 页。
  2. Ramsey, F. P. (1930). "On a Problem of Formal Logic." Proceedings of the London Mathematical Society s2-30,264 至 286 页。
  3. Kőnig, D. (1931). "Gráfok és mátrixok." Matematikai és Fizikai Lapok 38,116 至 119 页。
  4. Erdős, P. 和 Szekeres, G. (1935). "A Combinatorial Problem in Geometry." Compositio Mathematica 2,463 至 470 页。
  5. Turán, P. (1941). "Egy gráfelméleti szélsőértékfeladatról." Matematikai és Fizikai Lapok 48,436 至 452 页。
  6. Erdős, P. (1947). "Some Remarks on the Theory of Graphs." Bulletin of the American Mathematical Society 53,292 至 294 页。
  7. Luce, R. D. 和 Perry, A. D. (1949). "A Method of Matrix Analysis of Group Structure." Psychometrika 14(2),95 至 116 页。
  8. Greenwood, R. E. 和 Gleason, A. M. (1955). "Combinatorial Relations and Chromatic Graphs." Canadian Journal of Mathematics 7,1 至 7 页。
  9. Gallai, T. (1959). "Über extreme Punkt- und Kantenmengen." Annales Universitatis Scientiarum Budapestinensis de Rolando Eötvös Nominatae, Sectio Mathematica 2,133 至 138 页。
  10. Moon, J. W. 和 Moser, L. (1965). "On Cliques in Graphs." Israel Journal of Mathematics 3,23 至 28 页。
  11. Gavril, F. (1972). "Algorithms for Minimum Coloring, Maximum Clique, Minimum Covering by Cliques, and Maximum Independent Set of a Chordal Graph." SIAM Journal on Computing 1(2),180 至 187 页。
  12. Karp, R. M. (1972). "Reducibility Among Combinatorial Problems." 载于 Complexity of Computer Computations,R. E. Miller 和 J. W. Thatcher 编,85 至 103 页。纽约:Plenum。
  13. Bron, C. 和 Kerbosch, J. (1973). "Algorithm 457: Finding All Cliques of an Undirected Graph." Communications of the ACM 16(9),575 至 577 页。
  14. Barrow, H. G. 和 Burstall, R. M. (1976). "Subgraph Isomorphism, Matching Relational Structures and Maximal Cliques." Information Processing Letters 4(4),83 至 84 页。
  15. Garey, M. R., Johnson, D. S. 和 Stockmeyer, L. (1976). "Some Simplified NP-Complete Graph Problems." Theoretical Computer Science 1(3),237 至 267 页。
  16. Garey, M. R. 和 Johnson, D. S. (1977). "The Rectilinear Steiner Tree Problem is NP-Complete." SIAM Journal on Applied Mathematics 32(4),826 至 834 页。最大度为 3 的平面图上的顶点覆盖。
  17. Tarjan, R. E. 和 Trojanowski, A. E. (1977). "Finding a Maximum Independent Set." SIAM Journal on Computing 6(3),537 至 546 页。
  18. Caro, Y. (1979). "New Results on the Independence Number." 技术报告,特拉维夫大学。
  19. Garey, M. R. 和 Johnson, D. S. (1979). Computers and Intractability: A Guide to the Theory of NP-Completeness. 旧金山:W. H. Freeman。顶点覆盖的 2-近似。
  20. Wei, V. K. (1981). "A Lower Bound on the Stability Number of a Simple Graph." 贝尔实验室技术备忘录 81-11217-9。
  21. Grötschel, M., Lovász, L. 和 Schrijver, A. (1981). "The Ellipsoid Method and Its Consequences in Combinatorial Optimization." Combinatorica 1(2),169 至 197 页。
  22. Exoo, G. (1989). "A Lower Bound for R(5, 5)." Journal of Graph Theory 13(1),97 至 98 页。
  23. Buss, J. F. 和 Goldsmith, J. (1993). "Nondeterminism within P." SIAM Journal on Computing 22(3),560 至 572 页。
  24. Downey, R. G. 和 Fellows, M. R. (1995). "Fixed-Parameter Tractability and Completeness II: On Completeness for W[1]." Theoretical Computer Science 141,109 至 131 页。
  25. Håstad, J. (1999). "Clique is Hard to Approximate within n1−ε." Acta Mathematica 182(1),105 至 142 页。
  26. Dinur, I. 和 Safra, S. (2005). "On the Hardness of Approximating Minimum Vertex Cover." Annals of Mathematics 162(1),439 至 485 页。
  27. Tomita, E., Tanaka, A. 和 Takahashi, H. (2006). "The Worst-Case Time Complexity for Generating All Maximal Cliques and Computational Experiments." Theoretical Computer Science 363(1),28 至 42 页。
  28. Zuckerman, D. (2007). "Linear Degree Extractors and the Inapproximability of Max Clique and Chromatic Number." Theory of Computing 3,103 至 128 页。
  29. Khot, S. 和 Regev, O. (2008). "Vertex Cover Might Be Hard to Approximate to within 2 − ε." Journal of Computer and System Sciences 74(3),335 至 349 页。
  30. Chen, J., Kanj, I. A. 和 Xia, G. (2010). "Improved Upper Bounds for Vertex Cover." Theoretical Computer Science 411(40–42),3736 至 3756 页。
  31. Diestel, R. (2017). Graph Theory,第 5 版。Graduate Texts in Mathematics 173。柏林:Springer。
  32. Angeltveit, V. 和 McKay, B. D. (2024). "R(5, 5) ≤ 46." arXiv:2409.15709。
  33. Campos, M., Griffiths, S., Morris, R. 和 Sahasrabudhe, J. (2026). "An Exponential Improvement for Diagonal Ramsey." Annals of Mathematics 203(3),869 至 932 页。最初于 2023 年以 arXiv:2303.09521 发布。

看 Bron–Kerbosch 如何工作

在可视化工具中画出这个示例图,并运行极大团查找器。它会报告全部五个极大团,包括那个三角形,以及三条远在达到最大团之前就停止增长的边。

打开可视化工具

团设定了下限

在可视化工具中为示例图着色。团 A、B、C、D 迫使使用四种颜色,这正是团数总能给出的下界,而这里四种颜色就足够了。

启动图着色可视化工具