第十一部分 树

目录

主要内容

例1

例2

避圈法(Kruskal)

例3

求最优树的算法—— Huffman算法

例4

存放规则

波兰符号法

逆波兰符号法


主要内容
无向树及其性质
生成树
根树及其应用

定义11.1

(1) 无向树 —— 连通无回路的无向图
(2) 平凡树 —— 平凡图
(3) 森林 —— 至少由两个连通分支(每个都是树)组成
(4) 树叶 ——1 度顶点
(5) 分支点 —— 度数 2 的顶点
定理 11.1 G =< V , E > n m 条边的无向图,则下面各命题
是等价的:
(1) G 是树
(2) G 中任意两个顶点之间存在唯一的路径
(3) G 中无回路且 m = n 1
(4) G 是连通的且 m = n 1
(5) G 是连通的且 G 中任何边均为桥
(6) G 中没有回路,但在任何两个不同的顶点之间加一条新 边,在所得图中得到惟一的一个含新边的圈

定理11.2 Tn阶非平凡的无向树,则T 中至少有两片树叶

1

已知无向树T中有13度顶点,22度顶点,其余顶点全是树叶,试求树叶数

解本题用树的性质 m = n 1以及 握手定理,握手定理及2m=总度数,m为边,n为结点,详细可以看第九部分图论的握手定理内容
设有 x 片树叶
于是 n = 1+2+ x = 3+x 总结点数
2 m = 2( n 1) = 2 × (2+ x ) = 1 × 3+2 × 2+一个三度顶点,两个二度顶点,x片树叶,总度数
解出 x = 3
T 3 片树叶
2

已知无向树T5片树叶,2度与3度顶点各1个,其余顶点的度数均为4,求T的阶数n

T 的阶数为 n , 则边数为 n 1 4 度顶点的个数为 n 7
由握手定理得
2 m = 2( n 1) = 5 × 1+2 × 1+3 × 1+4( n 7)
解出 n = 8
4 度顶点为 1
定义 11.2 G 为无向图
(1) G —— T G 的子图并且是树
(2) G 生成树 —— T G 的生成子图并且是树
(3) 生成树 T 树枝 —— T 中的边
(4) 生成树 T —— 不在 T 中的边
(5) 生成树 T 余树 T —— 全体弦组成的集合的导出子图

定理11.3 无向图G具有生成树当且仅当G连通

推论1 Gnm条边的无向连通图,则mn1

推论2 \bar{T}的边数为mn+1

推论3 \bar{T}G 的生成树 T 的余树, C G 中任意一个圈,则 \bar{T}一定有公共边
定义 11.3  T G =< V , E , W > 的生成树
(1) W ( T )—— T 各边权之和
(2) 最小生成树 —— G 的所有生成树中权最小的 

求最小生成树的一个算法 

避圈法Kruskal
G =< V , E , W > ,将 G 中非环边按权从小 到大排序: e 1 , e 2 , …, e m
(1) e 1 T
(2) e 2 ,若 e 2 e 1 不构成回路,取 e 2 也在 T 中,否则弃 e 2
(3) 再查 e 3 ,…, 直到得到生成树为止
例3

求图的一棵最小生成树

第十一部分 树_第1张图片

避圈法即遇到圈则将其中遇到的最大边给丢弃

第十一部分 树_第2张图片

所求最小生成树如 图所示
W ( T )=38

定义11.4 T是有向树(基图为无向树)

(1) T 根树 —— T 中一个顶点入度为 0 ,其余的入度均为 1
(2) 树根 —— 入度为 0 的顶点
(3) 树叶 —— 入度为 1 ,出度为 0 的顶点
(4) 内点 —— 入度为 1 ,出度不为 0 的顶点
(5) 分支点 —— 树根与内点的总称
(6) 顶点 v 层数 —— 从树根到 v 的通路长度
(7) 树高 —— T 中层数最大顶点的层数
(8) 平凡根树 —— 平凡图

