【大二病也要学离散!】第七章 树
这章对于一个学过OI的都是熟的不能再熟的玩意.
但是部分定义不一样.
7.1 无向树及其性质
连通无回路的无向图称为无向树,简称为树.每个连通分支都是树的无向图称为森林.平凡图称作平凡树.悬挂顶点称作树叶,度数大于等于2的顶点称作分支点.
设\(G=\langle V,E \rangle\)是\(n\)阶\(m\)条边的无向图,则下面命题等价.
(1) \(G\)是树
(2) \(G\)中任意两个顶点之间存在唯一的路径.
(3) \(G\)中无回路且\(m=n-1\).
(4) \(G\)是连通的且\(m=n-1\).
(5) \(G\)是连通的且任何边均为桥.
(6) \(G\)中没有回路,但在任意两个顶点之间加一条新边后所得的图中有唯一的一个含新边的圈.
它们的证明很有意思,采用了本书中曾见过的循环证明.
定理:设\(T\)是\(n\)阶非平凡的无向树,则\(T\)中至少有两片树叶.
画非同构的无向树:通常枚举叶子数量.
只有一个分支点,且分支点的度数为\(n-1\)的\(n\)阶无向树维星形图,称其唯一的分支点为星心.
7.2 生成树
如果无向图\(G\)的生成子图是树,那么称\(T\)是\(G\)的生成树.设\(T\)是\(G\)的生成树,\(G\)中且在\(T\)中的边称作\(T\)的树枝,不在\(T\)中的边称作\(T\)的弦.称\(T\)的所有弦的导出子图为\(T\)的余树,记作\(\overline{T}.\)
定理:无向图\(G\)有生成树 \(\Leftrightarrow\) \(G\)为连通图.
推论:设\(G\)为\(n\)阶\(m\)条,则\(m \ge n-1.\)
定理:设\(T\)为无向图\(G\)中的一棵生成树,\(e\)为\(T\)的任意一条弦,则\(T \cup e\)中存在\(G\)中只含一条弦\(e\)、其余边均为树枝的圈,并且不同的弦对应的圈也不同.
导出以下定义:
设\(T\)是\(n\)阶\(m\)条边的无向连通图\(G\)的一棵生成树,设\(e_1',e_2',\ldots,e_{m-n+1}'\)为\(T\)的弦,\(C_r,r=1,2,\ldots,m-n+1\)为\(T\)添加弦\(e_r'\)产生的\(G\)中由弦\(e_r'\)和树枝构成的圈,称其为\(G\)的对应弦\(e_r'\)的基本回路或基本圈.称\(\{C_1,C_2,\ldots,C_{m-n+1}\}\)为\(G\)对应\(T\)的基本回路系统,称\(m-n+1\)为\(G\)的圈秩,记作\(\xi(G).\)
注意:无向连通图的\(G\)的圈秩与生成树的选取无关,但不同生成树对应的基本回路系统可能不同.
可以证明:任意简单回路都可以表示成基本回路的环和.
我们称无向图中的圈或若干个边不重的圈的并,称作广义回路.规定\(\emptyset\)为广义回路,圈和简单回路都是广义回路.记无向图\(G\)的广义回路的全体为\(C^*.\)两个广义回路的环和仍是广义回路.定义数乘运算为\(0 \cdot C = \emptyset,1 \cdot C = C.\)则\(C^*\)构成数域\(F\)上的\(m-n+1\)线性空间,称作广义回路空间.任意基本回路系统均是它的一个基.
设计电网络不需要考虑电网络中的所有圈,而只需要考虑任一生成树的基本回路.
定理:设\(T\)是连通图\(G\)的一棵生成树,\(e\)为\(T\)的树枝,则\(G\)中存在只含树枝\(e\),其他边都是弦的割集.
构造性证明,构造的这个可以记一下.
于是我们可以导出以下定义:
设\(T\)是\(n\)阶\(m\)条边的无向连通图\(G\)的一棵生成树,设\(e_1,e_2,\ldots,e_{m-n+1}.\)为\(T\)的树枝,\(S_i,i=1,2,\ldots,{n-1}\)是由树枝\(e_i\)和弦构成的割集,则称\(S_i\)为\(G\)的对应树枝\(e_i\)的基本割集.称\(\{S_1,S_2,S_{n-1}\}\)为\(G\)对应\(T\)的基本割集系统,称\(n-1\)为\(G\)的割集秩,记作\(\eta(G).\)
注意:连通图\(G\)的\(\eta(G)\)不因生成树的不同而改变,但不同生成树对应的基本割集系统可能改变.
设无向图\(G=\langle V,E \rangle,\emptyset \not = V_1 \subset V,\)记\(V_1\)关于\(V\)的补集为\(\overline{V_1},\)称\((V_1,\overline{V_1})=\{(u,v) | u \in V_1,v \in \overline{V_1}\}\)为广义割集.规定\(\emptyset\)为广义割集.显然,割集一定是广义割集,但是广义割集不一定是割集.任意广义割集都可以表示成基本割集的对称差.记无向图\(G\)的广义割集的全体为\(S*,\)它关于对称差运算和数乘运算构成数域\(F\)上的\(n-1\)维线性空间,称作广义割集空间.任意基本割集系统均是它的一个基.
对于无向连通带权图\(G=\langle V,E,W \rangle,T\)是\(G\)的一棵生成树,其各边权之和称为\(T\)的权,记作\(W(T).\)它的所有生成树中权最小的生成树称为\(G\)的最小生成树.
求最小生成树:\(\mathrm{Kruscal}\)算法,又称作避圈法.
一个最小生成树的应用:数据分析中的单链聚类
给定一组离散数据\(D=\{d_1,d_2,\ldots,d_n\}\)和一个相似度函数\(d(i,j).\)给定正整数\(k\),求它的一个k聚类,即一个\(k\)划分\(\pi=\{C_1,C_2,\ldots,C_k\},\)规定\(D(C_s,C_t)=\mathrm{min}\{d(i,j) | a_i \in C_s,a_j \in C_t\}.D(\pi)=\mathrm{min}\{D(C_s,C_t) | C_s,C_t \in pi,1 \le s < t \le k\}.\)求使\(D(\pi)\)达到最大值的\(\pi\)?
我们采用\(\mathrm{Kruscal}\)算法处理这个问题.把边按照权进行排序,逐渐加到原来的连通分支中,当\(k\)个连通分支时停止,此时最小间隔达到最大.
7.3 根树及其应用
若有向图的基图为无向树,则称这个有向图为有向树.一个顶点的入度为0,其余顶点的入度为1的有向树称为根树.入度为0的顶点称为树根.入度为1、出度为0的顶点称作树叶,入度为1、出度不为0的顶点称为内点,根点和内点统称为分支点.从树根到任意顶点\(v\)的路径的长度称作\(v\)的层数,所有顶点的最大层数称为树高.
常将根树看做家族树
定义:设\(T\)为一棵非平凡的根树,\(\forall v_i,v_j \in V(T),\)若\(v_i \rightarrow v_j,\)称\(v_i\)为\(v_j\)的祖先,\(v_j\)为\(v_i\)的后代.若它们邻接,则称为父亲/儿子,若\(v_j,v_k\)的父亲相同,称它们为兄弟.
定义:若\(T\)为根树,且\(T\)中层数相同的顶点都标定次序,称其为有序树.
若\(T\)的每个分支点至多有\(r\)个儿子,称其为\(r\)叉树;若是有序树,称其为\(r\)叉有序树.
若\(T\)的每个分支点都恰好有\(r\)个儿子,称其为\(r\)叉正则树;若是有序树,称其为\(r\)叉正则有序树.
若\(T\)是\(r\)叉正则树,且每个树叶的层数都为书稿,称其为\(r\)叉完全正则树;若是有序树,称其为\(r\)叉完全正则有序树.
根子树、左子树、右子树的概念
定义:设\(T\)有\(t\)片树叶\(v_1,v_2,\ldots,v_t,\)它们的点权为别为\(w_1,w_2,\ldots,w_t,\)令\(W(T)=\sum\limits_{i=1}^{t}w_il(v_i),l(v_i)\)为\(v_i\)的层数,给定\(t\)和\(w_1,w_2,\ldots,w_t,\)的二叉树中,权最小的二叉树称为最优二叉树.
求最优二叉树:霍夫曼(\(\mathrm{Huffman}\))算法
把全部的叶子写在一起,取其中权值最小的两个,连起来,它们的父亲的权值是它们权值之和,如此往复.
在通信中,常用二进制编码表示符号,有等长码表示法.当符号的频率相差悬殊时,为了节省二进制数位,提高效率,采用非等长的编码.
设\(\alpha_1\alpha_2\ldots \alpha_n\)是长为\(n\)的符号串,称其子串\(\alpha_1,\alpha_1\alpha_2,\ldots,\alpha_1\alpha_2\ldots \alpha_n\)为该符号串的前缀.设\(A=\{\beta_1,\beta_2,\ldots,\beta_m\}\)是一个符号串集合,若\(A\)的任意两个符号串都互不为前缀,称\(A\)为前缀码,由\(0,1\)符号串组成的前缀码为二元前缀码.
可以用二叉树产生二元前缀码.设\(T\)是具有\(n\)片树叶的二叉树,则\(T\)的每个分支点有\(1\)或\(2\)个儿子.设\(v\)为\(T\)的分支点,若\(v\)有两个儿子,在由\(v\)引出的两条边上,左边的标\(0\),右边的标\(1\).若\(v\)只有一个儿子,由它引出的边可以标\(0\),也可以标\(1\).设\(v_i\)是\(T\)的任意一片树叶,从树根到\(v_i\)的通路上各边的标号(\(0\)或\(1\))按照通路上边的顺序组成的符号串放在\(v_i\)处,\(t\)片树叶的\(t\)个符号串组成一个二元码.由此方法可知,树叶\(v_i\)处的符号串的前缀均在从树根到\(v_i\)的通路上的顶点(不含\(v_i\))处达到,因而所得符号串集合必为前缀码.若\(T\)是二叉正则树,则由\(T\)产生的前缀码是唯一的.或者说,由一棵二叉正则树可以产生唯一的一个二元前缀码.
给定每个\(v_i\)出现的频率\(c_i\),要求\(m\)个符号使用的二进制位数\(m\sum\limits_{i=1}^{t}c_il(v_i).\)我们可以用最优二叉树来产生它的前缀码,如此产生的前缀码称为最优前缀码,最优前缀码传输的二进制位数最少.
例题可以看书,比如给定百分比频率就假设\(100\)个符号,最后再按比例来.
注意:最佳前缀码并不唯一,因为每一步选择两个最小的权的选法可能不唯一,同时两个权对应的顶点所放的左右位置也可以不同.
周游/行遍/遍历都是一个意思.
前序:根左右
中序:左根右
后序:左右根
利用二叉正则有序树表示四则运算算式:运算的树放在树叶,运算符放在分支点,被除数和被减数放在左边.
前缀符号法/前序遍历/波兰符号法:从右到左每个运算符对它后面紧邻的两个数进行运算.
后缀符号法/后序遍历/逆波兰符号法:从左到右每个运算符对它前面紧邻的两个数进行运算.
下面是一些易错的题目:
1.给定一个无向图,请求出其所有非同构的生成树.
一般做法:先不管原图,按照顶点数写出所有可能的度数列和非同构树,然后再按照最大度数等对写出来的进行删减,最后去原图中找.
2.画出给定无向树中派生的所有非同构根树.
注意:对称的顶点作为树根的时候是同构的.
3.设\(T\)是\(6\)阶无向简单图\(G\)的一棵生成树,讨论以下问题.
(1)当\(G\)的边数\(m\)为\(9\)时,\(T\)的余树\(\overline{T}\)还有可能是\(G\)的生成树吗?
(2)当\(G\)的边数\(m\)为\(12\)时,\(T\)的余树\(\overline{T}\)还有可能是\(G\)的生成树吗?
(3)当\(G\)的边数\(m\)为\(12\)时,\(T\)的余树\(\overline{T}\)有哪几种情况?
思路:易知(1)(2)不可能,边数都不对.
给出(3)的答案作为结论:它可能是原图的生成树,也可能是圈,也可能不连通.
4.小结论:高为\(h\)的\(r\)叉正则树至多有\(r^h\)片树叶,至少有\((r-1)(h-1)\)片树叶.
5.小结论:\(G\)为\(n\)阶\(m\)条边的无向简单连通图,若\(m \ge n,\)则\(G\)中必含圈.
6.设\(d_1,d_2,\ldots,d_n\)是\(n\)个正整数,\(\sum\limits_{i=1}^{n}d_i=2n-2,n \ge 2.\)证明:存在无向树\(T\)以\((d_1,d_2,\ldots,d_n)\)为度数列.
思路:这种题主要考虑构造性证明与归纳法.
解答:首先阐述一个命题,就是\(n \ge 3\)时,度数列中至少有一个1,并且至少有一个度数大于等于2的顶点.
下面对\(n\)进行归纳证明,易知当\(n=2\)时原题成立,于是设\(n=k\)时原命题成立,下面证明\(n=k+1\)时原命题成立.
考虑\((d_1,d_2,\ldots,d_k,d_{k+1}),\)不妨设\(d_k \ge 2,d_{k+1}=1,\)由归纳假设知,\((d_1,d_2,\ldots,d_k-1)\)可以构成一棵无向树,于是增加一个顶点,连一条边,则新得到的也是树(由于它连通且没有回路).
7.画出所有\(7\)阶非同构的无向树.
思路:我们做这种题的一般步骤为:先计算总度数,然后列出可能的度数列,最后画图.画图有两个小技巧,第一是度数为\(2\)的顶点必然为分支点,我们此处将其称为路标,而路标既可以是两个大根之间的连接口也可以是大根和树叶之间的直接(间接)连接口.第二就是,大根也可能作为大根的分支.
8.小结论:\(n\)阶无向树\(T\)的\(\Delta(T)\)至少为\(2\),至多为\(n-1\).若\(\Delta(T)=2,\)则最长的路径长为\(n-1\).\(n\)阶无向树不是欧拉图,也不是哈密顿图.
平凡图是树,也是欧拉图,也是哈密顿图.当\(\Delta(T)=2\)时,无向树为半欧拉图和半哈密顿图.
9.证明:任何无向树都是二部图.
思路:回顾之前的性质,二部图的充要条件是无奇圈,而无向树压根就没有圈.
10.设\(e\)为无向连通图\(G\)中的一条边,若\(e\)在\(G\)的任何生成树中,则\(e\)应该有什么性质?
证明:\(e\)应为\(G\)的桥.若\(e\)是\(G\)的桥,若存在生成树\(T\)不包含\(e\),则\(T\)不连通,与树的连通性矛盾.若\(e\)不是\(G\)的桥,则\(G-e\)包含了\(G\)的全部顶点且连通,因此\(G-e\)中存在生成树.综上,\(e\)是\(G\)的桥.
11.设\(e\)为无向连通图\(G\)的一条边.若\(e\)不在\(G\)的任何生成树中,则\(e\)应该有什么性质?
证明:\(e\)应为\(G\)的环.若\(e\)是\(G\)的环,若存在生成树\(T\)包含\(e\),则\(T\)存在回路,与其无回路的性质矛盾.若\(e\)不是\(G\)的环,则必然存在某棵生成树包含\(T\).综上,\(e\)是\(G\)中的环.
12.设\(e\)为无向连通图\(G\)中的一条边,\(e\)既不是环,也不是桥.证明:存在含\(e\)为树枝的\(G\)的生成树,又存在以\(e\)为弦的\(G\)的生成树.
下面我们介绍一种求生成树的方法:破圈法,即有圈就在圈中删掉一条边的方法.注意:它无法用来求最小生成树.
我们的证明与它有关.
证明:由于\(e\)不是桥,因此\(e\)在某个圈中,又由于\(e\)不是环,因此这个圈的长度大于等于2.
在用破圈法生成生成树时,无论\(e\)在哪个圈中出现,删除一条边时都不删掉\(e,\)这样得到的生成树含\(e\)作为树枝.
在用破圈法生成生成树时,找到一个含\(e\)的圈,将\(e\)从其中删除,于是得到了一个\(e\)为弦的生成树.
13.小结论:设\(T\)为无向图\(G\)的生成树,\(\overline{T}\)为\(T\)的余树,则\(\overline{T}\)中不含\(G\)的边割集.
小结论:设\(S\)为无向连通图\(G\)的一个边割集,则\(G-S\)中不含\(G\)的生成树.
14.求\(K_n\)的非同构生成树数量的步骤与求\(n\)阶非同构生成树数量相同.
15.设\(T\)为\(k+1\)阶无向树,\(k \ge 1.G\)是无向简单图,已知\(\delta(G) \ge k,\)证明:\(G\)中存在与\(T\)同构的子树.
思路:这种题我们还是用归纳法做,结合一点构造性证明.
证明:不妨设\(G\)为连通图,否则对其连通分支进行讨论.
当\(k=1\)时,易知结论成立.
设\(k=r\)时,结论成立,下面证明\(k=r+1\)时结论成立.由已知结论知无向树\(T\)必有两片及以上的叶子,设其中一片为\(v_0\),\(T-v_0\)在\(G\)中对应的同构子图为\(G',\)设与\(v_0\)相邻的\(v_1\)对应的顶点为\(u_1\),由于\(d(u_1) \ge r+1,d(v_1) \le r,\)因此在\(G\)中必能找到一个顶点\(u_0\)与\(v_0\)对应,则\(G'+(u_0,u_1) \cong T.\)证毕.
16.小结论:已知\(n\)阶\(m\)条树是\(k\)棵树组成的森林,则\(m=n-k\).
17.设\(T\)为非平凡的无向树,\(\Delta(T) \ge k,\)证明:\(T\)至少有\(k\)片树叶.
思路:这种题我们一般都考虑用度数来做.
证明:设有\(s\)片树叶,则\(2(n-s-1)+k+s \le 2(n-1).\)得\(s \ge k.\)
18.设\(G\)为\(n(n \ge 5)\)阶简单图,证明:\(G\)或\(\overline{G}\)中必含圈.
思路:看到必含圈我们就想起那个结论.
证明:有\(2*(n-1)<\frac{(n-1)n}{2}.\)
19.设\(C\)为无向图\(G\)中的一个圈,\(e_1,e_2, \in E(C),\)证明:\(G\)中存在含边\(e_1,e_2\)的割集.
思路:这种题一般是考虑生成树.
证明:不妨设\(G\)为连通图,否则可以对某个连通分支进行讨论.
对于\(G-e_1,\)考虑使用破圈法时,总不删除\(e_2\),则最后得到一棵只含\(e_2\)不含\(e_1\)的生成树,此时\(e_1,e_2\)都属于\(e_2\)对应的基本割集.
20.设\(T_1,T_2\)是无向图\(T\)的子图,并且都是树,又已知\(E(T_1) \cap E(T_2) \not = \emptyset,\)证明:导出子图\(G[E(T_1) \cap E(T_2)]\)也是树.
思路:要证明某个图是树,很常见的思路就是证明它是连通无回路的.
证明:由于\(T_1,T_2\)是树,因此\(T_3\)中无回路,下面只需证明它是连通的.\(\forall u,v \in T_3,\)由于\(u,v \in T_1,\)因此在\(T_1\)中存在一条路径\(\Gamma_1\),同理在\(T_2\)中存在一条路径\(\Gamma_2,\)又因为在无向树中路径有且只有一条,因此\(\Gamma_1=\Gamma_2.\)于是有连通性成立.
21.设\(T_1,T_2\)是无向连通图\(G\)的两棵生成树,已知\(e_1\)是\(T_1\)的树枝又是\(T_2\)的弦,证明:存在边\(e_2\)既是\(T_1\)的弦又是\(T_2\)的树枝,使得\((T_1-e_1) \cup \{e_2\}\)和\((T_2 - e_2) \cup \{e_1\}\)都是\(G\)的生成树.
思路:这个题目我看了有点久,它利用了很多上面我们讲到的性质.
证明:由于\(e_1\)是\(T_1\)的树枝,因此\(e_1\)不是环(因为环不存在于任何生成树中),同时设\(e_1\)对应的\(T_2\)的基本回路为\(C_1\),有\(|C_1| \ge 2.\)由于\(e_1\)是\(T_2\)的弦,因此\(e_1\)不是桥(因为桥包含于任何生成树中).同时设\(e_1\)对应的基本割集为\(S_1,\)有\(|S_1| \ge 2.\)考虑\(C_1\)中\(T_2\)的树枝,若它们都不在\(S_1\)中,则\(G-S_1\)中\(e_1\)的两个顶点之间有通路,因此与割集矛盾.于是,存在\(e_2\)既是\(T_1\)的弦又是\(T_2\)的树枝.
综上所述,由于\(e_2 \in S_1,\)由割集的定义,\((T_1-e_1) \cup \{e_2\}\)连通且无回路,为生成树;且由于\(e_2 \in C_1,(T_2 - e_2) \cup \{e_1\}\)连通且无回路,为生成树.(最后这一段不好理解)
22.设\(T\)是有\(t\)片树叶的二叉正则数,证明:\(T\)有\(2t-1\)个顶点.
思路:这种题一般与度数、边等性质有关.
证明:我们有\(2(n-t)=n-1,\)即\(n=2t-1.\)
下学期,也请各位继续关注:
《System beats!》
《大二病也要学离散!》
《数算の旅》
《某信息学的概率统计》
还有——
《我的算法竞赛不可能这么可爱》
本期到此结束!


浙公网安备 33010602011771号