具有静态噪声的类似1000字节块的最小二进制差异?

时间:2009-11-24 22:03:38

标签: python algorithm diff

我需要一个类似的1000字节块的最小差异。这些块最多只有20%的位不同。翻转的位将像无线电静态 - 随机翻转的位,在整个块上具有均匀分布。这是使用XOR和lzo压缩的伪代码:

minimal_diff=lzo(XOR(block1,block2))

由于块很小,我使用lzo的压缩,希望这种压缩格式具有最小的样板。

我已经回顾过像xdelta和bsdiff这样的算法,但这些算法不适用于这样的随机静态噪声。这些更侧重于查找移位的字节序列。

错误纠正码可以在这里用于创建最小差异吗?究竟是怎么回事?

确切的算法会很好。如果它只是一篇研究论文而没有实施,那么我就不感兴趣了。

注意:每个块中的相似位对齐。没有变化。只有一些随机噪声位翻转可以区分块。

2 个答案:

答案 0 :(得分:3)

如果真的是随机噪音那么它就不能真正压缩。这意味着如果你有8,000位(1,000字节x 8位/字节)并且每个位都有1/5(20%)翻转概率,那么你不能在8,000 x(-4)内编码改变的位。 / 5 x ln2 4/5 + -1/5 x ln2 1/5)= 8,000 x(-4/5 x -0.322 + -1/5 x -2.322)= 8,000 x(0.2576 + 0.4644)= 5,776位即722个字节。这是基于香农的信息理论。

因为表示更改位的简单方法需要1000个字节(只编码两个块的XOR),所以通过压缩可以节省最多30%的空间。如果您的持续时间更长,那么这些位不是随机分布的,或者位翻转概率小于20%。

像Lempel-Ziv这样的标准算法是针对结构化数据(即非随机噪声的数据)而设计的。像这样的随机噪声最好用简单的霍夫曼编码和那种东西编码。但是你最多可以节省30%,所以这是一个值得努力的问题。

答案 1 :(得分:0)

您是否已经尝试过标准压缩算法?你看到了什么表现?由于偏向0的高偏差,你应该在旧块和新块的xor上获得相当好的压缩比。

除了标准选项之外,我们想到的另一种选择是将每个diff编码为可变长度整数列表,指定翻转位之间的距离。例如,使用5位可变长度整数,您可以描述5位中最多16位的间隙,10位中17到1024位的间隙,等等。如果翻转位之间的间隔有任何规律性,您可以使用此编码的常规压缩器进一步节省。