deflate树与deflate编码
2016-01-25 23:57
155 查看
http://www.cnblogs.com/zengzy/p/5156130.html
关于deflate树,能搜到的资料非常少,这个概念来自gzip的压缩算法,是由huffman树转变过来的。这里简单记录下deflate树的生成过程以及deflate编码。假设以5 8 9 10 14 15,建立一颗huffman树,可以是这个样子的:
61 / \ 27 34 / \ / \ 14 13 15 19 / \ / \ 5 8 9 10
也可以交换任意结点的两棵子树
61 / \ 34 27 / \ / \ 15 19 14 13 / \ / \ 9 10 5 8
交换的过程虽然会改变叶子结点的huffman编码,但是,不会改变huffman树的带权路径和,也不会改变每个叶子结点的编码长度。基于这一点,我们可以做个更特殊的变换,每一层,让非叶子结点排在右边,叶子结点排在非叶子结点的左边。上面这棵树的变换之后如下:
61 / \ 34 27 / \ / \ 15 14 19 13 / \ / \ 9 10 5 8
A / \ B C / \ / \ D E F G / \ / \ G H I J / \ K L / \ M N
A / \ B C / \ / \ D G F E / \ / \ I J H G / \ K L / \ M N
61 / \ 34 27 / \ / \ 15 19 14 13 / \ / \ 9 10 5 8
61 / \ 34 27 / \ / \ 15 14 19 13 / \ / \ 9 10 5 8
现在再来说一下,有了这个码表如何解码,解码是编码的逆过程,所以,先看deflate树的编码
deflate树,编码方式为:
第n层的最左边的叶子结点的编码=((第n-1层的最左边的叶子结点的编码 )+ (第n-1层的叶子结点数))<< 1 。
第n层,后一个叶子结点的编码 = 前一个叶子结点的编码+1
还以下面这颗树为例:
61 / \ 34 27 / \ / \ 15 14 19 13 / \ / \ 9 10 5 8
作者:zengzy
出处: http://www.cnblogs.com/zengzy
分类: 数据结构与算法
相关文章推荐
- POJ 3080 (字符串匹配)
- 二叉查找树的类模板实现
- 图解密码学第一章
- TopN排序和TopN 数组排序
- ios生命周期
- Spring的属性注入, byName和byType还有注入List属性
- Scala面向对象
- virtualbox中centos用wifi联网
- 图片轮播之面向过程写法
- Json文件解析cocos
- mysql 5.7新数据库sys解析(一)
- 转载一篇来自川山甲的关于make的文章
- python学习笔记四 迭代器,生成器,装饰器(基础篇)
- 用n个宽d,高h,深d的箱子打出高度最高的箱子,下面的箱子的宽度,高度和深度必须大于上面的箱子
- 办事,公司比学校做的好
- NLB网路负载均衡管理器详解
- 身份证的正则表达式
- 在Eclipse中使用JUnit4进行单元测试(中级篇)
- 整理一下最近活动20160125
- 博客园首行缩进问题