特定の言語について話しているのではなく、一般的な話です。結果が大きな数値になるように、各文字をASCII値に置き換えてテキストファイルを圧縮する方法を見つけようとしています。大きな数は数学的に少ない文字数で表現できるため、ファイルを圧縮できます。
4 に答える
そうです、大きな数を数学的に表すことができ、そうすることでスペースを節約できる可能性があります。したがって、各文字を ASCII 値に変換すると、すべての文字が 1 バイトから 1、2、または 3 バイトに拡張されます。つまり、「A」は「65」になります。「z」は「122」になります。ほとんどのテキストでは、拡大率を 2.5 対 1 のように計算します。
1,000 バイトのテキスト ファイルを用意します。すべての文字を対応する ASCII 値に変換します。これで 2,500 桁の数字ができました。その数を 1,000 文字未満で表現できる場合もあります。しかし、それらは特殊なケースです。一般に、最初にデータを元のサイズの 2.5 倍の形式に変換して圧縮することはありません。
しかし、試してみたい場合は、簡単です。
Open input file as binary
Open output file as text
for each byte in input
cast the byte to an int and output its string representation
C では、最後のステートメントは次のようになります。
printf("%d", (int)c);
c
それが入力ファイルから読み取ったバイトであると仮定します。
これで、すべての文字が 0 ~ 9 のファイルが作成されました。例えば:
Hello, world
なる
72,101,108,108,111,44,32,119,111,114,108,100,
コンマが存在しないことを除いて:
721011081081114432119111114108100
あなたのテクニックを使って圧縮方式を考えてみてください。可能な入力の非常に小さなサブセットで機能することがわかると思います。機能する場合、適切な数式を見つけるのに非常に長い時間がかかります。ウィキペディアの全文をダウンロードし、個々の記事を圧縮してみることで簡単にテストできます。うまく機能するものがあると思われる場合は、ぜひ試してみたいと思います。
レンジコーダーを試すことができます。ビットの一部を使用できます。