数据结构(二):哈夫曼树
2015-09-19 11:18
197 查看
包括:
一. 哈夫曼树概念
二. 哈夫曼树构造方法
三. 哈夫曼编码
一. 哈夫曼树
权:在许多应用中,常常将树中的节点赋上一个有着某种意义的数值,该数值称为该节点的权。
节点的带权路径长度:从树根节点到某节点之间的路径长度与该节点上权值的乘积称为该节点的带权路径长度。
树的带权路径长度:树中所有叶子节点的带权路径长度之和称为该树的带权路径长度。
哈夫曼树:对于一组具有确定权值的叶子节点可以构造出多个具有不同带全路径长度的二叉树。把其中带权路径长度最小的二叉树称为哈夫曼树,又称为最优二叉树。
二. 哈夫曼树构造方法
根据给定的n个权值,使对应节点构成n颗二叉树的森林,其中每颗二叉树中都只有一个带权值的根节点,其左右子树都为空。
在森林中选择两个权值最小的叶子节点作为左右子树构造一个新的二叉树,且置新的二叉树的根节点权值为左右子树上根节点的权值之和。
在森林中,用新得到的二叉树代替选取的二个树。
重复(2)(3)步骤,直到只含一棵树位置,该树便是哈夫曼树。
例如:
图1
图2
图3
图4
三. 哈夫曼编码
编码:在数据通信中,经常需要将传送的文字转换为二进制字符0和1组成的字符串,这个过程称为编码。
哈夫曼编码:设需要编码的字符集合为:{d1,d2,...,dn},各个字符在电文中出现的次数集合为{w1,w2,...,wn},那么以d1,d2...,dn作为叶子节点,以w1,w2,...,wn作为个节点的权值构造一颗哈夫曼树,规定哈夫曼树中左分支为0,右分支为1,则从根节点到叶子节点所经过的分支对应的0和1序列就称为该节点对应字符的编码。这样的编码就是哈夫曼编码。
哈夫曼编码的平均长度=d1*w1 + d2*w2+...+dn*wn
一. 哈夫曼树概念
二. 哈夫曼树构造方法
三. 哈夫曼编码
一. 哈夫曼树
权:在许多应用中,常常将树中的节点赋上一个有着某种意义的数值,该数值称为该节点的权。
节点的带权路径长度:从树根节点到某节点之间的路径长度与该节点上权值的乘积称为该节点的带权路径长度。
树的带权路径长度:树中所有叶子节点的带权路径长度之和称为该树的带权路径长度。
哈夫曼树:对于一组具有确定权值的叶子节点可以构造出多个具有不同带全路径长度的二叉树。把其中带权路径长度最小的二叉树称为哈夫曼树,又称为最优二叉树。
二. 哈夫曼树构造方法
根据给定的n个权值,使对应节点构成n颗二叉树的森林,其中每颗二叉树中都只有一个带权值的根节点,其左右子树都为空。
在森林中选择两个权值最小的叶子节点作为左右子树构造一个新的二叉树,且置新的二叉树的根节点权值为左右子树上根节点的权值之和。
在森林中,用新得到的二叉树代替选取的二个树。
重复(2)(3)步骤,直到只含一棵树位置,该树便是哈夫曼树。
例如:
图1
图2
图3
图4
三. 哈夫曼编码
编码:在数据通信中,经常需要将传送的文字转换为二进制字符0和1组成的字符串,这个过程称为编码。
哈夫曼编码:设需要编码的字符集合为:{d1,d2,...,dn},各个字符在电文中出现的次数集合为{w1,w2,...,wn},那么以d1,d2...,dn作为叶子节点,以w1,w2,...,wn作为个节点的权值构造一颗哈夫曼树,规定哈夫曼树中左分支为0,右分支为1,则从根节点到叶子节点所经过的分支对应的0和1序列就称为该节点对应字符的编码。这样的编码就是哈夫曼编码。
哈夫曼编码的平均长度=d1*w1 + d2*w2+...+dn*wn
相关文章推荐
- C++实现哈夫曼树简单创建与遍历的方法
- 详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)
- 最小生成树算法之Prim算法
- 使用C语言实现最小生成树求解的简单方法
- 最小生成树算法——Prim和Kruskal算法的实现
- 哈夫曼编码树构建的java实现
- Data Structure - Week 15
- poj 2485 Highways
- HDU1301 最小生成树kruskal裸题
- 第六周作业——编码实现哈夫曼树
- Kruskal 最小生成树
- 最小生成树
- 图的最小生成树学习笔记
- 克如斯卡尔算法--最小生成树
- 普里姆算法--最小生成树
- HDU-1233 还是畅通工程(最小生成树&并查集)
- 哈夫曼编码(HDU 1053)
- 最小生成树之prim算法
- 最小生成树 : Kruskal 算法
- HuffmanTree----文件压缩