圧縮アルゴリズムを論理的に理解する

bigworld12

このアイデアは私の頭の中に3年間流れていましたが、それを適用するのに問題があります。ファイルサイズを半分に削減する圧縮アルゴリズムを作成したかったのです。

例:8 mb〜4 mb

プログラミングの検索と経験を積んで、私は次のことを理解しました。
文字(a、b、c、d)を含む.txtファイルを見てみましょう

IO.File.ReadAllBytes関数を使用すると、次のバイト配列が得られます:(97 | 98 | 99 | 100)、これによると:https//en.wikipedia.org/wiki/ASCII#ASCII_control_code_chartは文字の10進値です。

私が考えたのは、2つのメンバーをそれぞれ1つのメンバーに結合することによって、この4メンバー配列を2メンバー配列のみに数学的にカットする方法ですが、2つの数値を数学的に組み合わせて、単純に元に戻すことはできません。多くの可能性、例えば
80 | 90:90 + 80 = 170ですが、170が100 +70や110 + 60とは異なり80 + 90の結果であったことを知る方法はありません。
そして、それを克服できたとしても、配列の1つのメンバーのバイトの最大値(255バイト)によって制限されます。

ほとんどの圧縮アルゴリズムがバイナリ圧縮を使用していて成功したことは理解していますが、ファイルサイズを半分に削減することを想像してみてください。これについてのあなたの考えを聞きたいと思います。

宜しくお願いします。

マット・ティマーマンズ

すべてのファイルを短くする圧縮アルゴリズムを作成することは不可能です。証明は「カウント引数」と呼ばれ、簡単です。

長さLの256 ^ Lの可能なファイルがあります。

長さがL未満のN(L)個の可能なファイルがあるとしましょう。

計算すると、256 ^ L = 255 * N(L)+1であることがわかります。

そう。長さLのすべてのファイルを圧縮することはできません。これは、ファイルを一意に保持するのに十分な短いファイルがないためです。常に長さLのファイルを短縮するコンプレッサーを作成した場合、多くのファイルを同じ短いファイルに圧縮する必要があります。もちろん、解凍時に元に戻すことができるのはそのうちの1つだけです。

実際、長さLのファイルの数は短いファイルの255倍を超えるため、長さLのほとんどのファイルを圧縮することさえできません実際に短くなるのはごく一部です。

これは、comp.compression FAQで(再び)かなりよく説明されていますhttp://www.faqs.org/faqs/compression-faq/part1/section-8.html

編集:それで、あなたは今、この圧縮のものがすべてについて何であるか疑問に思っているかもしれません...

さて、それらの「長さLのすべての可能なファイル」の大部分はランダムなゴミです。ロスレスデータ圧縮は、実際に使用するファイルに短い表現(出力ファイル)を割り当てることで機能します

たとえば、ハフマンエンコーディングは文字ごとに機能し、最も一般的な文字を書き込むために使用するビット数が少なくなります。たとえば、「e」は「q」よりもテキストで頻繁に発生するため、「e」の書き込みには3ビットしか費やさないが、「q」の書き込みには7ビットを費やす可能性があります。文字131のように、ほとんど発生しないバイトは、元の8ビットバイトよりも長い9ビットまたは10ビットで書き込まれる場合があります。平均して、この方法で簡単な英語のテキストをほぼ半分に圧縮できます。

LZおよび同様のコンプレッサー(PKZIPなど)は、ファイル内で発生するすべての文字列を記憶し、既に発生している文字列には短いエンコーディングを割り当て、まだ表示されていない文字列には長いエンコーディングを割り当てます。これは、エンコードされたすべての文字のコンテキストに関するより多くの情報を考慮に入れるため、さらにうまく機能します。「e」は「y」よりも一般的ですが、「boy」はより頻繁に発生するため、平均して、「boe」よりも「boy」を書き込むのに必要なビット数は少なくなります。

実際に使用するファイルの特性を予測することがすべてであるため、これは少しブラックアートであり、さまざまな種類のコンプレッサーがさまざまな種類のデータに対して良くも悪くも機能します。そのため、非常に多くの異なるアルゴリズムがあります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

画像圧縮に圧縮アルゴリズムを使用する方法、つまりLZ4、LZMA、ZLIB swift

分類Dev

zramにlz4圧縮アルゴリズムを使用させる

分類Dev

数値圧縮アルゴリズムを改善しますか?

分類Dev

PHPの圧縮アルゴリズム

分類Dev

パスを生成するための論理アルゴリズム

分類Dev

手続き型アルゴリズムを論理プログラムに変換する方法は?

分類Dev

指定されたターゲット画像ファイルサイズを達成するためにjpegを圧縮するアルゴリズム

分類Dev

例によってLocalOutlinerFactorアルゴリズムを理解する

分類Dev

PHPの論理アルゴリズム

分類Dev

PythonでS3TC / DXTアルゴリズムを使用してPNG画像を圧縮する方法は?

分類Dev

たくさんの小さな文字列を圧縮するアルゴリズム?

分類Dev

RAR圧縮アルゴリズムはZIP圧縮アルゴリズムよりも圧縮率が高くなっていますか?

分類Dev

数論に関するアルゴリズム

分類Dev

クラスカルのアルゴリズムのJava実装では、パス圧縮を正確にどこで実行する必要がありますか?

分類Dev

事前に構築された辞書をデータ構造として操作する圧縮アルゴリズム

分類Dev

CUDAストリーム圧縮アルゴリズム

分類Dev

文字列を「短縮」するためのアルゴリズム?

分類Dev

圧縮率が最も高い圧縮アルゴリズムの選択

分類Dev

作成されたアルゴリズムの理論上の実行時間を計算する方法は?

分類Dev

デルタ同期に適した圧縮アルゴリズムは何ですか?

分類Dev

Python:論理アルゴリズムを使用して代数式を評価するにはどうすればよいですか?

分類Dev

アルゴリズム:再帰関数を理解する

分類Dev

Nautyアルゴリズムを理解する

分類Dev

アルゴリズムの複雑さを理解する

分類Dev

hyperoptのTPEアルゴリズムを理解する

分類Dev

選択アルゴリズムを理解する

分類Dev

超高速ブラーアルゴリズムを理解する

分類Dev

アルゴリズム言語の構文を理解する

分類Dev

最急降下アルゴリズムを理解する

Related 関連記事

  1. 1

    画像圧縮に圧縮アルゴリズムを使用する方法、つまりLZ4、LZMA、ZLIB swift

  2. 2

    zramにlz4圧縮アルゴリズムを使用させる

  3. 3

    数値圧縮アルゴリズムを改善しますか?

  4. 4

    PHPの圧縮アルゴリズム

  5. 5

    パスを生成するための論理アルゴリズム

  6. 6

    手続き型アルゴリズムを論理プログラムに変換する方法は?

  7. 7

    指定されたターゲット画像ファイルサイズを達成するためにjpegを圧縮するアルゴリズム

  8. 8

    例によってLocalOutlinerFactorアルゴリズムを理解する

  9. 9

    PHPの論理アルゴリズム

  10. 10

    PythonでS3TC / DXTアルゴリズムを使用してPNG画像を圧縮する方法は?

  11. 11

    たくさんの小さな文字列を圧縮するアルゴリズム?

  12. 12

    RAR圧縮アルゴリズムはZIP圧縮アルゴリズムよりも圧縮率が高くなっていますか?

  13. 13

    数論に関するアルゴリズム

  14. 14

    クラスカルのアルゴリズムのJava実装では、パス圧縮を正確にどこで実行する必要がありますか?

  15. 15

    事前に構築された辞書をデータ構造として操作する圧縮アルゴリズム

  16. 16

    CUDAストリーム圧縮アルゴリズム

  17. 17

    文字列を「短縮」するためのアルゴリズム?

  18. 18

    圧縮率が最も高い圧縮アルゴリズムの選択

  19. 19

    作成されたアルゴリズムの理論上の実行時間を計算する方法は?

  20. 20

    デルタ同期に適した圧縮アルゴリズムは何ですか?

  21. 21

    Python:論理アルゴリズムを使用して代数式を評価するにはどうすればよいですか?

  22. 22

    アルゴリズム:再帰関数を理解する

  23. 23

    Nautyアルゴリズムを理解する

  24. 24

    アルゴリズムの複雑さを理解する

  25. 25

    hyperoptのTPEアルゴリズムを理解する

  26. 26

    選択アルゴリズムを理解する

  27. 27

    超高速ブラーアルゴリズムを理解する

  28. 28

    アルゴリズム言語の構文を理解する

  29. 29

    最急降下アルゴリズムを理解する

ホットタグ

アーカイブ