赫夫曼树
来源:互联网 发布:抠抠视频秀算法注册机 编辑:程序博客网 时间:2024/06/05 08:30
定义和原理
从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称做路径长度。树的路径长度就是从树根到每一结点的路径长度之和。
带权路径长度WPL最小的二叉树称做赫夫曼树。—最优二叉树
构造赫夫曼树的赫夫曼算法描述:
1.根据给定的n个权值{
w1,w2,...,wn }构成n棵二叉树的集合F={T1,T2,...,Tn },其中每棵二叉树Ti 中只有一个带权为wi 根结点,其左右子树均为空。2.在F中选取两棵根结点的权值最小的树作为做右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左右子树上的根结点的权值之和。
3.在F中删除这两棵树,并将新得到的二叉树加入到F中。
4.重复步骤2,3,直到F中只含一棵树为止,这棵树便是赫夫曼树。
赫夫曼编码
赫夫曼研究最优树的目的是为了结局当年远距离通信(主要是电报)的数据传输的最优化问题。
假设六个字母的频率为A 27,B 8,C 15,D 15,E 30,F 5,合起来正好100,也就是说,我们可以重新按照赫夫曼树来规划它们。下图作图为构造赫夫曼树的过程的权值显示,有图为将权值左分支改为0,右分支改为1的赫夫曼树。
所以,这六个字母用其从树根到叶子所经过路径的0或1来编码,可以得到下表的定义:
注:若要设计长短不等的编码,则必须是任一字符的编码都不是另一个字符的编码前缀,这种编码称为前缀编码。
在解码时,要用到赫夫曼树,即发送方和接收方需要约定好同样的赫夫曼编码规则。
一般地,设需要编码的字符集为{
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 赫夫曼树
- 剑指offer(58)-序列化二叉树
- (转)linphone-android-客户端APP-工程解读
- apache commons fileupload JDepend报告(2016-07-01更新)
- 如何在oracle官网上下载jdk的历史版本。v2016
- 一个JAVA数据库连接池实现源码
- 赫夫曼树
- SAE 1939学习笔记(二)
- eclipse ctril + F 失效
- C中文件基本读写操作(单字符,多字符)
- C# dll文件引入运行包exe中。
- leangoo里怎么邀请成员加入看板?
- 不调用C/C++的字符串库函数,请编写函数strcpy
- Linux中启动和停止jar包的运行
- socketpair