【问题标题】:Is there a name for this compression algorithm?这个压缩算法有名字吗?
【发布时间】:2011-08-03 07:27:27
【问题描述】:

假设您有一个四字节整数,并且您想将其压缩为更少的字节。您可以压缩它,因为较小的值比较大的值更有可能(即,一个值的概率随其大小而降低)。您应用以下方案来生成 1、2、3 或 4 字节的结果:

请注意,在下面的描述中(位从最高有效位到最低有效位),即第一位是指最高有效位,第二位是指下一个最高有效位,等等。 .)

  1. 如果 n
  2. 如果 n>=128 且 n
  3. 如果 n>16,384 并且 n
  4. 如果 n>2,097,152 且 n
  5. 如果 n>=268,435,456 且 n

这个算法有名字吗?

【问题讨论】:

  • 我喜欢这个!但这会破坏指针的功能......指针必须读取指向的值的第一位才能知道下一个值将在哪里......但这听起来确实不错,没听说过。跨度>
  • 这个方案和UTF-8很像
  • 我相信我已经看到了一个 RFC 草案,该草案提出了这种用于传输任意精度整数的方案,但我的 Google-fu 失败了。无论如何,您都不会获得专利:)
  • Michael Goldshteyn 的算法和 UTF-8 之间的区别在于后者“浪费”位以便有效地找到使用字符串的任何给定字节的字符的开头。具体来说,第一个字节之后的每个字节的格式为 10xxxxxx。

标签: compression


【解决方案1】:

这与variable-length quantity 编码或b​​ase-128 非常接近。后一个名称源于这样一个事实,即编码中的每个 7 位单元都可以被视为一个 base-128 数字。

【讨论】:

  • 如前所述,这不是真的。维基百科说 3FFF 的 VLQ 是FF 7F。使用@Michael Goldshteyn 的算法,3FFF 是C0 3F FF
  • @ikegami:重新阅读描述,你是对的:我错过了一些细节,包括长度以 base-1 为前缀,而不是“穿过”整数的表示。
  • 虽然 larsmans 的答案与我提出的算法不同,但它本着问题的精神和最接近(实际存在的)算法。因此他得到了复选标记。
【解决方案2】:

这听起来很像 Dlugosz 的变长整数编​​码

【讨论】:

  • 这是我一直在寻找的,但它不是 Dlugosz 发明的。 larsmans 发布了 cmets 中代码的链接。
【解决方案3】:

Huffman coding 是指用更少的位来存储更常见的数据,以换取使用更多的位来存储不太常见的数据。

【讨论】:

  • 不,这不是霍夫曼编码。从那个维基页面:霍夫曼编码使用一种特定的方法来选择每个符号的表示,从而产生一个前缀代码(有时称为“无前缀代码”,即“代表某个特定符号的位串永远不是前缀代表任何其他符号的位串''),它使用比不太常见的源符号更短的位串来表达最常见的源符号。
  • @Michael Goldshteyn,您指定使用值的概率是其大小的倒数(越小,可能性越大)。根据您的假设,该算法是霍夫曼编码的一种形式。请注意,这是算法的一般类,而不是您的具体实现的名称。
  • 不,我提出的算法属于熵编码类,但它不是基于 Wikipedia 中任何 Huffman 编码定义/实现的 Huffman 编码形式。顺便说一句,您对霍夫曼编码的定义(来自答案)适用于任何熵编码方案。
【解决方案4】:

您的方案类似于 UTF-8,这是一种用于 Unicode 文本数据的编码方案。

主要区别在于 UTF-8 流中的每个字节都指示它是前导字节还是尾随字节,因此可以从中间开始读取序列。使用您的方案,如果存储了一系列此类值,则缺少前导字节将使文件的其余部分完全不可读。而且读取这样的序列必须从头开始,而不是任意位置。

【讨论】:

    【解决方案5】:

    变体

    使用每个字节的高位表示“继续”或“停止”,其余位(序列中每个字节的 7 位)解释为编码实际值的普通二进制:

    这听起来像Google Protocol Buffers 中使用的“Base 128 Varint”。

    整数压缩的相关方法

    总而言之:这段代码表示一个整数,分为两部分: 一元代码的第一部分表示读取其余值需要多少位,第二部分(以位为单位表示的宽度)或多或少是对实际值进行编码的普通二进制代码。

    此特定代码将一元代码与二进制代码“线程化”,但其他类似的代码首先打包完整的一元代码,然后再打包二进制代码, 比如Elias gamma coding

    我怀疑此代码是“开始/停止代码”系列之一 如中所述:

    Steven Pigeon — Start/Stop Codes — Procs。 2001 年数据压缩会议,IEEE 计算机学会出版社,2001 年。

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多