7-8 根树及其应用

26
7-8 根根根根根根

Upload: alaura

Post on 05-Jan-2016

71 views

Category:

Documents


0 download

DESCRIPTION

7-8 根树及其应用. 一、根树 1 、有向树 定义 7-8.1 如果一个有向图在不考虑边的方向时是一棵树,那么,该有向图称为 有向树 。. 2 、根树 定义 7-8.2 一棵有向树 , 如果恰有一个结点的入度为 0 ,其余所有结点的入度都为 1, 则称为 根树 ( rooted tree ) 。入度为 0 的结点称为 T 的 树根 。出度为 0 的结点称为 树叶 ,出度不为 0 的结点称为 分支点 或 内点 。. 根树的画法有: 树根在下,向上生长; 树根在上,向下生长。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 7-8  根树及其应用

7-8 根树及其应用

Page 2: 7-8  根树及其应用

一、根树1 、有向树定义定义 7-8.17-8.1 如果一个有向图在不考虑边的方向时是一棵树,那么,该有向图称为 有向树有向树。

Page 3: 7-8  根树及其应用

2 、根树 定义定义 7-8.27-8.2 一棵有向树 , 如果恰有一个结点的入度为 0 ,其余所有结点的入度都为 1, 则称为根树根树 (rooted tree) 。入度为 0 的结点称为 T 的树根树根。出度为 0 的结点称为树叶,出度不为 0 的结点称为分支点或内点。

根树的画法有:树根在下,向上生长; 树根在上,向下生长。

Page 4: 7-8  根树及其应用

习惯把有向树的根画在最上方,边的箭头全指向下,则可以省略全部箭头,树根到一个结点的有向通路的长度称为该点的层数。所有结点的最大层数称为树高。

Page 5: 7-8  根树及其应用

3 、子树 定义 7-8.3 :任一结点 v 及其后代导出的子图称为根树的子树。

定义定义 7-8.37-8.3 根树包含一个或多个结点 , 这些结点中的某一个称为根 , 其他所有结点被分成有限个子根树。

Page 6: 7-8  根树及其应用

在有向树中,结点的出现次序是没有意义的。但实际应用中,有时要给出同一级中结点的相对次序,这便导出有序树的概念。4 、有序数:在根树中规定了每一层上结点的次序,称为有序树。

Page 7: 7-8  根树及其应用

为表示结点间的关系,有时借用家族中的术语。 定义定义 在以 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 的真子树真子树。

Page 8: 7-8  根树及其应用

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 时,称为二元树,二元有序树的每个结点至多有两个儿子,其序按左右分,分别为左儿子,右儿子,任一分支点最多有两棵子树,称为左子树和右子树。

Page 9: 7-8  根树及其应用

当 m=2 时,便可得到常用的二叉树、完全二叉树和正则二叉树。不难看出,二叉树中的每个结点 v ,至多有两个子树,分别称为 v 的左子树和右子树。若 v 只有一个子树,则称它为左子树或右子树均可。在二叉树的图形表示中, v 的左子树画在 v 的左下方, v 的右子树画在 v 的右下方。

Page 10: 7-8  根树及其应用

有很多实际应用,可用二叉树或 m 叉树表示。可以指出,按下面算法,任何一棵有序树均能转成二叉树。其算法是:(1) 除最左边的分枝结点外,删去所有从每一个结点长出的分枝。在同一级中,兄弟结点之间用从左到右的弧连接。(2) 选取直接位于给定结点下面的结点作为左儿子,与给定结点位于同一水平线上且紧靠它的右边结点作为右儿子,如此类推。 上述算法能够推广到有序森林上去。

Page 11: 7-8  根树及其应用
Page 12: 7-8  根树及其应用

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 在根树中,一个结点的在根树中,一个结点的通路长度通路长度,,就是从树根到该结点的通路中的边数。分支点的通路就是从树根到该结点的通路中的边数。分支点的通路长度称为长度称为内部通路长度内部通路长度,树叶的通路长度称为,树叶的通路长度称为外部通外部通路长度路长度。。

