- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GZIP学习心得
1 gzip 所使用压缩算法的基本原理
gzip 使用LZ77 算法和Huffman 编码进行压缩。
1.1 LZ77 算法简介
1.1.1 LZ77 算法的压缩原理
如果文件中有两块内容相同的话,那么只要知道前一块的相对位置和大小,我们就可以确定后一块的内容。所以我们可以用
(两者之间的距离(即前向便宜),相同内容的长度 (即复制长度))这样一对信息,来替换后一块内容。
1.1.2 LZ77 使用滑动窗口寻找匹配串
LZ77 算法使用滑动窗口 的方法:用当前处理字节开始的串,和窗口中的每个串进行匹配,寻找最长的匹配串。窗口中的每
个串指,窗口中每个字节开始的串。使用滑动窗口,可以避免每次从第一个字节开始匹配,加快压缩速度,如果快压,则使用
最小的窗口大小即可。
1.1.3 使用LZ77 算法进行压缩和解压缩
为了在解压缩时,可以区分“没有匹配的字节”和“ (之间的距离,匹配长度)对”,需要用0 表示“没有匹配的字节”,用1 表示
“ (之间的距离,匹配长度)对”。
实际中,由于要固定“之间的距离”所使用的位数,所以使用了固定大小的窗口,例如:窗口的大小为32KB,那么用15 位
(2^15=32K )就可以保存所有可能的之间的距离。而当滑动窗口固定之后,最长的匹配长度也固定了,为32K,使用15 位即
可保存所有匹配长度。
最小匹配长度为:1 位+之间的距离表示位数+匹配长度表示位数。例如上述15 滑动窗口的最小匹配长度为31 位。
1.2 Huffman 编码简介
1.2.1 Huffman 编码的压缩原理
列出一定位长内的所有可能数值,例如一个字节可以表示成256 个值。根据这些值在文件中出现的频率,建立编码表。
1.2.2 Huffman 编码使用Huffman 树来产生编码
建立Huffman 树:每次从所有树中找出值最小 (频率最低)的两个节点,为这两个节点建立一个父结点,然后这两个节点
和它们的父结点组成一个新的节点,这个新的节点的值为它的两个子节点的值的和。如果反复,直至只存在一个节点。
通过Huffman 树得到Huffman 编码:在 Huffman 树的所有父结点到它的左子结点的路径上标上0,右子结点的路径上标
上1。
huffman 编码为根节点-叶子节点的路径编码值。
1.2.3 使用Huffman 编码进行压缩和解压缩
压缩:
读文件,统计每个符号的出现次数。根据每个符号的出现次数,建立Huffman 树,得到每个符号的Huffman 编码。将每个符
号的出现次数的信息保存在压缩文件中,将文件中的每个符号替换成它的Huffman 编码,并输出。
解压缩:
得到保存在压缩文件中的,每个符号的出现次数的信息。根据每个符号的出现次数,建立Huffman 树,得到每个符号的
Huffman 编码。将压缩文件中的每个Huffman 编码替换成它对应的符号,并输出。
2 gzip 所使用压缩算法的实现
2.1 寻找匹配串的实现
gzip 在寻找匹配串的实现中使用哈希表来提高速度。
在 gzip 中,最小匹配长度为3,最大匹配长度为258 。
在gzip 中,有三个关键的数据:head[],ins_h,prev[]。说明:字节的hash 值为当前字节及其下两个字节所计算得到的
hash 值。其中:
ins_h:字节索引为strstart 的hash 值。
head:数组的下标和ins_h 值对应,数组的值为距离strstart 最近的那个ins_h 值与其相同的字节的索引。
prev:数组的下标和字节的索引对应,下标为strstart_1 的值为距离strstart_1 最近的那个ins_h 值与其相同的字节的索
引。
使用head 和prev 可以构成一个链表,链表头尾为head[ins_h],链表下一个为prev[head[ins_h]],下一个为
prev[prev[head[ins_h]]],依次类推,直至prev[…head[ins_h]]=0。在该链表中的所有节点的字节 hash 值相同,链表头的值最
大,然后接下来的值越来越小,因为这些值带表相同字节hash 值得字节的索引,越考前,索引越大,离第一个字符越远。需
要注意的是,相同的三个字节,hash 值必定相同,但是hash 相同,三个字节不一定相同,因此前三个字节相同的串,必然在
同一个链上;在同一个链上的,不一定前三个字节都相同。
由于进行字节hash 值匹配时,根据head[ins_h]中值是否为0 进行判断,而head[ins_h]的值还有一层意思为最近hash 值
为in
您可能关注的文档
- 80211学习笔记.pdf
- 90后大学生恋爱观的调查与思考_基于安徽农业大学学生的调查.pdf
- 中国电子商务发展现状的调查报告.docx
- 6招教你雅思口语面试不紧张-智课教育出国考试.pdf
- 铁路信息化与电子商务.pdf
- =高校班级管理中存在的问题及对策.pdf
- 9 丰圣财富-渠道和路演.pdf
- ACCA F2考试复习重点整理 F2·管理会计.pdf
- ACCA F3 答疑精选,你的问题也在这儿!.pdf
- ACCA F7 考试重点梳理总结.pdf
- 精品解析:辽宁省大连市中山区2021—2022学年八年级(下)期末物理试题(原卷版).docx
- 精品解析:辽宁省大连市中山区第九中学2023-2024学年七年级下学期期中数学试题(原卷版).docx
- 精品解析:辽宁省大连市金州区2021-2022学年八年级4月月考物理试题(解析版).docx
- 精品解析:辽宁省大连市西岗区2023-2024学年七年级下学期期末数学试题(解析版).docx
- 精品解析:辽宁省大连市高新园区名校联盟2021-2022学年七年级下学期 期中考试数学试题(原卷版).docx
- 精品解析:辽宁省大连市普兰店区2021-2022学年七年级下学期期中数学试题(解析版).docx
- 精品解析:辽宁省大连市沙河口区2023-2024学年八年级下学期期末模拟物理试题(原卷版).docx
- 精品解析:辽宁省大连市金普新区2023-2024学年八年级下学期4月月考物理试题(原卷版).docx
- 精品解析:辽宁省大连市西岗区2022-2023学年七年级下学期期末数学试题(解析版).docx
- 精品解析:辽宁省大连市甘井子区2020-2021学年八年级下学期期中物理试题(原卷版).docx
文档评论(0)