定义
定义 | 描述 |
---|---|
路径长度 | 从树中一个结点到另一个结点之间的分支构成两个结点之间的路径。路径上的分支数目称为路径长度。 |
树的路径长度 | 从树根到每一结点的路径长度之和。(注意是这里是到每个结点,带权路径长度是到叶子结点) |
结点的带权路径长度 | 从该结点到树根之间的路径长度和结点上权的乘积。 |
树的带权路径长度 | 树中所有叶子结点的带权路径长度之和。 |
赫夫曼树 | 带权路径长度WPL最小的二叉树。 |
构造赫夫曼树
- 根据给定的n个权值{w1,w2,…,wn}构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均为空。
- 在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左右子树上根结点的权值之和。
- 在F中删除这两棵树,将新得到的二叉树加入F中。
- 重复2和3,直到F只包含一棵树。
赫夫曼编码
- 是一种长度不等的编码。必须是任一字符的编码都不是另一个字符的编码前缀,称为前缀编码。
- 发送方和接收方必须约定好同样的赫夫曼编码规则
一般的,设需要编码的字符集为{d1,d2,…,dn},各个字符在电文中出现的次数或频率集合为{w1,w2,…,wn},以d1,d2,…dn作为叶子结点,以w1,w2,…,wn作为相应叶子结点的权值来构造一棵赫夫曼树。规定赫夫曼树的左分支代表0,右分支代表1,则从根结点到叶子结点所经过的路径分支组成的0和1的序列便为该结点所对应字符的编码,这就是赫夫曼编码。