80ベースの番号である独自の番号付けシステムを使用してファイルサイズを圧縮したいのですが、これが可能かどうかを本当に知りたいのですか?16進数はA、B、C、D、E、Fのような記号を使用して10、11、12、13、14、15を表すことを学びました-そしてそれは私が自分の番号付けシステムにしたいのですが、より大きなスケールで。何か不足している場合は修正してください。
出来ますか ?
80ベースの番号である独自の番号付けシステムを使用してファイルサイズを圧縮したいのですが、これが可能かどうかを本当に知りたいのですか?16進数はA、B、C、D、E、Fのような記号を使用して10、11、12、13、14、15を表すことを学びました-そしてそれは私が自分の番号付けシステムにしたいのですが、より大きなスケールで。何か不足している場合は修正してください。
出来ますか ?
回答:
質問を解釈するにはいくつかの方法があります。私はと思うあなたが尋ねるかもしれないことは、あなたが一連の持っているということであるアルファベットで文字をΣ場所| Σ | = 80。これをできるだけ少ないビット数で格納する必要があります。アルファベットの文字が均一に分布していると仮定します。
これでかなり良いです。しかし、ランダムアクセスが必要な場合はどうでしょうか。
イェブゲニイー・ドディス、ミアイ・パトラスク、およびミッケル・ソーアップ、:ここでは紙だローカルデコード可能で算術符号化にアンオルタナティブ、STOC 2010。
ちなみに、MihaiPătraşcuという名前を覚えておいてください。彼は、現代のエヴァリストガロアに私たちが持っている最も近いものでした。彼は29歳で脳腫瘍のために非常に若くして亡くなりました。しかし、コンピューターサイエンティストとしての短いキャリアの中で、彼の研究はアルゴリズムの分析分野に革命を起こし、完全に理解するには数十年かかります。
あなたは番号を持っている場合は、あなたがして(例えば。123456789⏨)テキストとして、あなたは、(のような21i3v9ベース36で)異なるベースでそれを書くことができます圧縮し、それをテキストとして書かれた(9つの文字から6まで)。
さらに進むと、バイナリ(4バイト¹)で保存することになります。
さて、この作品あなたは縮小セット[0-9]で開始し、大きな1 [0-9A-Z]に移動しているためとのデータのビット数は、最初の表現で未使用でした。
同様に、ファイルに文字のみが含まれていることがわかっている場合は、ベースを変更することで簡単に圧縮できます。ただし、任意のコンテンツから圧縮する場合、(常に)機能しません。一部のファイルは圧縮する(出力を小さくする)ことができますが、他のファイルは可逆圧縮方式と同じように大きくなるため、これは避けられません。
ただし、たとえば、英語のテキストは十分に圧縮するが、中国語のテキストを大きくする方法は、中国語よりもはるかに多くの英語を書く場合には十分です。
¹実際には2²2ビットしか必要ありませんが、今日のコンピューターストレージは8ビットの倍数を使用しています(しかし、おそらく2²⁷ビットの一連の数値を保存したいと思いますか?☺)。
ベース80 ?? なぜ80?それは意味をなさないが、ベース85は意味をなす。5バイトの文字を使用して4バイトを表すことができるので非常に便利です(85 ^ 5 = 4,437,053,125は、2 ^ 32 = 4,294,967,296よりわずかに大きいため)。
これが、単一の32ビットを作成するための私のコードですword
。
for (i=0; i<5; i++)
{
c = (word % 85) + 37;
word /= 85;
fwrite(&c, sizeof(uint8_t), 1, file);
}
そして、それを読み返すためのものです:
word = 0;
for (i=4; i>=0; i--)
fread(&c[i], sizeof(uint8_t), 1, file);
for (i=0; i<5; i++)
word = word*85 + c[i]-37;
本当にbase 80を使用したい場合は、同じアプローチを使用して、85のインスタンスを80に置き換えることができます。4バイトごとに、5ではなく6文字が必要になります。
しかし、どのようにして何かを圧縮するのでしょうか?あなたは、ファイルがベース256で書かれていることに気づいていますか?これは、base 85で記述されたファイルをzip圧縮すると、zipされた元のbase 256ファイルとほぼ同じサイズになるため、印刷可能な文字を使用してバイナリデータを表現する場合、base 85(またはbase 64)が適切な選択肢になります。
他の回答で説明されているように、圧縮に関しては何も得られませんが、さまざまなベースがさまざまな目的で使用されています。
base64エンコーディングの説明については、ウィキペディアを参照してください。Base 64は、圧縮ではなく、通常は印刷不可能な文字と制御コードを生成するバイナリデータを印刷可能なASCII文字スペースにエンコードするためによく使用されます。これによりファイルサイズは大きくなりますが、XML、電子メール、CSS、Webページなど、他のASCIIファイルに埋め込むことができるバイナリデータを転送するのに役立ちます。