LZMA

✍ dations ◷ 2025-09-08 22:35:45 #无损压缩算法

LZMA(Lempel(英语:Abraham Lempel)-Ziv(英语:Jacob Ziv)-Markov chain-Algorithm的缩写)是2001年以来得到发展的一个数据压缩算法,它用于7-Zip归档工具中的7z格式和 Unix-like 下的 xz 格式。它使用类似于LZ77的字典编码(英语:Dictionary coder)机制,在一般的情况下压缩率比bzip2为高,用于压缩的字典文件大小可达4GB。

C++语言写成的LZMA开放源码压缩库使用了区间编码支持的LZ77改进压缩算法以及特殊的用于二进制的预处理程序。LZMA 对数据流、重复序列大小以及重续序列位置单独进行了压缩。LZMA支持几种散列链变体、二叉树以及基数树作为它的字典查找算法基础。

BCJ / BCJ2压缩工具所附带的LZMA SDK包括:在X86、ARM、PowerPC、IA-64以及ARM Thumb处理器上在压缩之前跳转目标进行归一化处理。对于x86平台来说,这是一个近跳转、近调用以及近条件跳转需要从“向后跳1665字节”这样的机器语言归一化到“跳转到5554”这样的格式,但是短跳转及短条件跳转不需要进行这样的处理。

BCJ与BCJ2之间的区别在于前者只将近跳转及近调用目标地址转换到归一化的形式,而BCJ2只将x86平台下的近跳转、近调用及条件近跳转目标分别进行压缩。

一些Windows操作系统专有的特性深深嵌入在原始程序中,使得最初很难生成一个与Unix等系统兼容的版本。然而,LZMA 由于其开放源码特性,仍然最终获得了各种平台的实现:

在GNU通用公共许可证下发布的 7-zip 参考版本有以下几个特点:

这个特点使得这个这个算法的解压过程非常适合于嵌入式系统应用的场合。p7zip 为 7-zip 的 POSIX 系统移植。

LZMA Unix Port 是一个只移植了 7-zip 中 LZMA 压缩代码的版本,内含命令行参数类似于 gzip 的基于数据流的压缩工具。它不是一个归档工具,而只是一个普通的压缩工具,并且由于它在没有数据头中没有未压缩文件大小的UInt64变量,所以它与7-zip生成的LZMA数据流中不同。7-zip使用一种更加灵活的归档格式7z,因此不能被此工具解压。

后来类似的 xz 替代了 LZMA Unix Port,提供了更好的压缩功能,并最终以其优异的性能和压缩比成为了不少开源软件(例如 Linux 内核源码、Debian deb 和 Fedora rpm)的压缩方式之一,甚至是默认压缩方式。xz 命令行程序曾有过一个名为 pxz 的分支,提供多线程压缩功能,后来 xz 在 5.2 时本身就直接提供多线程了。


Lzip 是另一个 Unix-like 系统下的 LZMA 压缩格式,其主要目的之一就是和 xz 竞争。与 xz 相比,它的最大亮点在于提供更简单的文件格式和因此得来的更方便的数据恢复。Lzip 的格式如此简单以至于其文档中就存在一个解压器实现,于是未来的数据考古学家即使在量子计算机使得 LZMA 无用多时之后只靠文档也能成功解压文件。

使用或者支持LZMA的软件有:

LZMA的压缩输出流是一个比特流,采用自适应二进制行程编码器(adaptive binary range coder)。比特流划分为包(packet),每个包或者表示一个字节的被压缩数据,或者如同LZ77的压缩输出序列那样的长度与距离的对(pair)。每个包得每个部分作为独立的上下文(context),从而对每个比特的概率预测仅相关于前一个包的同类型比特值。

有7类包:

LONGREP 表示LONGREP四种包, *REP指称LONGREP 与SHORTREP, *MATCH指称MATCH或*REP.

LONGREP包删除了对距离的直接表示,而是使用包序列最近四个距离。


包的长度部分表示如下:

如同LZ77, 长度不一定要小于距离。

距离在逻辑上是32比特,距离0表示最近增加到词典的那个字节。

距离的编码以6比特"distance slot"开始,由此可知后面跟着多少比特来补全。这是可变长编码。距离解码后为比特流,从最显著位到最不显著位。distance slots 0−3直接编码了0−3.

依据嵌入到Linux kernel的 XZ解码算法源文件。

相关

  • 国家元首政治主题本表纪录中华人民共和国自1949年开国至今的国家元首,在不同时期分别为建国初期的中央人民政府委员会(集体)、《五四宪法》和《八二宪法》下的中华人民共和国主席、废除
  • 宰我宰予,宰姓,名予,字子我,又名予我、宰我,春秋时代鲁国人,孔子弟子,为孔门十哲之一,擅长言辞。宰予曾与孔子讨论三年丧期的礼制及仁的问题,宰予认为为了精进德业,服丧一年也够了,孔子相当
  • 赫尔穆特·施密特赫尔穆特·海因里希·瓦尔德马·施密特(德语:Helmut Heinrich Waldemar Schmidt,1918年12月23日-2015年11月10日),德国社会民主党政治家,前西德社会民主党(SPD)主席(1967年—1969年)、
  • 塔塔集团塔塔集团(印地语:टाटा समूह)是印度最大的集团公司,2010-2011年度收入达到833亿美元,相当于印度国内生产总值的6.14%,现在市场资本总额为689亿美元(只列入塔塔集团96个公司
  • 莫纳殊大学莫纳什大学(英语:Monash University)是位于澳大利亚联邦第二大城墨尔本市的一所世界著名的顶尖研究型综合大学。创校于1958年,总共有八个校区,其中有六所皆设址于墨城附近,主校区
  • 公民不服从服役 改革与改革者 公民不服从 康科德学园前的温德尔·菲利普斯 马萨诸塞州的奴隶制 散步 托马斯·卡莱尔及其作品 瓦尔登湖 为约翰·布朗队长请命 沃尔特·雷利爵士 无原则
  • 庇古效应庇古效应(Pigou Effect),又称财富效应或利率效应,古典经济学家阿瑟·庇古认为,凯恩斯效应仅仅考虑了价格下降,影响利率,进而影响私人投资,却忽略了价格下降对消费的影响。消费不仅仅
  • 2019冠状病毒病希腊疫情2月2月3月3月4月4月过去15日过去15日 2019冠状病毒病希腊疫情,介绍在2019新型冠状病毒疫情中,在希腊发生的情况,可能无法涵盖所有及时的事件。2020年2月26日,希腊确诊首例新冠肺
  • 陶菲克帕夏陶菲克帕夏(1852年11月15日-1892年1月7日),埃及穆罕默德·阿里王朝的第6任统治者,1879年至1892年间,成为埃及与苏丹的赫迪夫。陶菲克帕夏生于赫勒万,为伊斯梅尔帕夏的长子。1892年,
  • 意大利饺古罗马 · 中世纪 · 文艺复兴 · 现代威尼斯和威尼托 · 托斯卡尼 · 西西里 · 维琴察 · 罗马 (罗马饮品) · 那不勒斯面包 · 干酪 (PDO) · 油酥糕点 ·