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,这个点是连通的,而点和这些点是连通的。