Compression

耳鼻喉科程序如何計算“最佳壓縮”?

  • August 5, 2021

ent程序可以在文件上執行以提供如下輸出:

熵 = 每字節 4.731183 位。

最佳壓縮會將此 15731 字節文件的大小減少 40%。

15731 個樣本的卡方分佈為 235086.62,並且隨機超過該值的次數不到 0.01%。

數據字節的算術平均值為 87.3796(127.5 = 隨機)。Pi 的 Monte Carlo 值為 4.000000000(誤差 27.32%)。序列相關係數為 0.140065(完全不相關 = 0.0)。

程序如何確定“最佳壓縮”可以實現的目標?

我注意到這個估計通常甚至被 gzip 擊敗。

熵給出了文件中包含的各種資訊,文件中存在的不同值的數量的表示;最佳壓縮,或者更準確地說,最佳編碼,將使用該儲存量。

在您的情況下,該文件目前的長度為 15,731 字節,但每個字節儲存 4.731183 位;因此總體上它包含 4.731183 × 15,731 位資訊,74,426.24 位資訊,或 9,303.28 字節。最佳壓縮將產生一個 9,304 字節的文件,是原始文件的 59.14%。不參考文件長度也可以進行同樣的計算:4.733183 是 8 的 59.16%。表示為縮減,(8 - 4.733183) 是 8 的 40.84%,也就是在 中進行的計算ent,將百分比截斷為整數:

          printf("Entropy = %f bits per %s.\n", ent, samp);
          printf("\nOptimum compression would reduce the size\n");
          printf("of this %lld %s file by %d percent.\n\n", totalc, samp,
           (short) ((100 * ((binary ? 1 : 8) - ent) /
                 (binary ? 1.0 : 8.0))));

現實世界的壓縮工具通過以更簡潔的方式表示重複來擊敗這一點。比較結果

$ (printf %5000s; printf %5000s | tr ' ' '1') | ent
Entropy = 1.000000 bits per byte.

Optimum compression would reduce the size
of this 10000 byte file by 87 percent.

$ (printf %5000s; printf %5000s | tr ' ' '1') | gzip | wc -c
48

輸入由大量字節組成,但只有兩個不同的值,數量相等,因此熵是每字節 1 位。ent認為可以使用每字節 1 位對輸入進行編碼,少八倍。gzip然而,代表空格和空格的執行,並生成一個即使帶有gzip標題也小 208 倍的文件。

引用自:https://unix.stackexchange.com/questions/663436