根树及其应用
重点:1、有向树及根树的定义,
2、家族树,有序树, 元树的概念,
3、最优 元树的概念及哈夫曼 算法。
1、有向树:一个有向图 ,若略去有向边的方向所得的无向图为一棵无向树,则称 为有向树。
2、根树:一棵非平凡的有向树,如果有一个顶点的入度为 ,其余顶点的入度均为 ,则称此有向树为根树。入度为 的顶称为树根; 入度为1、出度为0的顶点称为树叶;入度为1、出度大于0的顶点称为内点,内点和树根统称为分支点。
注意:根树的画法可以是任意的,但常将根画在最上方,这时,有向边的方向均指向下方,故可略去其方向。
例1、
根树(1)可画成(2),其中,
…………树根
, , , , , …………树叶
, , …………内点
3、树高。
的层数——从树根到顶点 的通路长度,记 。
树高——树中顶点的最大层数,记 。
如例1中, 为 层, 在第 层上, 在第 层上, 在第 层上,树高为 。
4、家族树。
一棵根树可以看成一棵家族树。
(1) 若顶点 邻接到顶点 ,则称 为 的儿子, 为 的父亲,
(2) 若 同为 的儿子,则称 为兄弟,
(3) 若 ,而 可达 ,则称 为 的祖先, 为 的后代。
5、根子树。
树 的根子树—— 的非树根的顶点 及其后代导出的子图。
例2、
上图的根树 中, 为兄弟,它们都是 的儿子,而 又有儿子 , 有儿子 , 为 的祖先, 为 的后代,……。
是 的根子树。
1、有序树——每一层上都规定次序的根树。
次序可排在顶点处,也可排在边上,一般从左到右。
2、 元树——每个分支点至多有 个儿子的根树。
元正则树——每个分支点恰有 个儿子的根树。
元有序树—— 元树,且是有序树。
元有序正则树—— 元正则树,且是有序树。
元完全正则树—— 元正则树,且所有树叶的层数相同 (等于树高)。
元有序完全正则树—— 元正则完全树,且是有序树。
注意: 元有序正则树是最重要的一种 元树。
例3、
上图中,(1)为 元有序树,(2)为 元有序正则树,(3)为 元有序完全正则树。
3、最优 元树。
(1)定义:设 元树 有 片树叶,分别带权为 ( 为实数, ),称 为 的权,其中 为带权 的树叶 的层数,在所有的带权 的 元树中,带权最小的 元树称为最优 元树。
例4、
上图中的 都是带权 的 元树,求 , , 。
解: ,
,
。
显然, ,但还不能判定 是最优 元树。
(2) 求最优 元树的算法。
算法:
给定实数 ( 片树叶的权),且 ,
连接 为权的两片树叶,得一分支点,其权为 ,
在 中选出两个最小的权,连接它们对应的顶点 (不一定都是树叶),得分支点及所带的权。
重复 ,直到形成 个分支点, 片树叶为止。
例5、求带权 的最优 元树 及 。
解:
上图(1),(2),(3),(4)即求最优 元树的过程,其中(4)为最优 元树。
,
其实 等于 的各分支点的权之和 (思考:为什么?),即
,
比较例4,例5知,例4的 也是带权为 的最优 元树,因为 也是 ,可见,最优树是不唯一的,但 算法得到的树一定是最优树。
例6、(1) 求带权为 的最优 元树 ,
(2) 求 ,
(3) 求 的高度 ,
(4) 求 的树叶有多少?
(5) 求 的 度顶点, 度顶点, 度顶点各有多少?
解:(1)
(2) ,
(3) ,
(4) 的树叶有 片,
(5) 的 度顶点 个 (即树根),
度顶点 个 (即内点),
度顶点 个。
4、求最佳前缀码。
最优 元树的用途之一是求最佳前缀码。
在通讯中,我们常用 和 的符号串作为英文字母的传送信息, 个英文字母被使用的频率往往是不同的。为了使整个信息的长度尽可能短,自然希望用较短的符号串去表示使用频率高的英文字母,用较长的符号串表示使用频率低的英文字母。为了使编码在使用中既快速又准确,可以用求最优 元树的 算法解决这个问题。