人気のあるDEFLATEアルゴリズムは、Lempel-Zivの上にハフマンコーディングを使用します。
一般に、データのランダムなソース(= 1ビットエントロピー/ビット)がある場合、ハフマンを含むエンコードは平均して圧縮されません。Lempel-Zivが「完璧」である場合(長さが無限大になるにつれて、ほとんどのソースのクラスに近づきます)、ハフマンによるポストエンコーディングは役に立ちません。もちろん、Lempel-Ziv は少なくとも有限の長さでは完全ではないため、ある程度の冗長性が残っています。
ハフマン符号化が部分的に排除し、それによって圧縮を改善するのは、この残りの冗長性です。
私の質問は次のとおりです。この残りの冗長性は、LZではなくハフマンコーディングによって正常に除去されるのはなぜですか。ハフマン対LZのどの特性がこれを実現しますか?単純にLZを再度実行する(つまり、LZで圧縮されたデータをLZで2回エンコードする)と、似たようなことが行われますか?そうでない場合は、なぜですか?同様に、最初にハフマンで圧縮し、その後LZで圧縮しますか?
更新: LZの後でも、ある程度の冗長性が残ることは明らかです。数人がその点を指摘しています。明らかではないのは、なぜ残りの冗長性がLZよりもHuffmanによりよく対処されているのかということです。LZがハフマンよりもうまく機能する元のソースの冗長性とは対照的に、そのユニークな点は何ですか?