2016-12-07 17 views
1

私は値の範囲を表す方法を探しています: 0 - 18446744073709551615 8バイト未満です。ビット数を減らした符号なしqword(64ビット)の値の範囲は?

私はいくつかの方法を考えようとしましたが、何もできません。 理論上は、次のようになります。 1バイトを使用して少なくとも2バイトのビットシーケンスを表します。 しかし、2バイトには65536通りのビットの組み合わせがありますが、1バイトでは0-255(256通り)の値しか得られません。

おそらく、ビットの意味を変更するのが最善の方法です。それは問題ありませんが、精度の低下はありません。

私は、単純には考えられないようになっていますが、私は他の人の意見や理論を問題にしたいと思っています。

2つのルールがあります。 #1精度が低下することはありません(つまり、0〜18446744073709551615の数値はすべて表現可能でなければなりません)。 #2標準の64ビット形式からの変換では、7バイト(56ビット)以上が必要になることはありません。

これらのルールは、これを特に困難にします。

+6

すべての2^64の数字は、すべての表現でなければならない場合、あなたは完了です。 63ビットはその半分しか表現できません。 63ビットの圧縮された値のすべてを解凍すると、64ビットの値の半分になります。簡単なカウント。 56ビットは数字の1/256しか表現できません。あなたは64ビットが必要です。期間。 –

答えて

8

これらのルールは、これを特に困難にします。

はい、不可能なことは明らかに不可能です。

の場合、8バイトから8バイト未満を圧縮できる場合は、すべての可能性があります.1TBファイルが約7バイトになるまでプロセスを繰り返してください。

なぜこれが不可能なのか、他の多くの情報理論論があります。例えばピジョンホールの原理:nビットは2^nのユニークなビットパターンしか持たないので、64ビット未満のものはすべての可能な64ビット値に対してユニークな表現を持つことができません。あなたが有効に使用することができますどのような


Huffman codingまたは類似である:一部64bの値が他よりも共通している場合ではない、あまりにも複雑な可変長符号化方式は、総バイト数を保存することができます。 しかし、すべての64ビット値が可変長コード体系で表現可能である場合、一部の値のエンコーディングは8バイト以上を要します。

最新のエントロピーコーディング方法が存在し、現代のビデオコーデックで使用されています。 (例:x264のCABAC)。


は、より多くの理論については、Wikipediaのロスレス圧縮articlsはLimitations sectionを持っています。

も参照してください:

関連する問題