根树的画法——树根放上方,省去所有有向边上的箭头

 第十一部分 树_第3张图片

定义 11.5  T 为非平凡根树
(1) 祖先与后代
(2) 父亲与儿子
(3) 兄弟
定义 11.6  v 为根树 T 中任意一顶点,称 v 及其后代的导出子 图为以 v 为根的 根子树 
(1)T为有序根树——同层上顶点标定次序的根树
(2)分类
①r叉树——每个分支点至多有r个儿子
②r叉有序树——r树是有序的
③r叉正则树——每个分支点恰有r个儿子
④r叉正则有序树
⑤r叉完全正则树——树叶层数相同的r叉正则树
⑥r叉完全正则有序树
定义 11.7  设二 叉树 T t 片树叶 v 1 , v 2 , …, v t ,权分别为 w 1 , w 2 , …, w t ,称 T 的权,其中 l ( v i ) v i 的层数, 在所有有 t 片树叶,带权 w 1 , w 2 , …, w t 的二 叉树中,权最小的二 叉树称为 最优二 叉树
求最优树的算法—— Huffman算法
给定实数 w 1 , w 2 , …, w t ,且 w 1 w 2 w
(1) 连接权为 w 1 , w 2 的两片树叶,得一个分支点,其权为 w 1 + w 2
(2) w 1 + w 2 , w 3 , …, w t 中选出两个最小的权,连接它们对应的 顶点 ( 不一定是树叶 ) ,得新分支点及所带的权
(3) 重复 (2) ,直到形成 t 1 个分支点, t 片树叶为止
例4

求带权为1, 1, 2, 3, 4, 5的最优树

第十一部分 树_第4张图片

W(T)=1×4+1×4+2×3+3×2+4×2+5×2=4+4+6+6+8+10=38

最下方的数×层数的和为总权

定义 11.8
α 1 , α 2 , …, α n -1 , α n 是长度为 n 的符号串
(1) 前缀 —— α 1 , α 1 α 2 , …, α 1 α 2 α n 1
(2) 前缀码 ——{ β 1 , β 2 , …, β m } 中任何两个元素互不为前缀
(3) 二元前缀码 —— β i ( i =1, 2, …, m ) 中只出现两个符号,如 0 1
定理 11.4  一棵 叉树产生一个二元前缀码
推论 一棵正则 叉树产生唯一的前缀码(按左子树标 0 右子树标 1
图所示二叉树产生的前缀码为
{ 00, 10, 11, 011, 0100, 0101 }

 第十一部分 树_第5张图片

行遍或周游根树T——T的每个顶点访问且仅访问一次

对二 叉有序正则树的周游方式:
中序行遍法 —— 次序为:左子树、根、右子树
前序行遍法 —— 次序为:根、左子树、右子树
后序行遍法 —— 次序为:左子树、右子树、根
对图所示根树按中序、前序、 后序行遍法访问结果分别为:

 第十一部分 树_第6张图片

中序b a f d g   c e
前序a b c d f g   e
后序b f g d   e c   a
存放规则
最高层次运算放在树根
后依次将运算符放在根 子树的根上
数放在树叶上
规定:被除数、被减数 放在左子树树叶上

第十一部分 树_第7张图片

波兰符号法
按前序行遍法访问存放算式的 2 叉有序正则树,其结果不加 括号,规定每个运算符号与其后面紧邻两个数进行运算,运 算结果正确 . 称此算法为波兰符号法或前缀符号法,   对上图的 访问结果为
                                        ÷ ∗ + b + c d a − ∗ e f + g h i j
逆波兰符号法
按后序行遍法访问,规定每个运算符与前面紧邻两数运算, 称为逆波兰符号法或后缀符号法 对上图的访问结果为
                                        b c d + + a e f g h + i j ∗ ∗ − ÷

你可能感兴趣的:(离散数学,算法,离散数学,学习)