私は RFC 1951 (DEFLATE 圧縮アルゴリズム) を研究しており、興味深い名前の Mark Adler による puff.cという興味深い「学習」ソース ファイルを見つけました。そして、そのファイルを脳が解析することは、RFC-1951 仕様に合理的に従っているという点で、啓発的な経験でしたが、著者は、私にはあまり明確ではないことを行っています。
コードのコメントでは、説明が少しあいまいです。
コード長コード長は、短いコード長コード長リストの可能性を高めるために、並べ替えられた順序で受信されます (以下の 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
ですか? - それはどのように機能しますか?順序が変更されたのに、デコード プロセスが失敗しないのはなぜですか?
とても感謝しております。これは宿題ではなく、学習経験のためだけに元のアルゴリズムを凌駕しようとしているわけでもありません。私はこのウェブサイトを検索し、Google は私の友達でしたが、役に立ちませんでした。