MathLabs

组合数学与离散数学

树

没有环的连通图,是结构最简单、最有条理的一类网络。

直观没有多余路径的网络

家谱树、公司的组织架构图、计算机文件系统,以及游戏中的决策树,都拥有同一种形状:任意两点之间都恰好由一条路径相连,没有会让人迷失的环路。若在家谱树的两个分支之间再加一条连线,就会产生一个环——一条打破"恰好一条路径"这一性质的捷径。树是数学上对边数尽可能少的连通网络的称呼:去掉任意一条边它就会分裂成两块;加上任意一条边就会产生一个环。

4个顶点的完全图,每个顶点颜色不同,用于说明生成树与Cayley公式。
V=7V = 7 个顶点的二叉树 T3T_3 恰有 E=V−1=6E = V - 1 = 6 条边,无环,且任意两顶点间存在唯一简单路径。

大学形式化定义

定义: 树

树是既连通(任意两个顶点之间都有路径)又无环(不含任何环)的图 TT。树中度为 11 的顶点称为叶子。每个连通分量都是树的图(它本身不必连通)称为森林。

∣V(T)∣=n  ⟹  ∣E(T)∣=n−1|V(T)| = n \implies |E(T)| = n - 1

这正是树的特征平衡关系:拥有 nn 个顶点的树恰好有 n−1n-1 条边——刚好足以保持连通,不多不少,不会产生环。对所有顶点的度求和并使用握手引理(∑vdeg⁡(v)=2∣E∣\sum_v \deg(v) = 2|E|),可以得到一个在计数叶子和内部顶点时很有用的伴随恒等式。

∑v∈V(T)deg⁡(v)=2(n−1)\sum_{v \in V(T)} \deg(v) = 2(n-1)
刻画 nn 个顶点上的树的等价条件
条件边数附加性质
连通且无环恰好 n−1n-1任意两顶点间路径唯一
连通且有 n−1n-1 条边n−1n-1去掉任意一条边都会使其不连通
无环且有 n−1n-1 条边n−1n-1添加任意一条边都恰好产生一个环
有 n−1n-1 条边的不连通图(不是树)n−1n-1尽管边数相符,仍在某处含有环

大学主要定理

对于有 nn 个顶点的图 TT,以下条件等价:(i) TT 连通且无环;(ii) TT 连通且有 n−1n-1 条边;(iii) TT 无环且有 n−1n-1 条边。

为什么成立?

从树中去掉任意一条边都会使其不连通,添加任意一条边都会产生一个环——树恰好拥有连接一切所需的边数,不多不少。这三个条件分别从不同角度锁定了这种"恰到好处"的结构。

证明

我们证明 (i) 连通且无环   ⟹  \implies (ii) 连通且有 n−1n-1 条边   ⟹  \implies (iii) 无环且有 n−1n-1 条边   ⟹  \implies (i),从而把三者串成一个环。

**(i)  ⟹  \implies(ii)**,对 nn 归纳。基础情形 n=1n=1 显然:单个顶点有 0=n−10 = n-1 条边。归纳步骤:取一个 n≥2n\ge2 个顶点的连通无环图 TT。由于 TT 有限且无环,它必含一个叶子 vv(度为 11 的顶点):否则每个顶点的度都 ≥2\ge 2,从任意起点出发沿边前进且不立即折返,最终必会重访某个顶点,从而产生环。删去 vv 及其唯一关联边,剩下的图 T′T' 有 n−1n-1 个顶点,依然连通(没有其他顶点依赖 vv 来保持连通)且依然无环(无环图的子图仍无环)。由归纳假设,T′T' 有 (n−1)−1(n-1)-1 条边,故 TT 有 (n−1)−1+1=n−1(n-1)-1+1 = n-1 条边。

