PHPで文字列圧縮と圧縮のお話

「PHPで文字列圧縮したい!」って思うことありませんか?
「配列だとオーバーヘッド激しすぎるんで、CSV文字列にしたけど、もっと圧縮しておきたい!」みたいな。

無いですか?まあ、念のため保険って事で…。

半分は、テスト的な要素を兼ねているけれど、試しにプログラムを組んでみました。

出力を見てもらうと分かりますが、ランダムな文字列では圧縮率が低くなります。
逆に、繰り返しが多い文字列では21%程度まで圧縮が出来ます。
1つの文字の繰り返しだけで構成された文字列では4%程度まで圧縮されます。
ちなみに、短い文字列ではかえって文字列が長くなります。

圧縮のお勉強をした人なら、この結果が当たり前だと言うことは分かると思います。
なぜなら、基本的に圧縮は「データの偏りを利用している」から。

圧縮の方法は様々ですが、一番有名なのはハフマン符号化で、出現回数の多い順に短い符を与えていき、出現回数が少ないほど長い符号が与えられるというもの。
こうすることで、出現回数の多いデータには短い符号が与えられるので、圧縮が可能になると言うわけです。

ですがそのためには、元に戻すための「辞書」が必要になります。長い文字列ほど「辞書」を持つことの効果が出るというわけです。
逆にある程度より短い文字列では、この「辞書」が付加される分だけ長くなってしまうというわけです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください