【问题标题】:Entropy encoding of a binary stream二进制流的熵编码
【发布时间】:2009-04-29 09:26:21
【问题描述】:

我想压缩一个二进制流。我知道在每个“1”之后找到“0”的概率更高,在每个“0”之后找到“1”的概率更高。我应该如何编码?我在考虑 Rice 代码,但还没有走这么远……在此先感谢您的回复。

【问题讨论】:

    标签: binary entropy


    【解决方案1】:

    您是否尝试过一些简单的霍夫曼编码?也许它不会节省那么多,但如果代码“10”和“01”之一的概率比“00”或“11”高得多,您可以将其重新映射为“0”,将其他代码重新映射为“10” 、“110”和“111”。

    当然,这不是最佳选择,因为它将您的流分成 2 位块并且只优化一种情况。但是,可以通过计算/测量更大输入集(如 4 或 8 位 f.e.)的概率来改进它。在 8 位的情况下,10101010 和 01010101 的使用频率将高于 00000000 和 11111111。

    通过算术编码或一些真正使用基于比特概率的模型的压缩,您可能会获得更好的结果。

    另一种简单的方法是反转每一秒位。由于您提到的概率会倾向于像 0101010 这样的许多交替流部分,这会给您提供许多像 111111 这样的流部分,通常可以通过通常的压缩算法更好地压缩这些部分。但这种方法的成功与否取决于“概率差距”究竟有多大。

    【讨论】:

    • 嗨!我试过霍夫曼,但是,正如你所注意到的,它不会给出最佳结果......但是感谢建议算术编码。似乎是正确的选择,我会试一试。谢谢!
    • 算术编码已获得专利,使用范围编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2022-01-11
    • 2014-10-09
    • 1970-01-01
    • 2020-08-27
    相关资源
    最近更新 更多