当前位置: 首页 > 知识库问答 >
问题:

为什么DEFLATE格式的文字/长度字母表有286个符号长?

龚鸿雪
2023-03-14

根据DEFLATE规范(RFC 1951),文字和长度字母组合在一起,以便使用一个哈夫曼树进行解码。文字和长度字母表都是256个大符号,但组合文字/长度字母表是286个长符号,其中一个符号是块结束字符。

在组合字母表中表示的可能的256个长度符号中,只有29个,在长度符号之后的压缩数据中包含额外的位,以便在解码时读取长度的全部值。这些额外的位不被压缩,被读取为文字机器整数。

为什么不在组合字母表中包含所有256个长度值,以获得大小为512的文字/长度字母表(包括块末字符时为513)?这难道不能更好地压缩长度吗?

共有1个答案

谷梁子昂
2023-03-14

是的,这样可以更好地压缩长度。但不会太多。我在几个大文件上试用了它,我看到压缩文件大小减少了约0.25%。

为了回答“为什么”这个问题,我不能代表菲尔·卡茨发言。(菲尔早已去世。)我只能猜测,他决定将距离码上使用的相同方法应用于长度码,以减少需要哈夫曼编码的符号数量。他必须对距离码进行压缩,以获得代码长度限制为15位的压缩(这在当时的16位处理器上很重要)。他可能也想限制文字/长度代码的符号数量,以减少哈夫曼编码它们所花费的时间,以及编码和解码表的空间。

 类似资料:
  • 我试图构建一个正则表达式来匹配这些字符串: jfldfldf ldjfdlf ldfl ldfldf 8998 dfjldjf 89dfdf DF899 ljdljf[dff]DFDFDF(fdfdf)898 要求: 字符串应仅以任何小写或大写字符(A-Z)开头 它可能包含空格或括号() 不允许任何其他特殊字符 我尝试了,但它仍然接受其他特殊字符。

  • 问题内容: 我正在从另一台服务器下载CSV文件,作为供应商的数据提要。 我正在使用curl获取文件的内容,并将其保存到名为的变量中。 我可以很好地达到那部分,但是我尝试通过爆炸并获得行数组,但是失败并出现“内存不足”错误。 我,大约是3050万个字符。 我需要处理这些值并将它们插入数据库。为了避免内存分配错误,我该怎么办? 问题答案: PHP令人窒息,因为它耗尽了内存。不要使用curl来用文件的内

  • 我是RegEx的新手,正在尝试设计一个与以下字符串匹配的RegEx: 模式1由逗号和空格分隔:。。。(重复) 模式2仅由空格分隔:。。。(重复) 模式3仅用逗号分隔:。。。(重复) 这是我的概念:但它似乎是错误的。 #我想验证整个字符串,并使用javascript #重复更改以重复更合适。 提前谢谢你!

  • 问题内容: 问题是,正如您所知道的,Unicode图表中有成千上万个字符,我想将所有类似的字符转换为英文字母。 例如,这里有一些转换: 我发现字母A / a有20多个版本。而且我不知道如何对它们进行分类。它们看起来像大海捞针。 Unicode字符的完整列表位于http://www.ssec.wisc.edu/~tomw/java/unicode.html 或http://unicode.org/c

  • 其中,我需要包括连字符和空格。 这意味着还必须可以输入值“”。