哈夫曼树
2013-03-28 18:13
267 查看
哈夫曼树
给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。
基本术语
哈夫曼树(霍夫曼树)又称为最优树.1、路径和路径长度
在一棵树中,从一个结点往下可以达到的孩子或子孙结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。
2、结点的权及带权路径长度
若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。
3、树的带权路径长度
树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。[1]
编辑本段哈夫曼树的构造
哈夫曼树的构造
假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:
(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林;
(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。[2]
相关文章推荐
- 哈夫曼树的实现
- 自己找的关于 数据结构与算法:哈夫曼树(源码)!
- 树的基本定义,二叉树,二叉排序树,森林,最优二叉树(哈夫曼树,哈夫曼编码)
- 哈夫曼树的java实现
- 一步一步写算法(之哈夫曼树 下)
- 哈夫曼树
- 数据结构-----哈夫曼树的构造以及遍历
- HDU1053--哈夫曼树
- HDU2527 构建哈夫曼树的灵巧运用
- 哈夫曼树
- 哈夫曼树(Huffman)及其无损压缩实现
- 哈夫曼树的实现
- SDUT OJ 树-堆结构练习——合并果子之哈夫曼树 C++优先队列练习
- poj 3253 Fence Repair (哈夫曼树 优先队列)
- 哈夫曼树
- hdu2527Safe Or Unsafe (哈夫曼树)
- 建立哈夫曼树
- 题目1172:哈夫曼树
- 求解哈夫曼树
- 哈夫曼树及哈夫曼编码