【问题标题】:How does WinRAR perform a compression ratio check?WinRAR 如何执行压缩比检查?
【发布时间】:2011-03-27 16:20:41
【问题描述】:

例如它怎么知道一个 4GB 的文本文件可以压缩到 200MB 呢?显然,它不会在 2 秒左右的时间内读取所有内容......那么它使用什么样的预测算法?

【问题讨论】:

  • 我只是猜测它会对文件进行采样并尝试压缩文件的 1% 并以此为基础进行估计。当然,样本必须分散在整个文件中。

标签: algorithm compression winrar


【解决方案1】:

他们使用称为 PPMd 的部分匹配 (PPM) 预测变体。 看wiki

【讨论】:

  • Rar 确实使用了 ppmd,但它与压缩比估计没有任何关系。 PPM 中的“部分匹配”是关于通过短前缀字符串(不是完全匹配)预测下一个符号。 PPM 比 LZ 的计算量更大,因此它不太可能用于任何快速估计。无论如何,没有人知道 rar 是如何做到的,但 Tomasz 可能是对的。
  • @Shelwien:我是您网站的忠实粉丝!我喜欢数据压缩——但我的理解是有限的(而且我是一个懒惰的人)但是你觉得我的回答怎么样?值得一票吗?谢谢!
  • @epitaph:对不起,但它既错误又与问题无关。
  • 我的意思是 char a=3, char b=4 然后 -log(3)+log(2)+log(4)+log(2) = 你需要多少位来编码字符串aaaabbbb。
  • 不,它不是这样工作的。香农的熵是 -log2(p)=-log(p)/log(2)。在您的情况下,它的 -4*log2(a/(a+b))-4*log2(b/(a+b)) = (8*log(7)-4*log(3)-4*log( 4))/log(2)
【解决方案2】:

通常需要 -log(x) + log(2) 位来压缩 x 位。然而,这是一个高度理论值,它完全取决于您要压缩的数据。对于您的数据,您必须记录每个字符和频率并将其插入公式中。例如,先尝试 3 个字符。您想查找香农代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多