组合数学与离散数学
树
没有环的连通图,是结构最简单、最有条理的一类网络。
直观没有多余路径的网络
家谱树、公司的组织架构图、计算机文件系统,以及游戏中的决策树,都拥有同一种形状:任意两点之间都恰好由一条路径相连,没有会让人迷失的环路。若在家谱树的两个分支之间再加一条连线,就会产生一个环——一条打破"恰好一条路径"这一性质的捷径。树是数学上对边数尽可能少的连通网络的称呼:去掉任意一条边它就会分裂成两块;加上任意一条边就会产生一个环。
大学形式化定义
定义: 树
树是既连通(任意两个顶点之间都有路径)又无环(不含任何环)的图 。树中度为 的顶点称为叶子。每个连通分量都是树的图(它本身不必连通)称为森林。
这正是树的特征平衡关系:拥有 个顶点的树恰好有 条边——刚好足以保持连通,不多不少,不会产生环。对所有顶点的度求和并使用握手引理(),可以得到一个在计数叶子和内部顶点时很有用的伴随恒等式。
| 条件 | 边数 | 附加性质 |
|---|---|---|
| 连通且无环 | 恰好 | 任意两顶点间路径唯一 |
| 连通且有 条边 | 去掉任意一条边都会使其不连通 | |
| 无环且有 条边 | 添加任意一条边都恰好产生一个环 | |
| 有 条边的不连通图(不是树) | 尽管边数相符,仍在某处含有环 |
大学主要定理
对于有 个顶点的图 ,以下条件等价:(i) 连通且无环;(ii) 连通且有 条边;(iii) 无环且有 条边。
为什么成立?
从树中去掉任意一条边都会使其不连通,添加任意一条边都会产生一个环——树恰好拥有连接一切所需的边数,不多不少。这三个条件分别从不同角度锁定了这种"恰到好处"的结构。
证明
我们证明 (i) 连通且无环 (ii) 连通且有 条边 (iii) 无环且有 条边 (i),从而把三者串成一个环。
**(i)(ii)**,对 归纳。基础情形 显然:单个顶点有 条边。归纳步骤:取一个 个顶点的连通无环图 。由于 有限且无环,它必含一个叶子 (度为 的顶点):否则每个顶点的度都 ,从任意起点出发沿边前进且不立即折返,最终必会重访某个顶点,从而产生环。删去 及其唯一关联边,剩下的图 有 个顶点,依然连通(没有其他顶点依赖 来保持连通)且依然无环(无环图的子图仍无环)。由归纳假设, 有 条边,故 有 条边。
**(ii)(iii)**。设 连通且有 条边。若 含有一个环,删去该环上的一条边后图仍连通(被删边的两端点仍由环的其余部分相连),这就得到一个在 个顶点上只有 条边的连通图。但任何 个顶点上的连通图都至少需要 条边(除第一个顶点外,每个新顶点都至少需要一条新边才能到达),所以 条边不可能让 个顶点连通——矛盾。故 不含环,即无环。
**(iii)(i)**。设 无环且有 条边,并设其有 个连通分量。每个分量本身连通且无环,于是对每个分量分别应用已证明的 (i)(ii) 方向,一个有 个顶点的分量就有 条边。对所有分量求和,总边数为 。已知总数为 ,故 ,于是 : 连通。
顶点集 ()上不同的带标号树的个数为 。
为什么成立?
它回答了一个纯组合问题——把 个可区分的点连成一个树形网络共有多少种不同方式——给出了一个出人意料简洁的封闭公式,而用来证明它的编码技巧(Prüfer序列)把"数树的个数"变成了"数序列的个数",一个容易得多的问题。
证明
固定顶点集为 ,对 定义带标号树 的Prüfer序列:反复找到标号最小的叶子,记下其唯一邻居的标号,然后删去该叶子;当只剩下 个顶点时停止。这样记录了 个标号(每删除一次记一个,因为从 个顶点开始、停在 个),所以每棵带标号树都产生 中的一个序列。
这样的序列恰有 个,因为 个位置中的每一个都可独立取 个标号中的任意一个。剩下要证明这个编码是一个双射,使带标号树与这些序列一一对应。
关键事实是:在Prüfer序列中,标号 恰好出现 次:每当 的某个邻居作为叶子被删除时, 就被记录一次,而 本身只有在除一条关联边外全部消失后才会被删除(不产生记录)。特别地,从未出现在序列中的标号恰好就是最初的叶子。这使我们能够解码:给定序列 ,反复取出尚未作为剩余序列条目出现、也尚未被连接的最小标号,将其与剩余序列的第一个条目用一条边相连,把该标号从后续候选中去除,并从序列中删去该条目;当全部 个条目用完后,把剩下的 个标号用最后一条边相连。
这个解码过程按剩余顶点数进行归纳,精确地逐步逆转编码过程——每一步都识别出与编码器本应记录的相同的最小标号叶子及其邻居。因此编码与解码互为逆过程,给出了 个顶点上带标号树与 中序列之间的双射。由于这样的序列恰有 个, 个顶点上的带标号树也恰有 棵。
大学实际应用与典型例题
树是各种层级结构与路由结构的支柱,无处不在:文件系统、生物学中的系统发生树、机器学习中的决策树,以及计算机科学中的二叉搜索树和霍夫曼编码。最直接的工程用途之一是网络设计:当一家公司需要以最低成本用电缆或无线链路连接一组办公室、传感器或计算机时,最便宜的连通布局总是一棵生成树——用环连接它们会在冗余链路上浪费金钱。Kruskal算法用一条简单的贪心规则找到这棵最便宜的树:按成本对所有可能的链路排序,依次加入每条链路,除非它会闭合成一个环。
例题: 用Kruskal算法实现最低成本布线
需要用光缆把5座中继塔连接起来,使总长度最小。可能的链路及其长度(公里)如下:、、、、、、、。求连接全部5座塔所需的最小总光缆长度。
解答
将 条候选链路按长度从小到大排序:、、、、、、、。Kruskal算法遍历这个列表一次,只要该链路的两个端点尚未被之前选中的链路连通(否则会产生环),就加入它。
加入 (塔 原本分开,现已相连)。加入 (把塔 并入 组,现为 )。加入 (塔 原本分开,现已连成 )。
跳过 : 和 已经都在组 中,加入此链路会形成环。加入 :把剩下的两组 和 合并为包含全部 座塔的一组。
此时已加入 条链路,恰好等于 个顶点的树所需的 条边,算法于是停止(之后任何链路都只会产生环)。最小总光缆长度为 公里。
例题: 统计可能的骨干网拓扑数量
某电信公司计划用一个无环(树形)骨干网络连接 个可区分的中继站,目前对哪些站点相连尚无限制。结构上不同的带标号树拓扑共有多少种可能?
解答
由Cayley公式, 个顶点上带标号树的个数为 。此处 ,故数量为 。
计算得 。因此连接这 个站点、结构互不相同的树形拓扑共有 种。
对网络规划者而言,这个巨大的设计空间正是没有人会手动枚举全部 种可能的原因:取而代之的是,像Kruskal算法这样的优化过程(定理1中关于边数的性质保证了任何候选方案恰好有 条链路)可以直接从链路成本中选出唯一最便宜的树,而完全无需列出其余方案。
一棵树有 个顶点,它有多少条边?
根据Cayley公式, 个顶点上不同的带标号树共有多少棵?
某电缆公司必须用尽可能便宜的网络(没有冗余链路)连接 个办公室。对排序后的链路成本使用Kruskal算法,最终网络会有多少条链路?
某图有 个顶点和 条边,但分裂成 个独立的连通部分(其中一个含有一个环)。尽管其边数与 相符,这个图不满足定理1中的哪个刻画?
参考文献
- Reinhard Diestel (2017). Graph Theory
- 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
- Aaron Schild (2017). An almost-linear time algorithm for uniform random spanning tree generation · arXiv:1711.06455 [预印本,未经同行评审]