标签:
关于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 A
/ \ B C / \ / \ D G F E / \ / \ I J H G 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标签:
原文地址:http://www.cnblogs.com/zengzy/p/5156130.html