树与树的性质
树
定义
- 连通且无回路的无向图称为树
- 树中度数为1的称为树叶,度数大于1的称为分枝点或内点
- 如果一个无向图的每一个连通分支都是树,称为森林
等价定义
- 无回路的连通图
- 无回路且c=v-1,其中c是边数,v是点数
- 连通且c=v-1
- 无回路且增加一条新边,得到一个且仅一个回路
- 连通且删去任何一个边后不连通
- 每一对节点之间有一条且仅有一条路
以上证明略
这边复习一下连通图的定义:可以到达每一个点的图
树的定理
-
T是n阶非平凡的无向树,则T至少有两片树叶
证明:
- 假设叶片有x片
- 由等价定义2可知c=v-1
- 握手定理可知 ∑ d ( v i ) = 2 c = 2 ( v − 1 ) \sum d(v_i)=2c=2(v-1) ∑d(vi)=2c=2(v−1)
- 因为树叶是度数为1,内点度数大于1,所以 ∑ d ( v i ) ≥ x + 2 ( v − x ) \sum d(v_i) \geq x+ 2(v-x) ∑d(vi)≥x+2(v−x)
- 解得: x ≥ 2 x \geq 2 x≥2
生成树
定义
- 连通图G的生成子图T是一个树,就称T为生成子树
- G中在生成子树上的边称为树枝,不在生成子树上的边称为弦
- 生成树T的余树:导出子图G[E[G]-E[T]],记作 Y ‾ \overline Y Y
顺便复习一下生成子图和导出子图:
生成子图:若图G的一个子图包含G的所有顶点,称该子图为G的生成子图
导出子图:
G的v1导出子图G[v1]
-
点集为原图G的点集v的子集v1,且不为空
-
边集为G中两个端点都在v1中所组成的边
-
特殊的,G[v]=G
G的E1导出子图G[E1]
-
边集为原图G的边集E的子集E1,且不为空
-
点集为与E1中边关联的点
-
特殊的,若G无孤立点,则G[E]=G
定理
- 连通图至少有一颗生成树
- 一条回路和任何一颗生成树的补至少有一条公共边
- 一个边割集和任何生成树至少有一条公共边
- 复习一下边(点)割集,去掉边(点)会使得图的连通分支数目减少的边(点)集
- 去掉边割集后,连通分支数目增加,其实就是连通图不连通了,所以这条边一定也存在于生成子树中
- **基本回路系统 **:设T为G的生成树,e为T的任意一条弦,则T+e中含一个只有一条弦其余边均为T的树枝的圈. 不同的弦对应的圈也不同. 所有弦对应的回路的结合就叫做基本回路系统
- 基本割集:设T是连通图G的一棵生成树,e为T的树枝,则G
中存在只含树枝e,其余边都是弦的割集,且不同的树枝对
应的割集也不同.所有树枝对应的割集的集合就是基本割集系统
最小生成树
-
问题背景:连通图中G的每一个节点表示一个城市,边的权重代表程璐之间道路的长度,如果修路把这些城市连接起来,怎么修路,总路程最短?
-
定义:在带权的图GG的所有生成树中,树权最小的那课生成树,称作最小生成树。
最小生成树的Kruskal算法
- 选择最小权边c1,边数i赋值为1
- 当i=n-1的时候结束循环,否则转3(树的等价定理2)
- 对已经选定的c1,c2,c3…ci,选取不同于已选边的最小边 c i + 1 , 使 选 出 来 的 图 无 回 路 c_{i+1},使选出来的图无回路 ci+1,使选出来的图无回路
- i ← i + 1 i\leftarrow i+1 i←i+1,转2
这样子就能得到一个最小生成树。
根树
定义
- 有向树:如果一个有向图,在忽略方向后,是一颗树,则称为有向树
- 根树:根树是一颗有向树,如果只有一个节点的入度为0,其他的节点入度都为0,则称这棵树为根树
- 入度为0的结点称为根,出度为0的结点称为叶,出度不为0的结点称为分类点或者内点(包括根)
- 层次:从根结点到该结点的单向通路的长度。
- 在根树中,如果每一个结点的出度小于m,称为m叉树;当m=2的时候,称为二叉树。
- 如果每一个结点出度恰好都等于m或0,则这课称为完全m叉树。若所有的树叶层次相同,则称为正则m叉树
- 根树中,一个结点的通路长度,就是从根到该结点额通路中的边数。分枝点的通路长度称为内部通路长度,树叶的通路长度称为外部通路长度
通常我们只研究二叉树,并将m叉树转为二叉树
性质
- 在完全m叉树中,其树叶数为t,分枝点数为i,则有(m-1)i = t-1
- 若完全二叉树有n个分支点,且内部通路长度总和为I,外部长度总和为E,则有E=I+2n。(其实简单画一个图,就能理解:E可以分为两部分,一部分就是分枝点的通路长度和I,而另外一部分就是从分枝点到叶的长度,因为是完全二叉树,所以剩下一部分就是2n了,所以也可以推广到完全m叉树中:E=I+mn)
最优树
定义
- 带权二叉树,设有一颗二叉树,共有t片树叶,树叶分别带权 w 1 , w 2 , w 3 . . . w i w_1,w_2,w_3...w_i w1,w2,w3...wi,该二叉树称为带权二叉树。且带权为 w i w_i wi的树叶,其通路长度为 L ( w i ) L(w_i) L(wi),把 W ( T ) = ∑ i = 1 i w i L ( w i ) W(T)=\sum^i_{i=1}w_iL(w_i) W(T)=∑i=1iwiL(wi)称为带权二叉树的权
- 所有带权 w 1 , w 2 , w 3 . . . w i w_1,w_2,w_3...w_i w1,w2,w3...wi的二叉树中,W(T)最小的称作最优树,(即只要是树叶带有这些权值的二叉树全部拿来比较,权值最小的就称为二叉树)
最优树的定理
- 设T为带权
w
1
≤
w
2
≤
.
.
.
≤
w
i
w_1\leq w_2 \leq...\leq w_i
w1≤w2≤...≤wi的最优树,则一定有
- 带权为 w 1 , w 2 w_1,w_2 w1,w2(权值最小的两个树叶)的树叶是兄弟节点
- 以带权为 w 1 , w 2 w_1,w_2 w1,w2的树叶的通路长度最长
- 若将T中带权为 w 1 , w 2 w_1,w_2 w1,w2的树叶的父结点改为带权 w 1 + w 2 w_1+w_2 w1+w2的树叶,得到的新树是带权为 w 1 + w 2 , w 3 . . . w i w_1+w_2,w_3...w_i w1+w2,w3...wi最优树
- 最优树一定是完全二叉树,因为如果有一个分枝点只有一片树叶,只要将树叶代替该分枝点,得到的新树一定比原本的树权值更小
构造最优树(Huffman算法)
- 找到最小的两个w值,设为w1,w2,然后对t-1个权值w1+w2,w3…wt求最优树(迭代),并且将得到的最优树的结点 V w 1 + w 2 V_{w_1+w_2} Vw1+w2作为 V w 1 和 V w 2 V_{w_1}和V_{w_2} Vw1和Vw2的父节点,依次类推,直到迭代到根节点。