假设我们有数组a,第二个数组b = a[1:](只是删除的第一个元素)。数组c是异或运算的结果,c[i] = a[i]*b[i] (0<=i<len(b))。如果我们知道c,我们能找到数组a吗?我们还得到了一个[0:7]>
证明你不能很简单。
c
比a
少一个元素。如果c
以完全可恢复的方式表示与a
相同的信息,则可以以相同的方式压缩c
,一次又一次,直到只剩下一个元素。显然这个变换是有损的。
反过来说,没有唯一的方法来选择给定异或的一对数字。无论你选择哪一个数字作为第一个,都有一个解。
然而,给定c
和a
的任何元素,您可以完全恢复a
。在已知(x ^ y) ^ y = x ^ (y ^ y) = x
和c[i] = a[i] ^ a[i + 1]
的情况下,在给定a[i]
的情况下,很容易展开a
的值。
为了不失去一般性,让我们假设给定a[0]
。从c[0] = a[0] ^ a[1]
开始,我们得到了a[1] = c[0] ^ a[0]
。现在您可以找到a[2] = c[1] ^ a[1]
,以此类推所有a[i]
。