2011-10-25 7 views
0

簡単なアルゴリズムでエンコードして176ビットから80ビットを圧縮し、80ビットから176ビットに再度デコードする必要がありますか?あなたはそれを自分で実装したい場合はここで176ビットから80ビットをエンコードしてデコードするアルゴリズム

+0

あなたの問題と達成しようとしている目標についてより詳細な情報を提供してください。圧縮?オーディオエンコーディング? – hochl

+2

本当にあなたは176ビットのデータを80ビットに圧縮する方法を求めていますか?それとも、この質問には何か? – Eclipse

+0

の目標は、それを圧縮して解凍するだけの問題です。 – kartal

答えて

0

はむしろ単純なアルゴリズムの説明である:あなたがより多くをグーグル場合

http://en.wikipedia.org/wiki/LZ77_and_LZ78

、ページは、それが実際にどのように機能するか非常に詳細な説明をがありました、私はちょうど今それを見つけることができません。

または、圧縮ライブラリを使用してください(例:zlib(http://en.wikipedia.org/wiki/Zlib))。

2

これはできません。

176ビット数は、2^176種類の組み合わせがあります。これらの組み合わせのそれぞれを2^80の組み合わせしかない別の80ビット数として表現することはできません。これは、4桁の数字を3桁の数字に圧縮して元に戻すように求めるのと同じです。

どのような種類のデータを扱っているかによって、これは損失を伴う可能性があります。あなたがしていることを説明するために気をつけますか?

+1

ファイルを圧縮するには魔法が必要ですか? –

+0

私はすべての176ビット数を一意の80ビット数として表すことはできないと言っています。すべてのファイルを圧縮することはできませんが、一部のファイルは元のサイズよりも大きく圧縮されます。 – Hannesh

+1

@Laurent:ファイルを圧縮しても、ファイルを小さくするとは限りません。ランダムではないデータがある場合、ファイルサイズをいくらか減らすことができる冗長性はほとんどありますが、圧縮できる量は入力ファイルのエントロピーの量に大きく依存します。 – Eclipse

4

pigeonhole principleのため、できません。
176ビットで表現できる9.5 * 10^52の異なる値がありますが、80ビットで表現できる1.2 * 10^24の異なる値しかありません。すべての176ビット値を80ビット値にマップすることはできません。

これが可能であれば、反復圧縮によって無限の量のデータを80ビットに収めることができます。

言われていることは、あなたが176ビットの値について知っていることがあれば、それを行う方法があるかもしれないということです。大きな値が22桁しかないことを知っているとします。 「11223344556677889900」や「1111111111111111111111」のような文字列です。この場合、可能な入力セットは大幅に減少し、これらの値のそれぞれを80ビットの値にマップできます。

+0

+1のピジョンホール原理:-) – Yahia

+0

-1これは誤解を招くためです。行内の176個のゼロは、ランレングス符号化で非常に簡単に9ビットまで圧縮できます。 (最初のビットを0にし、次に8ビットを176回繰り返す)。私は*総ランダム*コードが176ビットを必要とすることに同意する。 –

+0

編集のためにdownvoteを削除しました。 –

関連する問題