Skip to content

10 Staying Connected. Trees

Minimally Connected Graphs

Theorem 10.1. 是一个个顶点的简单连通图,那么下面两者是等价的。
(1) 是最小连通的,也就是说,去掉任意一条边之后的图不再是连通图。
(2) 不包含环。
Proof 假设是最小连通的,但是包含环。移除环的一条边得到图上任意一对顶点,由于是连通的,那么有一条路径连接,如果不包含,那么是连通的,如果包含,那么把换成相对的一段弧,那么还是连通的,也就是是连通图,和最小连通的概念矛盾。
证明其逆否命题成立。假设不是最小连通图,那么存在一条边,移除之后的仍然是连通的。也就是说存在一条路径能够从,结合去掉的边,那么原图存在一个环。

Definition 10.2. 一个简单连通图满足Theorem 10.1的话被称之为树(tree)。

Corollary 10.3. 一个连通图是树等价于每一个点对都有且只有一条路径将其相连。
Proof. 每一个点对都有且只有一条路径将其相连,那么是最小连通的。假设移除一条边之后还能得到一个连通图,那么对应于原图,有两条路径连接
反过来,如果是树,但是有两条路径连接,一条是,另一条是,那么的对称差(symmetric difference)构成了环,假设不成立。

Theorem 10.4. 所有个点的树有条边。相反,有条边个顶点的连通图是树。

Lemma 10.5. 是一棵个顶点的树,那么至少有两个顶点的度是1。
Proof.中最长的路径,那么的终点必然是叶子节点。反证法。若终点不是叶子节点,那么可以从扩展出去,得到更长的路径。

Proof. (Theorem 10.4) 归纳法。时,只有一个点,没有边,显然成立。假设对个顶点的树也成立。考虑时的情况。找个的叶子节点,删除和其唯一的边得到新的树是连通的且无环)。新的树个顶点,那么有条边,所以条边。

和自然界一样,树的集合被称之为森林(forest)。森林是每个连通分量都是树的图。

Proposition 10.6. 森林个顶点和个连通分量,那么有条边。
Proof. 对于每个连通分量而言,顶点都比边多一个,总共多个。

个顶点的树有多少种呢?和上一章一样,有两种方式解释。一种是不区分顶点,那么下图两棵树是一样的;一种是区分顶点的,这种情况是对集合组成的顶点计算树的数目。在后者的情况下,下图两棵树是不一样的。

集合上有一种树,集合上也是一种树,集合上有三种,集合上有16种。通过这几个数字,可以归纳出对于集合而言,有种树。列举的数字有点少,这个看似优雅结论是正确的吗?令人敬畏的“小数定律(Law of Small Numbers)”说的是如果知道一个序列的很少的一些项,总能总结出一个漂亮的公式,但是往往是错误的。然而,这次是个例外。