**(ii)  ⟹  \implies(iii)**。设 TT 连通且有 n−1n-1 条边。若 TT 含有一个环,删去该环上的一条边后图仍连通(被删边的两端点仍由环的其余部分相连),这就得到一个在 nn 个顶点上只有 n−2n-2 条边的连通图。但任何 nn 个顶点上的连通图都至少需要 n−1n-1 条边(除第一个顶点外,每个新顶点都至少需要一条新边才能到达),所以 n−2n-2 条边不可能让 nn 个顶点连通——矛盾。故 TT 不含环,即无环。

**(iii)  ⟹  \implies(i)**。设 TT 无环且有 n−1n-1 条边,并设其有 cc 个连通分量。每个分量本身连通且无环,于是对每个分量分别应用已证明的 (i)  ⟹  \implies(ii) 方向,一个有 nin_i 个顶点的分量就有 ni−1n_i - 1 条边。对所有分量求和,总边数为 ∑i(ni−1)=n−c\sum_i (n_i - 1) = n - c。已知总数为 n−1n-1,故 n−c=n−1n - c = n - 1,于是 c=1c=1:TT 连通。

定理: Cayley公式

顶点集 {1,…,n}\{1,\dots,n\}(n≥2n\ge2)上不同的带标号树的个数为 nn−2n^{n-2}。

为什么成立?

它回答了一个纯组合问题——把 nn 个可区分的点连成一个树形网络共有多少种不同方式——给出了一个出人意料简洁的封闭公式,而用来证明它的编码技巧(Prüfer序列)把"数树的个数"变成了"数序列的个数",一个容易得多的问题。

证明

固定顶点集为 {1,…,n}\{1,\dots,n\},对 n≥2n\ge2 定义带标号树 TT 的Prüfer序列:反复找到标号最小的叶子,记下其唯一邻居的标号,然后删去该叶子;当只剩下 22 个顶点时停止。这样记录了 n−2n-2 个标号(每删除一次记一个,因为从 nn 个顶点开始、停在 22 个),所以每棵带标号树都产生 {1,…,n}n−2\{1,\dots,n\}^{n-2} 中的一个序列。

这样的序列恰有 nn−2n^{n-2} 个,因为 n−2n-2 个位置中的每一个都可独立取 nn 个标号中的任意一个。剩下要证明这个编码是一个双射,使带标号树与这些序列一一对应。

关键事实是:在Prüfer序列中,标号 ii 恰好出现 deg⁡(i)−1\deg(i)-1 次:每当 ii 的某个邻居作为叶子被删除时,ii 就被记录一次,而 ii 本身只有在除一条关联边外全部消失后才会被删除(不产生记录)。特别地,从未出现在序列中的标号恰好就是最初的叶子。这使我们能够解码:给定序列 (a1,…,an−2)(a_1,\dots,a_{n-2}),反复取出尚未作为剩余序列条目出现、也尚未被连接的最小标号,将其与剩余序列的第一个条目用一条边相连,把该标号从后续候选中去除,并从序列中删去该条目;当全部 n−2n-2 个条目用完后,把剩下的 22 个标号用最后一条边相连。

这个解码过程按剩余顶点数进行归纳,精确地逐步逆转编码过程——每一步都识别出与编码器本应记录的相同的最小标号叶子及其邻居。因此编码与解码互为逆过程,给出了 nn 个顶点上带标号树与 {1,…,n}n−2\{1,\dots,n\}^{n-2} 中序列之间的双射。由于这样的序列恰有 nn−2n^{n-2} 个,nn 个顶点上的带标号树也恰有 nn−2n^{n-2} 棵。

大学实际应用与典型例题

树是各种层级结构与路由结构的支柱,无处不在:文件系统、生物学中的系统发生树、机器学习中的决策树,以及计算机科学中的二叉搜索树和霍夫曼编码。最直接的工程用途之一是网络设计:当一家公司需要以最低成本用电缆或无线链路连接一组办公室、传感器或计算机时,最便宜的连通布局总是一棵生成树——用环连接它们会在冗余链路上浪费金钱。Kruskal算法用一条简单的贪心规则找到这棵最便宜的树:按成本对所有可能的链路排序,依次加入每条链路,除非它会闭合成一个环。

