Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary 二进制流的熵编码_Binary_Entropy - Fatal编程技术网

Binary 二进制流的熵编码

Binary 二进制流的熵编码,binary,entropy,Binary,Entropy,我想压缩一个二进制流。我知道在每个“1”之后找到“0”的概率更高,而在每个“0”之后找到“1”的概率更高。我应该如何编码它?我在考虑赖斯密码,但我没有走到这一步。。。提前感谢您的回复。您尝试过一些简单的哈夫曼编码吗?也许它不会节省那么多,但如果其中一个代码“10”和“01”的概率比“00”或“11”高得多,则可以将其重新映射到“0”,将其他代码映射到“10”、“110”和“111” 当然,这不是最好的选择,因为它将您的流拆分为2位块,并且只优化了一种情况。然而,它可以通过计算/测量更大输入集(如

我想压缩一个二进制流。我知道在每个“1”之后找到“0”的概率更高,而在每个“0”之后找到“1”的概率更高。我应该如何编码它?我在考虑赖斯密码,但我没有走到这一步。。。提前感谢您的回复。

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

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

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


另一个简单的方法是每秒钟反转一位。由于您提到的概率将趋向于许多交替流部分,如0101010,这将为您提供许多流部分,如111111,通常可以通过常用的压缩算法更好地进行压缩。但这种方法的成功与否取决于“概率差距”到底有多大。

Hi!我试过哈夫曼,但正如你所注意到的,它不会给出最佳结果。。。不过,感谢您对算术编码的建议。看来是个正确的选择,我会试试看。谢谢算术编码是专利,使用范围编码。