【发布时间】:2013-05-25 08:16:37
【问题描述】:
我一直在研究 RFC 1951(DEFLATE 压缩算法),并发现了 Mark Adler 的有趣“学习”源文件,名字很可爱——puff.c。虽然通过合理遵循 RFC-1951 规范,大脑解析该文件是一种启发性的体验,但作者做了一些我不太清楚的事情——他改变了索引长度数组的顺序。
在代码的cmets中解释有点模糊:
码长码长按置换顺序接收(参见 order[] 数组下面)来制作更短的码长码长列表 可能。事实证明,非常短和非常长的代码更少 可能会在动态代码描述中看到,因此可能会出现什么 最初是一种特殊的顺序。
这是楼上描述的排列数组:
static const short order[19] = /* permutation of code length codes */
{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
所以,我的问题是:
- 为什么 RFC-1951 中没有提到这一点?
- 他们如何确定
order中列出的确切排列? - 它是如何工作的?顺序变了,为什么解码过程没有失败?
非常感谢。这不是作业,我也不是为了学习经验而试图超越原始算法。我搜索了这个网站,谷歌是我的朋友,但无济于事。
【问题讨论】:
标签: c compression huffman-code deflate