例题: 用Kruskal算法实现最低成本布线

需要用光缆把5座中继塔连接起来,使总长度最小。可能的链路及其长度(公里)如下:{1,3}:1\{1,3\}:1、{2,3}:2\{2,3\}:2、{4,5}:2\{4,5\}:2、{1,2}:4\{1,2\}:4、{2,4}:5\{2,4\}:5、{2,5}:6\{2,5\}:6、{3,4}:8\{3,4\}:8、{3,5}:10\{3,5\}:10。求连接全部5座塔所需的最小总光缆长度。

解答

将 88 条候选链路按长度从小到大排序:{1,3}:1\{1,3\}:1、{2,3}:2\{2,3\}:2、{4,5}:2\{4,5\}:2、{1,2}:4\{1,2\}:4、{2,4}:5\{2,4\}:5、{2,5}:6\{2,5\}:6、{3,4}:8\{3,4\}:8、{3,5}:10\{3,5\}:10。Kruskal算法遍历这个列表一次,只要该链路的两个端点尚未被之前选中的链路连通(否则会产生环),就加入它。

加入 {1,3}:1\{1,3\}:1(塔 1,31,3 原本分开,现已相连)。加入 {2,3}:2\{2,3\}:2(把塔 22 并入 {1,3}\{1,3\} 组,现为 {1,2,3}\{1,2,3\})。加入 {4,5}:2\{4,5\}:2(塔 4,54,5 原本分开,现已连成 {4,5}\{4,5\})。

跳过 {1,2}:4\{1,2\}:4:11 和 22 已经都在组 {1,2,3}\{1,2,3\} 中,加入此链路会形成环。加入 {2,4}:5\{2,4\}:5:把剩下的两组 {1,2,3}\{1,2,3\} 和 {4,5}\{4,5\} 合并为包含全部 55 座塔的一组。

此时已加入 44 条链路,恰好等于 55 个顶点的树所需的 n−1=5−1=4n-1 = 5-1=4 条边,算法于是停止(之后任何链路都只会产生环)。最小总光缆长度为 1+2+2+5=101+2+2+5 = 10 公里。

例题: 统计可能的骨干网拓扑数量

某电信公司计划用一个无环(树形)骨干网络连接 66 个可区分的中继站,目前对哪些站点相连尚无限制。结构上不同的带标号树拓扑共有多少种可能?

解答

由Cayley公式,nn 个顶点上带标号树的个数为 nn−2n^{n-2}。此处 n=6n=6,故数量为 66−2=646^{6-2} = 6^4。

计算得 64=6×6×6×6=12966^4 = 6\times6\times6\times6 = 1296。因此连接这 66 个站点、结构互不相同的树形拓扑共有 12961296 种。

对网络规划者而言,这个巨大的设计空间正是没有人会手动枚举全部 12961296 种可能的原因:取而代之的是,像Kruskal算法这样的优化过程(定理1中关于边数的性质保证了任何候选方案恰好有 6−1=56-1=5 条链路)可以直接从链路成本中选出唯一最便宜的树,而完全无需列出其余方案。

一棵树有 2323 个顶点,它有多少条边?

根据Cayley公式,55 个顶点上不同的带标号树共有多少棵?

某电缆公司必须用尽可能便宜的网络(没有冗余链路)连接 99 个办公室。对排序后的链路成本使用Kruskal算法,最终网络会有多少条链路?

某图有 1010 个顶点和 99 条边,但分裂成 22 个独立的连通部分(其中一个含有一个环)。尽管其边数与 n−1n-1 相符,这个图不满足定理1中的哪个刻画?

参考文献

  1. Reinhard Diestel (2017). Graph Theory
  2. David R. Karger, Philip N. Klein, Robert E. Tarjan (1995). A randomized linear-time algorithm to find minimum spanning trees · DOI:10.1145/201019.201022
  3. Aaron Schild (2017). An almost-linear time algorithm for uniform random spanning tree generation · arXiv:1711.06455 [预印本,未经同行评审]