Huffman 编码
来源:互联网 发布:ubuntu安装 分区 编辑:程序博客网 时间:2024/05/17 16:55
1) 问题引入
Huffman 编码也也是贪婪算法的一种应用,它在文件压缩中有较强的应用。
对于计算机来说,它只认识两个数0,1 。而对于字符,计算机需要对其进行二进制编码来表示。假设对于128个字符,常规的编码方式利用8个位来表示(其中1位为奇偶校验位)。假设我们的文件只有7种不同的字符组成,那么我们需要3个位来表示这7个字符,可以有下面的编码方式:
如果我们用等长的位来编码时,我们可以得到一共需要174位的空间。我们可以看到上表中不同的字符的频率是不同的,差别较大,那么如果用较少的位来编码频率较高的字符,用较多的位来编码频率较低的字符,那么最终总的空间是不是会小很多呢?Huffman算法就是解决了这一问题。
2) Huffman算法
a) 把每一个字符看做一棵树,频率作为权值
b) 合并频率较低的两棵树,这样频率较低的树就会在最终的编码树中深度较高。
c) 编码,编码的规则为左子树为0,右子树为1.
下面是上面的例子:
因此得到的最终的编码结果为
3) 讨论
值得注意的是,并不是所有的情形都适合用Huffman编码。因为在文件前,需要发送一个编码表来使接受方能够解码出内容,这也会占据一定的空间,尤其是需要编码的内容不多时,编码表会占比较大,同时利用Huffman需要首先扫描内容,得到字符的频率,然后在进行编码,因此比较费时。
- Huffman树&&Huffman编码
- huffman编码
- huffman编码
- HUFFMAN 编码
- Huffman编码
- huffman编码
- huffman编码
- Huffman编码
- Huffman编码
- Huffman编码
- Huffman编码
- HuffMan编码
- Huffman编码
- Huffman编码
- Huffman编码
- huffman编码
- Huffman编码
- huffman编码
- 黑马程序员——事件处理机制
- 黑马程序员 接口 总结
- 工厂三兄弟之抽象工厂模式(一)
- 黑马程序员——一个面对对象的小实例
- 栈帧
- Huffman 编码
- 黑马程序员 枚举数和迭代器 总结
- QoS令牌桶
- 黑马程序员 委托、方法、事件 总结
- html5 canvas制作箭头
- 【ASO潜规则】之改名克隆 疯狂圈钱
- 黑马程序员——Foreach的原理
- 工厂三兄弟之抽象工厂模式(二)
- RelativeLayout用到的一些重要的属性