当前位置: 首页 > 网络应用技术

仓库非破坏性压缩算法:GZIP算法

时间:2023-03-06 13:52:33 网络应用技术

  GZIP是一种非破坏性压缩算法,基于Deflate。放气是LZ77和Havmann。基本原理是:要压缩文件,首先使用LZ77算法的变体进行压缩,然后使用Harvan Menting(根据情况,使用静态HAVMANN编码或动态HAVMAN编码).compress.deflate最初被设计为LZW和其他获得专利数据压缩算法的替代版本。当时,这些专利限制了压缩和其他流行的档案工具的应用。

  LZ77的核心思想是,如果一个字符串中有两个重复的字符串,则只需要知道字符串的长度和上一个字符串启动位置距离的先前字符串即可。

  例如:通过LZ77算法,可以将ABCCDEFABCCCDEGH压缩到ABCCDEF(7,6)GH,其中7表示重复启动字符A与启动字符的先前字符串之间的距离,5表示重复部分的长度(ABCCDE)。

  LZ77使用滑动窗口压缩来实现此算法。扫描头是从字符串的头开始的,并且有一个滑动窗口,长度为扫描头的前面,扫描头处的字符串与窗口中最长的匹配字符串相同,则为使用(两个字符串之间的距离,字符串的长度)来替换后者重复的字符串。在替换后的字符串之后的同一字节上,易于解压缩。在实际过程中,滑动窗口的大小是固定的,并且匹配的字符串也具有最小的长度限制,因此(标识符的便利性占据)的字节(标识符+串距离+字符串长度)是固定的。

  Harvman编码是数据结构课程中的一种常见算法。Harvman编码使用一个长编码表来编码源符号。长长的编码表是通过评估源符号的方法获得的,并且具有更高概率的字母较短。编码长,以便将编码字符串的平均长度和期望值降低,以实现目的,以实现目的通过构建霍夫曼树方法,对角色进行编码,以避免一个叶子作为另一个叶子路径的前缀,以确保较高频率的字符所占据的字节越少。

  例如:Harvann编码英文单词“ fo r g e t”,这是每个英语字母从小排到大的频率,如下所示。

  每个字母代表一个端子节点(叶节点),并比较字母中每个字母的频率,将最小的两个字母添加到新节点。如下所示。

  上面给出的HAVAMAN树的所有左链路均为0。右链接设置为1,从根节点到叶节点,一次记录每个字母的编码。每个字母的编码表如下所示。

  通常,GZIP仅用于压缩一个文件,然后多个文件的压缩档案通常将这些文件合并到焦油文件中,然后使用GZIP压缩焦油文件。TAR压缩软件包或“ TARBALL”。

  本文分享了华为云社区的诚意,作者:HW0086。