7-8 根树及其应用
DESCRIPTION
7-8 根树及其应用. 一、根树 1 、有向树 定义 7-8.1 如果一个有向图在不考虑边的方向时是一棵树,那么,该有向图称为 有向树 。. 2 、根树 定义 7-8.2 一棵有向树 , 如果恰有一个结点的入度为 0 ,其余所有结点的入度都为 1, 则称为 根树 ( rooted tree ) 。入度为 0 的结点称为 T 的 树根 。出度为 0 的结点称为 树叶 ,出度不为 0 的结点称为 分支点 或 内点 。. 根树的画法有: 树根在下,向上生长; 树根在上,向下生长。. - PowerPoint PPT PresentationTRANSCRIPT
7-8 根树及其应用
一、根树1 、有向树定义定义 7-8.17-8.1 如果一个有向图在不考虑边的方向时是一棵树,那么,该有向图称为 有向树有向树。
2 、根树 定义定义 7-8.27-8.2 一棵有向树 , 如果恰有一个结点的入度为 0 ,其余所有结点的入度都为 1, 则称为根树根树 (rooted tree) 。入度为 0 的结点称为 T 的树根树根。出度为 0 的结点称为树叶,出度不为 0 的结点称为分支点或内点。
根树的画法有:树根在下,向上生长; 树根在上,向下生长。
习惯把有向树的根画在最上方,边的箭头全指向下,则可以省略全部箭头,树根到一个结点的有向通路的长度称为该点的层数。所有结点的最大层数称为树高。
3 、子树 定义 7-8.3 :任一结点 v 及其后代导出的子图称为根树的子树。
定义定义 7-8.37-8.3 根树包含一个或多个结点 , 这些结点中的某一个称为根 , 其他所有结点被分成有限个子根树。
在有向树中,结点的出现次序是没有意义的。但实际应用中,有时要给出同一级中结点的相对次序,这便导出有序树的概念。4 、有序数:在根树中规定了每一层上结点的次序,称为有序树。
为表示结点间的关系,有时借用家族中的术语。 定义定义 在以 v0 为根的树中, ( 1 ) v1 , v2,… , vk 称为 v0 的 儿子儿子, v0 称为它们的
父亲父亲。 vi , vj 同为一顶点 v 的儿子时,称它们为兄弟兄弟。 ( 2 )顶点间的父子关系的传递闭包称为顶点间的祖祖孙孙关系。即当 vi 为 vi+1 (i = 1, 2,…, l-1) 的父亲时, v1 是vl 的祖先, vl 为 v1 的子孙。 ( 3 )根树 T 自身及以它的树根的子孙为根的根树( T 的子图),均称为 T 的子树子树( subtree ),后者又 称为 T 的真子树真子树。
5 、 m 叉树 定义 7-8.4 :在根树中若每个结点的出度均≤ m ,则称 T 为 m 元树 (m 叉树 ) ,若每个分支点的出度恰好等于 m ,则称 T 为 m 叉完全树,若 T 的所有树叶的层数均相同,则称 T 正则 m 元树。 若 m 元树是有序的,则称 T 为 m 元有序树,若m 元完全树是有序的则称 T 为完全 m 元有序树,若m 元正则树是有序的,则称 T 为 m 元正则有序树。 当 m=2 时,称为二元树,二元有序树的每个结点至多有两个儿子,其序按左右分,分别为左儿子,右儿子,任一分支点最多有两棵子树,称为左子树和右子树。
当 m=2 时,便可得到常用的二叉树、完全二叉树和正则二叉树。不难看出,二叉树中的每个结点 v ,至多有两个子树,分别称为 v 的左子树和右子树。若 v 只有一个子树,则称它为左子树或右子树均可。在二叉树的图形表示中, v 的左子树画在 v 的左下方, v 的右子树画在 v 的右下方。
有很多实际应用,可用二叉树或 m 叉树表示。可以指出,按下面算法,任何一棵有序树均能转成二叉树。其算法是:(1) 除最左边的分枝结点外,删去所有从每一个结点长出的分枝。在同一级中,兄弟结点之间用从左到右的弧连接。(2) 选取直接位于给定结点下面的结点作为左儿子,与给定结点位于同一水平线上且紧靠它的右边结点作为右儿子,如此类推。 上述算法能够推广到有序森林上去。
6.6. 定理定理 7-8.1 7-8.1 设有设有完全 m 叉树,其树叶的数目为 t, 分支数为 i, 则 (m-1)×i=t-1 。
证明思路: m 位选手 , 单淘汰赛 , 每局淘汰 (m-1)位 , 共比赛 i 局 , 最后剩 1 位选手。因此有: (m-1)×i+1=t 例题 1 、 2 给出此定理的应用示例。
7.7. 定义定义 7-8.5 7-8.5 在根树中,一个结点的在根树中,一个结点的通路长度通路长度,,就是从树根到该结点的通路中的边数。分支点的通路就是从树根到该结点的通路中的边数。分支点的通路长度称为长度称为内部通路长度内部通路长度,树叶的通路长度称为,树叶的通路长度称为外部通外部通路长度路长度。。
二、最优树 二叉树的一个重要应用就是最优树问题。给定一组数 w1 , w2 ,…, wn 。令一棵二叉树有
n 个叶结点,并对它们分别指派 w1 , w2 ,…,
wn 作为权,则该二叉树称为加权二叉树。
8.8. 定理定理 7-8.2 7-8.2 设有设有完全二叉树有 n 个分支点,且内部通路长度为总和为 I ,外部通路长度总和为 E ,则 E=I+2n 。 证明思路:对分支点 n 采用数学归纳法。
已知w1 , w2 ,…, wn 为权, T0为加权二叉树,其权
为 w(T0) ,如果对任意加权二叉树 T ,它的权是 w(T) ,
均有 w(T0)≥w(T) ,则称 T0是最优树或Huffman 树。
9.9. 定义定义 7-8.6 7-8.6 在带权在带权二叉树 T 中,若带权为中,若带权为 wwii
树叶,其通路长度为树叶,其通路长度为 L(wL(wii)) , , 把把 t ww(T) = wwii L(wL(wii))
i=1
称为该带权称为该带权二叉树权权,所有带权,所有带权 ww11, , ww22,,……, , wwtt 的的二叉树树中, 树中, ww(T) 最小的那棵树,称为最小的那棵树,称为最优树最优树。。
定理定理 7-8.3 7-8.3 设设 T 为带权为带权 ww11≤ww22≤……≤wwtt 的最优树,则的最优树,则 1) 1) 带权带权 ww11,,ww22 的树叶,的树叶, vvw1w1, , vvw2w2 是兄弟。是兄弟。 2) 2) 以树叶以树叶 vvw1w1, , vvw2w2 为儿子的分支点为儿子的分支点 ,, 其通路长度最长。其通路长度最长。 证明思路:设在带权 ww11, , ww22,,……, , wwtt 的最优树中 , vv 是通路最长的分支点 , vv 的儿子分别带权 wwxx 和 wwyy,故有 L(wL(wxx) ) ≥ L(w L(w11))
L(wL(wyy) ) ≥ L(w L(w22))
若 L(wL(wxx) > L(w) > L(w11)),将 wwxx 与 ww11 对调 , 得到新树 T’, 则 ww(T’)-ww(T)=[ww11L(wL(wxx))+wwxxL(wL(w11))]-[wwxxL(wL(wxx))+ ww11L(wL(w11))] = L(wL(wxx)(w)(w11 - w - wxx))+ L(wL(w11)(w)(wxx - w - w11))
= (w(wxx - w - w11)[L(w)[L(w11) - L(w) - L(wxx) ]<0) ]<0
即 ww(T’)<ww(T), 与是最优树假设矛盾。故 L(wL(wxx))=L(wL(w11)) 。 同理可证 L(wL(wxx))=L(wL(w22)) 。因此 L(wL(wxx))=L(wL(wyy)=L(w)=L(w11))=L(wL(w22)) 。分别将 ww11, , ww22 与 wwxx, , wwyy 对调得一最优树 ,vvw1w1, , vvw2w2 是兄弟。是兄弟。
证明思路:根据假设,有 ww(T)= ww(T’) +w +w11++ ww22
若 T’T’ 不是最优树 , 则必有另一棵带权 ww11+w+w22, , ww33,,……, , wwtt 的最优树 T’’T’’ 。对 T’’T’’ 中带权 ww11+w+w22 的树叶 vw1+w2w1+w2 生成两个儿子,得到新树 T*T* ,则 ww(T*T*)= ww(T’’T’’) +w +w11++ ww22
因为 T’’T’’ 是带权 ww11+w+w22, , ww33,,……, , wwtt 的最优树,故 ww(T’’T’’) ≤ ww(T’)
若 ww(T’’T’’)<ww(T’), 则 ww(T*T*)<ww(T), 与 TT 是带权 ww11, , ww22,,……, , wwtt
的最优树矛盾,因此 ww(T’’T’’) = = ww(T’)T’是带权 ww11+w+w22, , ww33,,……, , wwtt 的最优树。
定理定理 7-8.4 7-8.4 设设 T 为带权为带权 ww11≤ww22≤……≤wwtt 的最优树,若将的最优树,若将以带权以带权 ww11 和和 ww22 的树叶为儿子的分支点改为带权的树叶为儿子的分支点改为带权 ww11+w+w22 的树叶的树叶 ,,
得到一棵新树得到一棵新树 T’T’,, 则则 T’T’也是最优树。也是最优树。
根据上述两个定理,求一棵有 n 个权的最优树,可简化为求一棵有 n-1 个权的最优树,而这又可简化为求一棵有 n-2 个权的最优树,依此类推。具体作法是:首先找出两个最小的权值,设 w1 和 w2 。
然后对 n-1 个权 w1+w2 , w3 ,…, wn求作一棵
最优树,并且将这棵树中的结 w1+w2 代之以 w1 w
2 ,依此类推。
最优树的定义
树的路径长度定义为: 树中每个结点的路径长度之和。
结点的路径长度定义为: 从根结点到该结点的路径上 分支的数目。
树的带权路径长度定义为: 树中所有叶子结点的带权路径长度之和 WPL(T) = wklk ( 对所有叶子结点 ) 。
在所有含 n 个叶子结点、并带相同权值的 m 叉树中,必存在一棵其带权路径长度取最小值的树,称为“最优树”。
例如:
27 9
7 5
4
9
2
WPL(T)=
72+52+23+43+92
=60
WPL(T)=
74+94+53
+42+21
=89
5
4
根据给定的 n 个权值 {w1, w2,
…, wn} ,
构造 n 棵二叉树的集合 F = {T1, T2, … , Tn} ,
其中每棵二叉树中均只含一个带权值 为 wi 的根结点,其左、右子树为
空树;
如何构造最优树
(1)
( 赫夫曼算法 ) 以二叉树为例:
在 F 中选取其根结点的权值为最 小的两棵二叉树,分别作为左、 右子树构造一棵新的二叉树,并 置这棵新的二叉树根结点的权值 为其左、右子树根结点的权值之 和;
(2)
从 F 中删去这两棵树,同时加入 刚生成的新树;
重复 (2) 和 (3) 两步,直至 F 中只 含一棵树为止。
(3)
(4)
9
例如 : 已知权值 W={ 5, 6, 2, 9, 7 }
5 6 2 7
5 2
76 9 7
6 7
139
5 2
7
6 7
139
5 2
7
9
5 2
7
16
6 7
13
290
0 0
0
1
1 1
100 01 10
110 111
定理定理 7-8.57-8.5 任意一棵二叉树的树叶可对应一个前缀码。
定义定义 7-8.77-8.7 给定一个序列的集合,若没有一个序列是另一个序列的前缀,该序列集合称为前缀码。
证明思路:给定一棵二叉树,从每一个分支点引出两条边,对左侧边标以 0,对右侧边标以 1 ,则每片树叶将可标定一个 0和 1 的序列,它是由树根到这片树叶的通路上各边标号所组成的序列,显然,没有一片树叶的标定序列是另一片树叶标定序列的前缀,因此,任何一棵二叉树的树叶可对应一个前缀码。
定理定理 7-8.67-8.6 任意一个前缀码都对应一棵二叉树。