1、压缩前:谷歌大商业中心的大数据工程师处理大数据
压缩后:谷歌大商业中心的<6,3>工程师处理<8,3>
压缩算法里面肯定不是存的<6,3>这种字符,存的是Huffman编码,而距离+长度(即<6,3>)和literal的Huffman编码是不一样的,所以是可以区分是原意字符还是压缩标记
2、每个字符可以用一个唯一的二进制串表示,这个二进制串称为这个字符的码字,这个二进制串的长度称为这个码字的码字长度
3、distance码子区间的划分:存的时候只存code的Huffman编码,具体的distance值可由规则计算出来,也就是distance对应的实际码字并不需要存。distance的编码实际上可以是: 一个基地址,后面跟上额外的bits(整数的形式,表示基地址后面的偏移)。比如如果单独记录144和145的编码是111001,111002。分区后,只需记录分区码111-002-003即可
4、deflate在Huffman树的基础上,又加入了几条规则,我们把这样的树称为deflate树。
deflate中使用的哈夫曼编码是“范式哈夫曼编码”,范式哈夫曼编码是哈夫曼编码的一个子集。其中心思想是使用某些强制的约定,仅通过很少的数据便能重构出哈夫曼编码树的结构。也就是deflate树是一棵特殊的哈夫曼树。
其中一种很重要的约定是数字序列属性,它要求相同长度的码字是连续整数的二进制描述。例如,假设码字长度为4的最小值为0010,那么其它长度为4的码字必为0011, 0100, 0101, …;
另一个约定:为了尽可能的利用编码空间,长度为i第一个码字f(i)能从长度为i-1的最后一个码字得出, 即:f(i) = 2(f(i-1)+1)。假定长度为4的最后一个码字为1001
压缩原理
最新推荐文章于 2024-03-29 15:32:09 发布