2017-12-17 19 views
0

私はファイル圧縮のためのプログラムを構築しようとしています。 これまでのところ、ハフマンコーディングアルゴリズムを実装しましたが、十分ではないことに気付きました。圧縮は最小限で、数百万ビットしか圧縮できません。通常は元のファイルの1%しか圧縮できません。 私はそれについての情報を探し、bzip2やgzipのような圧縮ファイルプログラムのほとんどがLZWとHuffmanアルゴリズムの組み合わせを一緒に使用していることを発見しました。 LZWアルゴリズムを使用しようとしたとき、私はバイナリでそれを行う方法について固執しました。このアルゴリズムに関する例と解説のほとんどは、アルファベットの文字列と、バイナリに関する限られた情報が不十分であるかどうかを調べています。それをバイナリで実装する方法やそれを簡単に理解する方法の完全な明確なガイドがありますか?LZWアルゴリズム - バイナリ圧縮

答えて

0

いずれもLZWを使用していません。 gzipはLZ77を使用し、以前のデータに一致する文字列を検索します。リテラルと長さ/距離のペアは、ハフマンコードを使用して送信されます。 bzip2はBurrows-Wheeler transformを使用し、続いて前方への移動、ランレングス符号化、およびハフマン符号化が使用されます。

+0

私はこれらのアルゴリズムを知っていて、それらについて読んだり、バイナリデータに使用したり、それを実装するのに失敗しただけです。 LZ77アルゴリズムはより効果的だと思われますが、ポインタを新しいバイト番号ではなく、サイズを増やさずにバイナリコードでポインタを理解する方法で、どうやって後方にジャンプすることができますか? 私はそれを理解していないと誰かが私のためにそれをファイルに実装する方法でそれを簡素化できる場合私は感謝します –

+0

あなたはそれを自分で実装する必要はありません。 [zlib](https://zlib.net/)のようなライブラリを使用してください。 –

+0

ここでのポイントは自分で(コード)実装しようとすることなので、これは本当の挑戦です。 –

関連する問題