哈夫曼编码理解
来源:互联网 发布:java while写99乘法表 编辑:程序博客网 时间:2024/05/17 01:50
哈夫曼编码
哈夫曼编码将频繁出现的字符采用短编码,出现频率较低的字符采用长编码。具体的操作过程为
i.以每个字符的出现频率作为关键字构建最小优先队列;
ii.去除关键字最小的两个结点生成子树,根结点的关键字为孩子结点关键字之和,并将根结点插入到最小优先队列中,直至得到一颗最优编码树。
哈夫曼编码方案是基于________策略的,用该方案对包含a~f留个字符的文件进行编码,文件包含100000个字符,每个字符的出现频率(用百分比表示)如下表所示,则与固定长度编码相比,改编码方案节省了______存储空间。
字符
a
b
c
d
e
F
出现频率
18
32
4
8
12
26
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。
同时哈夫曼编码是典型的贪心算法.
最优编码树如上:
生成最优编码树
先将上述表中字符按出现频率大小排序,结果如下
字符
B
F
A
E
D
C
出现频率
32
26
18
12
8
4
i.将最小的2个字符出现的频率填入二叉树的左孩和右孩中,同时将左右孩之和填入父节点中
ii.将父节点作为右孩填入二叉树,同时将剩余字符出现频率最小的填入左孩中,同时将左右孩之和填入父节点中
iii.重复II操作,直至无字符
字符编码
从上至下,从左到右,遵循以下规则依次编码;
i.左孩编码末尾为0,右孩编码末尾为1;
ii.每增加一层,编码位数增加1
故编码最长位数为哈夫曼二叉树层数减一(编码从第二层开始)
编码效率比较
原编码:
有6个字符,故需要3位字节长度。(2^3>6),所以需要3*100000=300000
哈夫曼编码:
(1*0.32+2*0.26+3*0.18+4*0.12+5*0.04+5*0.08)*100000=246000
节省1-246000/300000=0.18
其他应用(待完成)
- 哈夫曼编码理解
- 深入理解 哈夫曼编码
- 哈夫曼树与哈夫曼编码(前缀编码)理解
- 编码理解
- 理解编码
- string编码的理解
- Asn1/2编码理解
- 字符编码理解
- string编码的理解
- 理解字符编码
- 理解字符编码
- 理解字符编码
- 编码的理解
- PYTHON编码的理解
- 编码中的setCharacterEncoding 理解
- 深入理解“编码”
- (zz)理解字符编码
- Base64编码 理解
- cuDNN API 演化 (二)—— Deprecation 策略
- 按钮发送验证码等待时间效果——定时器setInterval使用
- MD5加密算法
- opencv颜色过滤--------如何选择需要的颜色呢?
- iOS常用的正则表达式
- 哈夫曼编码理解
- iOS开发网络篇—数据缓存
- socket阻塞与非阻塞,同步与异步
- 移动直播技术秒开优化经验(含PPT)
- 关于win7 64位系统安装apache的 教程 httpd2.4服务无法启动 443端口被占用问题
- iPhone苹果手机尺寸大小
- TortoiseGit github 免输用户名密码 Push
- linux 网络设置
- Android 在 SElinux下 如何获得对一个内核节点的访问权限