【问题标题】:Compress Random 32-bit Integers: How close can we get to Shannon Entropy?压缩随机 32 位整数:我们离香农熵有多近?
【发布时间】:2018-02-09 18:45:01
【问题描述】:

我开发了一种无损压缩算法,该算法压缩 32 位整数(频率/概率未知)到每个整数 31.95824 位(它对于较小的值效果更好,就像大多数压缩算法做)。显然不可能将均匀分布的随机数据压缩到小于未压缩的大小。

因此我的问题是,假设 32 位整数,哪些无损压缩算法最接近伪随机数据的每个整数 32 位的香农熵?

本质上,我正在寻找一个表,其中包含压缩算法及其各自的比特/整数值,用于正、压缩、32 位整数。

【问题讨论】:

  • 我猜是那些监控输入输出大小比并发出一个很小的“文字块”标签的人。
  • 您自己尝试过任何标准算法吗?您是否使用易于实现的语言工作?
  • P.S.随机 32 位整数和随机 8 位整数之间确实没有区别。
  • @MarkRansom 我只是想看看我的算法如何与其他人相比。我自己一直在测试其他算法,但我想有人曾经问过类似的问题,并且可能有一些有用的信息。此外,不幸的是,8 位整数不能很好地与我的算法配合使用,因为值集如此之小。
  • 我的意思是,您可以通过连接 4 个 8 位值来创建一个随机的 32 位值。标准算法将对 8 位值进行操作。

标签: algorithm integer compression


【解决方案1】:

当您说“它对较小的值更有效”时,我认为您已经从 32 位整数转换为可变位长表示,该表示针对某些不均匀的预期值分布进行了优化.然后,应用于 32 位值的均匀分布的相同转换必然平均需要超过 32 位。更多取决于您开始时分布的不均匀程度。

所以答案是,你当然可以通过对数字不做任何事情来精确地达到 32 位。但是,您并没有针对您设计的非均匀分布所暗示的应用程序进行优化。

【讨论】:

  • 你是正确的;值的预期分布仍然是均匀的,但仅在范围不包含所有可能的正 32 位整数时表现良好。我想问的是:当现有的压缩算法尝试压缩随机的 32 位整数时,它们与 32 位的接近程度如何?本质上,我正在寻找一个包含压缩算法及其各自的每整数位值的表。
  • 明显的限制情况是,如果后续数据未压缩,则您可以在序列前添加一位 0,如果是,则为 1。那么不可压缩数据的扩展是一位。
【解决方案2】:

恒等函数每 32 位整数需要精确的 32 位,这很难被击败。 (如果您坚持更改数据流,还有许多其他保持长度的双射。)

对我来说,您可能会采用哪些其他标准来推荐比这更糟糕的算法,这对我来说并不明显。也许您认为输入流并不是真正的统一样本;相反,它仅限于(或明显偏向于)宇宙的一个子集,但您不先验地知道该子集是什么。在这种情况下,流的熵小于一(如果子集大小的上限合理地小于宇宙的大小),您可能能够实际压缩输入流。

值得注意的是,除非消息是固定长度的,否则在计算熵时需要考虑消息的长度,包括分子和分母。对于非常长的消息,这通常可以忽略,但如果消息很短,则消息定界符(或显式长度指示符)的成本可能会很大。 (否则,“压缩”到原始大小的 103% 是“压缩”的有点笨拙的定义。)

【讨论】:

    【解决方案3】:

    这正是 Quantile Compression (https://github.com/mwlon/quantile-compression/) 的目的:对从数字分布中提取的数字进行无损压缩。我不知道有任何其他算法可以做到这一点。您可以在自述文件中查看其结果与理论最优值。它也适用于浮点数和时间戳!我不确定你的分布是什么,但现实世界的分布通常每个数字只需要几位

    它的工作原理是将序列中的每个数字编码为粗略数值范围的霍夫曼代码,然后对该范围内的确切位置进行偏移。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 2023-03-27
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多