【发布时间】:2009-04-29 09:26:21
【问题描述】:
我想压缩一个二进制流。我知道在每个“1”之后找到“0”的概率更高,在每个“0”之后找到“1”的概率更高。我应该如何编码?我在考虑 Rice 代码,但还没有走这么远……在此先感谢您的回复。
【问题讨论】:
我想压缩一个二进制流。我知道在每个“1”之后找到“0”的概率更高,在每个“0”之后找到“1”的概率更高。我应该如何编码?我在考虑 Rice 代码,但还没有走这么远……在此先感谢您的回复。
【问题讨论】:
您是否尝试过一些简单的霍夫曼编码?也许它不会节省那么多,但如果代码“10”和“01”之一的概率比“00”或“11”高得多,您可以将其重新映射为“0”,将其他代码重新映射为“10” 、“110”和“111”。
当然,这不是最佳选择,因为它将您的流分成 2 位块并且只优化一种情况。但是,可以通过计算/测量更大输入集(如 4 或 8 位 f.e.)的概率来改进它。在 8 位的情况下,10101010 和 01010101 的使用频率将高于 00000000 和 11111111。
通过算术编码或一些真正使用基于比特概率的模型的压缩,您可能会获得更好的结果。
另一种简单的方法是反转每一秒位。由于您提到的概率会倾向于像 0101010 这样的许多交替流部分,这会给您提供许多像 111111 这样的流部分,通常可以通过通常的压缩算法更好地压缩这些部分。但这种方法的成功与否取决于“概率差距”究竟有多大。
【讨论】: