圧縮後のテキスト ファイルによってサイズが異なるのはなぜですか?
-
04-10-2019 - |
質問
ランダムなテキストサイズ = 27 GB のファイルがあり、圧縮後は 40 MB 程度になります。
3.5 GB の SQL ファイルは、圧縮後は 45 MB になります。
しかし、109 MB のテキスト ファイルは圧縮後に 72 MB になるので、何が問題になるのでしょうか。
圧縮率が低いのはなぜですか。10 MB 程度でなければなりません。そうしないと何かが不足しています。
私が見た限り、すべてのファイルは英語のテキストのみで、文法記号 (/ 、 .- = + など)
なぜ?
そうでない場合、テキスト ファイルを超圧縮するにはどうすればよいですか?
PHP 、 np でコーディングできます。
解決
ファイルの圧縮率はその内容によって異なります。
ほとんどの圧縮アルゴリズムは、繰り返されたデータを単一の繰り返しに変換し、繰り返された回数を指定することで機能します。
たとえば、次の文字が含まれるファイル a
1,000,000 回圧縮すると、完全にランダムな内容のファイルよりもはるかに圧縮できます。
詳細については、さらに情報を提供してください。
他のヒント
次のように考えてください...次の内容を含むファイルがあるとします。
abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc
ファイルは基本的に単に保存するだけです abc times 18
一方、このファイルは次のようになります。
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
以下のみを保存できます:
abcdefghijklmnopqrstuvwxyz times 2
したがって、2 番目のファイルは、最初は短くても、最初のファイルよりも大きなファイルとして圧縮されます。
圧縮は、入力データ内の重複を削除することによって機能します。3.5 GB のファイルには重複データが多く含まれているため、圧縮後のサイズは大幅に小さくなりますが、小さいファイルには重複データがあまり含まれていないため、それほど圧縮されません。
ほとんどの zip ユーティリティでの圧縮の仕組みを理解したい場合は、Wikipedia の記事を参照してください。 レンペル・ジブ・ウェルチ この記事は、これらのアルゴリズムのほとんどが構築されるアルゴリズムです。
PHP は、すでに PHP 自体の一部となっている完全に優れた既存の C ライブラリと比較して、その言語では非常に遅いため、そのようなプロジェクトにはおそらく間違った選択です。
一般に、圧縮レベルは、アルゴリズムがファイル内でどれだけの類似性とパターンを見つけることができるかによって決まります。すべてのファイルに英語のテキストが含まれている場合、図がおかしくなります。極端な圧縮率を持つファイルには、繰り返されるテキスト セグメントの大きな塊が含まれているのではないかと強く疑っています。
圧縮は、データの冗長性を削除することによって機能します。おそらく、最初の決定的な場所は次のとおりです。 ハフマンコーディング これは、この問題に直接取り組んだ最初の独創的な研究の 1 つですが、シャノンのオリジナルの研究をさらに掘り下げてみるのもいいかもしれません。 情報理論.
これらは新しい概念ではありません。最初に大きな関心を集めたのは、人々が非常に限られたチャネルで効率的にデータを送信することに興味を持っていた 1940 年代から 50 年代に遡ります。この主題は単にコンピューティングに興味があるだけではなく、エントロピーやその他の基礎物理学と非常に深いつながりがあります。たとえば、完全に圧縮されたデータはホワイト ノイズと区別できないことがわかりました。