Theorem 10.7 凯莱公式(Cayley's formula). 对于任意正整数,集合上所有树的个数是
Proof 对于上的每棵树取两个点,定义为起点和终点,两者可以是同一个,当然也可以不是。这种树称之为双根树(doubly rooted trees)。要证明有个这种树。
方法是找到一个从从的所有的函数到上的双根树的双射。
是从的函数。作用下的环的元素集合,也就是说存在某个正整数。令,将依次写下组成个顶点的线,且令分别为起点和终点。
如果,那么将点连接到点上。通过这些操作,得到了一棵树。通过起点-终点这条线连接所有的点,同时无环,因为环对应那条线。同时,这棵树是双根树,因为标记了起点和终点。
反方向。用起点-终点这条路径来构建环对应的。不在路径上的点,和上述反向操作即可。

Example 10.8.,有如下图所示:

函数制造了三个环,所以,那么,那么起点-终点线上的点分别是。由于,所以把点2连接到点4上,点4连接到点5上。最终构成了下图:

和双根树类似的,有根树(rooted trees)可以定义为有一个顶点被称之为根的树。集合上的不同有根树的数量是。有根森林(rooted forest)是各个连通分量都是有根树的森林。

Corollary 10.9. 对于所有正整数,集合上不同有根森林的数目是
Proof. 将有根树都连接到点上。这是一个集合上的有根森林到任意一颗树的双射。反向的,将点的相邻点都设为根,然后去掉点和它们相连的边,得到若干个有根树,构成了上的某个有根森林。从Theorem 10.7得到上不同的树的数量是

Minimum-weight Spanning Trees. Kruskal's GreedyAlgorithm

如果是一个连通图,如果树的顶点包含的所有顶点,且边都是的边,那么的生成树(spanning tree)。
任意连通图都至少有一个生成树。如果是树,那么自身就是生成树,如果不是,那么不是最小连通图,可以删除一条边得到连通图,如果还不是树,那么继续这个过程,总能得到一个生成树。
一般地,连通图有很多生成树。Theorem10.7说明完全图个生成树。有时,想知道有多少生成树是很困难的。
生成树有大量的实践应用,特别是对于带权重的边的图这一块。下面是个经典的例子。
一个铁路要连接20个城市,已知每个城市之间的距离,现在要修铁路,连接这些城市且要求总路线长度最短。

Example 10.10. 是简单连通图。令是一个函数。找到生成树使得最小。

是权重(weight function)或成本函数(cost function),的权重或成本,的全程。一般权重写在图的边上。

如果很小,那么可以遍历所有生成树然后找到最小权重生成树。对于稍微大一点的图就不能遍历了,比如,那么有这么多不同的生成树,即使计算机每秒能处理十亿个,那么也需要91年!所以找到一个通用的方法来找到最小权重生成树是十分必要的。
如何能找到这棵树呢?尝试一下贪婪算法(greedy algorithm)。首先选取权重最小的边(如果多条边权重一样,那么任选一条即可)放到中。接着找不在中的最小的边放入中。第三步,依旧如此,不过要小心不要选择构成一个环。
一般地,贪婪算法的第步就是要找到满足如下属性的边: * 边不在中 * 把边添加到中不会形成环 * 的权重是满足上述两条最小的

重复以上步骤直到条边。是连通的,当的边小于的时候,总能找到满足条件的边连接的两个连通分量。在这个过程中,不必是连通的;是无环的图,也就是一个森林,当算法运行到步之后,就会得到一棵树。
贪婪算法会得到一个最小权重生成树吗?答案不是很明显。有的问题贪婪算法是有效的,比如从数据里面找到三个数使得其和最大。但是对于有的问题而言,它不能得到最优解,因为每个步骤的选择会影响后续的选择。比如从下图找到两条顶底不想交的边且权重最小。贪婪算法给出的答案是两边的两条边,权重是11,但是答案明显是中间的两条边,权重是4。这个问题是最小权重匹配(minimum-weight matching),下一章会学习匹配。

回到最小权重生成树这个问题,贪婪算法会得到正确答案。在证明之前,先看下面这个有趣的关于森林的属性。

Lemma 10.11.是同样点集的两个森林,的边比少,那么中存在一条边能够加到中使得森林仍旧是森林。
Proof. 假定不存在这样的边,那么中的所有边的两个顶点都在的同一个连通分量中。所以至少有和一样多的连通分量。但是个顶点个连通分量的森林有条边,的边比多,那么连通分量应该少于

Theorem 10.12. 贪婪算法总是能够找到最小权重生成树。
Proof.是贪婪算法找到的生成树,假设图存在生成树,其权重小于。令的边的权重有的边的权重有
是第一步打败了。这样的肯定存在,因为最终的权重小于,同时,因为贪婪算法第一步肯定是最小的值,因此可以得到以下两个关系 所以
是第步后得到的森林,是边组成的森林,根据Lemma 10.11一定存在一条边可以添加到中而不形成环,又有,所以贪婪算法的第步不会选择。矛盾。所以不存在这样的,那么贪婪算法找到的就是权重最小生成树。

这个算法已发明者命名,被称之为克鲁斯科尔算法(Kruskal's algorithm)。

Graphs and Matrices

有很多种方法将图和矩阵关联在一起。这其中应用最广泛的就是邻接矩阵(adjacency matrix)。

Adjacency Matrices of Graphs

Definition 10.13. 是一个个标记的顶点的无向图,定义的矩阵来表示这个图,其中等于顶点之间的边数。矩阵被称为邻接矩阵。

Example 10.14. 如果一个图如下图所示,那么其邻接矩阵是

是有向图的话,邻接矩阵的表示从的边的数量。所以无向图是对称矩阵,而有向图不必是对称矩阵。

Example 10.15. 有向图如下图所示,那么邻接矩阵是

邻接矩阵也包含大多数图的性质。对于很多场景,使用邻接矩阵更容易解决问题。

Theorem 10.16.是一个标记顶点的图,是其邻接矩阵表示,是一个正整数。从走到用了步的不同走法的个数是
Proof. 递归法。,那么不同的走法的个数就是边的数量,等于。假设的时候成立,现在考虑表示从且长度的不同走法,那么矩阵表示从的不同走法的个数,矩阵本身包含这些信息。那么从用了步的不同走法的个数就是 上式恰好就是乘法的定义。

邻接矩阵提供了一个快速的方式来验证其是否包含某种性质。比如下面这个例子是验证连通性。
Theorem 10.17. 个点的简单图,它的邻接矩阵是,那么是连通图等价于每项都是正数。
Proof. 两个点之间有路径的话,长度最长是。图连通就等价于任意两点,总存在一个正整数使得。又因为 命题成立。

The Number of Spanning Trees of a Graph

图的邻接矩阵能够计算图的生成树的数量。在此之前,先扩展下之前的定义到有向图。如果图是有向图,那么如果的子图同时,并且如果去掉方向得到的生成树,的生成树。

Definition 10.18. 是有向无环图,点分别是,边分别是的关联矩阵(incidence matrix)是矩阵定义如下 * 如果的起点 * 如果的终点 * 其他情况

Theorem 10.19. 是有向无环图,是其关联矩阵。从中任意移除一行,剩余矩阵是,那么的生成树的个数是
Proof. 证明之前说个神奇的事情,不管移除哪一行,保持不变,这并不能显然得到。
不失一般性,假设最后一行被移除了。因为是连通图,那么,所以从中可以取得的子矩阵。现在要证明如果当且仅当对应的列的子图是生成树,否则其值为0。
(a) 假设存在一个点的度是1。那么的第行只有一个值是非零的,它是1或者-1。已这个值展开递归地求。最后会得到。这里蕴含着的生成树等价于的生成树。
(b) 如果不存在这样的点,那么就不是生成树。又因为条边,那么有度为0的点。如果这个点不是,那么有一行全零,那么;如果是,那么的每一列都有一个1和一个-1,这是因为每条边都有起点和终点,而起点和终点不会是,那么的行相加是0,说明是线性相关的,那么
根据柯西-比尔公式(Binet–Cauchy) 前者等于的次数,也就是等于生成树的个数。

Theorem 10.20(Matrix-Tree theorem). 是简单无向图。定义一个的矩阵 其中。那么个生成树。
个顶点,但是的矩阵,没有行和列是属于顶点的。但是矩阵是包含了的信息的,因为知道顶点的度,同时知道它和其他顶点是否连通,那么能够推算得到是否连通。
Proof.映射到有向图,每条无向的边转化成两条不同方向的有向边。
的关联矩阵去掉最后一行的矩阵。接下来证明位置的值是行和第行的乘积。
如果,如果某条边的起点或终点是,就会对乘积贡献1,所以位置的值是中点的度,也就是中点的度的两倍。
如果,某条边起点是终点是或者刚好相反,都会对乘积贡献-1。如果两者相连,那么对应位置的值是-2,否则,是0。
从上述可以得到,那么。注意,的每个生成树都可以对应到个不同的生成树,因为每条边可以选择一个方向,而生成树有条边。
结合Theorem 10.19,证毕。

接着看一个经典的例子,集合上的树的个数。

Example 10.21. 的生成树个数是
Solution. 将除第一行之外的各行都加到第一行 将第一行分别加到其余各行 所以

再来看一个有趣的例子。

Example 10.22. 表示个点的集合,表示个点的集合。将集合的每个点和集合的每个点相连。用表示这个图。求的生成树的个数。
Solution.被称为完全二分图(complete bipartite graph)。内部和内部是没有边的。
关联的矩阵行和后行有点类似。把除第一行外的其他行加到第一行得到 ,然后把这一行加到后 左下角全0,所以

对于Theorem 10.20而言,选择谁作为都是可以的,但是选择不同的点作为会影响计算矩阵行列式的值。下面这个定理会绕开这个问题。

Theorem 10.23 (Matrix-Tree theorem, eigenvalue version).Theorem 10.20类似,是简单图,定义和类似,但是包含第个点,也就是一个的矩阵。令的特征值分别是,那么的生成树的数量是 各行相加等于0,说明其是线性相关的,那么一定有一个特征值是0。的拉普拉斯算子(Laplacian)。

其实没有什么通用的方法计算一个矩阵的特征值。但是针对一些特殊的图,可以利用一些小技巧来求解。比如是一个个点都有条边与之相连的图,那么,其中的邻接矩阵。如果的特征值是,那么的特征值就是

Example 10.24.,那么邻接矩阵的特征值分别是,进而的特征值分别是,所以的生成树个数是
Solution. ,其中是元素都等于1的矩阵。很明显的秩是1,那么其有个特征值都是0,又因为的迹是,迹又等于特征值之和,所以的非零特征值是,所以的特征值分别是

Exercises

(11) 在集合上不连通的简单图最多能有多少条边?
Solution 如果其中一个顶点的度是0,其他个点是完全子图,显然该图是不连通的,有 条边。
下面用递归证明若+1条边那么一定是连通的,则 是非联通图的边的最大值。
时,显然是连通的。假设时也是连通的,考察个点,+1条边。首先,没有点是孤立点,因为剩余个点最多只能有 条边。如果有个点的度是,显然成立了,因为其他点都和这个点相连。那么移除任意一个点,最多只能移除条边,那么剩余的边数至少有+1,这个点是连通的,而点和这些点是连通的。