图的类别

弦图详解

弦图是你也许从未听说过、却最有用的图类之一。它的定义性质很小,回报却很惊人:那些在一般图上毫无希望的问题,在这里变得能在线性时间内轻松解决。下面讲它们是什么、如何认出一个,以及它们为何重要。

11 分钟阅读 更新时间:2026 年 7 月 中级
Mohammed Islam Hadjoudj
Mohammed Islam Hadjoudj
Expert Operations Research Engineer

什么是弦图?

弦图,也称三角剖分图,是这样一种图:其中每个含四个或更多顶点的环都有一条弦。弦是一条连接环上两个沿环彼此不相邻顶点的边。换句话说,弦图不含长度为四或更长的诱导环:每个长环都被较短的边切成三角形。

这个定义听起来很窄,但许多你已经熟悉的图都是弦图:树、完全图和区间图都是弦图。下图展示了最小的有趣情形,一个四顶点的环,分别是它的非弦图形式和弦图形式。

Not chordal Chordal A B C D A B C D 弦 A-C
左:四元环 A-B-C-D 没有弦,因此不是弦图。右:加上弦 A-C 把它切成两个三角形,使它成为弦图。

弦与诱导环

真正起作用的词是诱导。当一个环的顶点之间仅有的边就是环边本身时,这个环是诱导的。一旦出现一条弦,长环就不再是诱导的:它已经被三角剖分。

所以这两个定义是同一句话的两个视角:

三角形作为长度为 3 的环,总是被允许,也从不需要弦。这就是为什么弦图给人一种"由三角形搭起来"的感觉。

单纯点与消去顺序

弦图真正的威力来自一个结构性定理。先给两个定义。

Fulkerson-Gross 定理把这一切串了起来:

一个图是弦图当且仅当它有一个完美消去顺序。此外,每个弦图至少有一个单纯点,所以你总能从剥掉一个开始。

这就是弦图上每一个高效算法背后的引擎。一旦有了 PEO,你就可以按那个顺序处理顶点、贪心地解决问题,因为在每一步,该顶点剩下的邻居都构成一个团,毫无意外。

识别一个弦图

给定一个图,怎么判断它是不是弦图?你可以去搜寻诱导环,但那很慢。优雅的做法利用 PEO 的刻画,运行在线性时间 O(V + E)

  1. 运行字典序广度优先搜索(Lex-BFS)最大势搜索。两者都通过总是接下来访问已访问邻居最多的顶点,来产生一个顶点顺序。
  2. 把那个顺序倒过来。如果图是弦图,那么这个逆序保证是一个完美消去顺序。
  3. 验证这个候选顺序确实是 PEO。若是,图就是弦图;若检查失败,则不是。

这种搜索依赖广度优先搜索,并加以改造,使得平局由字典序标签来打破。验证这一步才是值得看代码的部分。

用 Python 验证一个顺序

核心检查如下:给定以邻接集合表示的图和一个候选顺序,判断它是否是完美消去顺序。对每个顶点,它靠后的邻居必须全都与其中最靠前的那个相邻。

def is_perfect_elimination_order(graph, order):
    pos = {v: i for i, v in enumerate(order)}

    for v in order:
        # 在顺序中排在 v 之后的邻居。
        later = [u for u in graph[v] if pos[u] > pos[v]]
        if len(later) <= 1:
            continue

        # 此处 v 是单纯点当且仅当这些靠后的邻居构成一个团。
        # 只需检查它们是否都与最靠前的那个 w 相邻即可。
        w = min(later, key=lambda u: pos[u])
        for u in later:
            if u != w and u not in graph[w]:
                return False   # w 和 u 排在 v 之后,却不相邻

    return True

如果它对倒过来的 Lex-BFS 顺序返回 True,那么图就是弦图。同一个 PEO 随后会被复用来解决下面那些困难问题。

弦图为何重要

弦图是完美图,在这一类图中,色数总是等于最大团的大小。这种结构把若干出了名的困难问题坍缩成容易问题。给定一个完美消去顺序,下面每一个都在线性时间内完成。

问题一般图弦图
最大团NP-难O(V + E)
最优着色NP-难O(V + E)
最大独立集NP-难O(V + E)
识别O(V + E)

还有一颗宝石。一个图是弦图,恰当它拥有一棵团树,即一种树分解,其中的袋子正是极大团。这把弦图与树宽联系起来:任何图的树宽,等于在它所有弦图补全上可能达到的最小最大团大小,再减一。要了解这一类图在更广图景中的位置,见图论的应用学习路线图

现实应用

在真实的图上建立直觉

当你能亲手移动顶点时,弦、环和团要好体会得多。在交互式可视化工具中探索图的结构。

打开算法可视化工具

常见问题

什么是弦图?

弦图,也称三角剖分图,是这样一种图:其中每个含四个或更多顶点的环都有一条弦,即连接环上两个沿环不相邻顶点的边。等价地说,它没有长度为四或更长的诱导环。

如何判断一个图是否为弦图?

运行字典序广度优先搜索(Lex-BFS)或最大势搜索,得到一个顶点顺序,然后验证它的逆序是否是完美消去顺序。整个检查在 O(V + E) 线性时间内完成。

什么是完美消去顺序?

完美消去顺序是顶点的一种排序,其中每个顶点在被移除的那一刻都是单纯点,也就是说它剩下的邻居构成一个团。一个图是弦图当且仅当它具有这样的顺序。

弦图为什么重要?

弦图是完美图,而若干在一般图上 NP-难的问题,包括最大团、最优着色和最大独立集,在弦图上都可以借助完美消去顺序在线性时间内求解。

进一步的学习资源

看见它,而不只是读它

图的结构在动态中直观得多。构建一张图,加上一条弦,看着一个长环碎成一个个三角形。

使用算法可视化工具进行练习