ファイル圧縮:ZIP
1.ファイル圧縮とは何ですか?
数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率,
或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间的一种技术方法。
2.なぜあなたはファイル圧縮に必要なのでしょうか?
a.文件太大,为了节省空间
b.提高数据在网络上传输的效率
c.压缩之后,对文件可以起到加密的作用。在文件传输的过程中更安全
3.ファイル圧縮分類?
a.有损压缩:解压缩之后不能将其还原成与源文件完全相同的格式。解压缩之后的文件虽然有损,但是在识别文件内容的时候,基本没有障碍。
举例:看电影的时候,有表情,高清,蓝光。视频文件进行了分类,虽然视觉有体验差异,但是并没有影响对信息的获取
b.无损压缩:源文件被压缩之后,通过解压工具如果能够还原成和源文件完全相同的形式
4.どのように圧縮方法は?
GZIP压缩算法经历了两个阶段
第一个阶段使用改进的LZ77压缩算法对上下文中的重复语句进行压缩
第二阶段,采用huffman编码思想对第一阶段压缩完成的数据进行字节上的压缩,从而实现对数据的高效压缩存储。
对于一些文件来说可以通过一定的算法,来达到压缩的目的。
GZIP:GZIP就是L7ZZ的变形 + 基于哈夫曼编码的压缩
L7ZZ变形:原理就是将重复出现的语句用距离长度对来替换
举例: 对mnoabczxyuvwabc123456abczxydefgh进行压缩
压缩结果:mnoabczxyuvw(9,3)132456(18,6)defgh
括号中数字的意思就是在距离现在9个字符的位置,往后数有3个字符重复
所以说现在的问题就是如何从一个长的文件中找到尽可能多的字符?假如使用的是STL中的字符匹配,
时间复杂度太大,所以有别的查找算法。在第一步压缩结束的情况下,再进行基于哈夫曼编码的再次压缩
L7ZZ:是基于语句的压缩。
哈夫曼编码是基于字节的压缩。
GZIPハフマンは考えました:
通过前面LZ77变形思想对源数据进行语句的重复压缩之后,语句层面的重复性已经解决,但并不代表压缩效果已经
达到最佳,字节层面可能也有大量重复的。比如:"BCDCDDBDDCADCBDC"
一个字节占8个比特位,那如果能对所有字节找到小于8个比特位的编码,然后用找到的编码对源文件中对应字节重
新进行改写,也可以让源文件更小。
1.静的長コーディング、等
静的長圧縮符号化方式、等「BCDCDDBDDCADCBDCは」圧縮結果のみ4バイトの完了後、0,110,111,011,110,111 1,110,001,110,011,110圧縮さ
2.動的可変長符号を
可変長符号の使用をリソースを圧縮する:1,011,101,100,101,001 1,100,011,101,011長持ち少し良く圧縮ボード、3マルチビット圧縮、長い圧縮比の結果、より。
取得ハフマン符号化:
質問は今は必要に応じて圧縮ファイルに、ハフマン符号化木を取得する方法で、再エンコードする可変長符号を決定するためにハフマン木で?
ハフマンツリー構築
1. 由给定的n个权值{ w1, w2, w3, … , wn}构造n棵只有根节点的二叉树森林F={T1, T2 , T3, … ,Tn},
每棵二叉树Ti只有一个带权值wi的根节点,左右孩子均为空。
2. 重复以下步骤,直到F中只剩下一棵树为止
a.在F中选取两棵根节点权值最小的二叉树,作为左右子树构造一棵新的二叉树,新二叉树根节点的权值为其左右子树根节点的权值之和
b.在F中删除这两棵二叉树
c.把新的二叉树加入到F中
質問:行う方法の別のコードのプレフィックスは、コードが可変長符号で表示された場合はありますか?この問題が発生したかどうか?
肯定不会,因为每个叶子节点都是唯一的,通往叶子结点的路径也是唯一的。