Page 13: 7-8  根树及其应用

二、最优树 二叉树的一个重要应用就是最优树问题。给定一组数 w1 , w2 ,…, wn 。令一棵二叉树有

n 个叶结点,并对它们分别指派 w1 , w2 ,…,

wn 作为权,则该二叉树称为加权二叉树。

8.8. 定理定理 7-8.2 7-8.2 设有设有完全二叉树有 n 个分支点,且内部通路长度为总和为 I ,外部通路长度总和为 E ,则 E=I+2n 。 证明思路:对分支点 n 采用数学归纳法。

Page 14: 7-8  根树及其应用

已知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) 最小的那棵树,称为最小的那棵树,称为最优树最优树。。

Page 15: 7-8  根树及其应用

定理定理 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 是兄弟。是兄弟。

Page 16: 7-8  根树及其应用

证明思路:根据假设,有 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’也是最优树。也是最优树。

Page 17: 7-8  根树及其应用

根据上述两个定理,求一棵有 n 个权的最优树,可简化为求一棵有 n-1 个权的最优树,而这又可简化为求一棵有 n-2 个权的最优树,依此类推。具体作法是:首先找出两个最小的权值,设 w1 和 w2 。

然后对 n-1 个权 w1+w2 , w3 ,…, wn求作一棵

最优树,并且将这棵树中的结 w1+w2 代之以 w1 w

2 ,依此类推。

Page 18: 7-8  根树及其应用

最优树的定义

树的路径长度定义为: 树中每个结点的路径长度之和。

结点的路径长度定义为: 从根结点到该结点的路径上 分支的数目。

Page 19: 7-8  根树及其应用

树的带权路径长度定义为: 树中所有叶子结点的带权路径长度之和 WPL(T) = wklk ( 对所有叶子结点 ) 。

在所有含 n 个叶子结点、并带相同权值的 m 叉树中,必存在一棵其带权路径长度取最小值的树,称为“最优树”。

例如:

Page 20: 7-8  根树及其应用

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

Page 21: 7-8  根树及其应用

根据给定的 n 个权值 {w1, w2,

…, wn} ,

构造 n 棵二叉树的集合 F = {T1, T2, … , Tn} ,

其中每棵二叉树中均只含一个带权值 为 wi 的根结点,其左、右子树为

空树;

如何构造最优树

(1)

( 赫夫曼算法 ) 以二叉树为例:

Page 22: 7-8  根树及其应用

在 F 中选取其根结点的权值为最 小的两棵二叉树,分别作为左、 右子树构造一棵新的二叉树,并 置这棵新的二叉树根结点的权值 为其左、右子树根结点的权值之 和;

(2)

Page 23: 7-8  根树及其应用

从 F 中删去这两棵树,同时加入 刚生成的新树;

重复 (2) 和 (3) 两步,直至 F 中只 含一棵树为止。

(3)

(4)

Page 24: 7-8  根树及其应用

9

例如 : 已知权值 W={ 5, 6, 2, 9, 7 }

5 6 2 7

5 2

76 9 7

6 7

139

5 2

7

Page 25: 7-8  根树及其应用

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

Page 26: 7-8  根树及其应用

定理定理 7-8.57-8.5 任意一棵二叉树的树叶可对应一个前缀码。

定义定义 7-8.77-8.7 给定一个序列的集合,若没有一个序列是另一个序列的前缀,该序列集合称为前缀码。

证明思路:给定一棵二叉树,从每一个分支点引出两条边,对左侧边标以 0,对右侧边标以 1 ,则每片树叶将可标定一个 0和 1 的序列,它是由树根到这片树叶的通路上各边标号所组成的序列,显然,没有一片树叶的标定序列是另一片树叶标定序列的前缀,因此,任何一棵二叉树的树叶可对应一个前缀码。

定理定理 7-8.67-8.6 任意一个前缀码都对应一棵二叉树。