Algorithm 从一组整数到XOR的哪些整数构成目标整数?

Algorithm 从一组整数到XOR的哪些整数构成目标整数?,algorithm,xor,Algorithm,Xor,给出的是: 一组大约800个伪随机无符号64位整数 2910088619203924111, 8611579852607706360, 10743563285097812384, 6712886796489718596, 17298387234720051377, 12467698534877227789, 3782074590599432740, 1419307814092336225, 7951308495700413025, ... 同一类型的目标整数17358988457

给出的是:

  • 一组大约800个伪随机无符号64位整数

    2910088619203924111,  8611579852607706360,  10743563285097812384,
    6712886796489718596, 17298387234720051377,  12467698534877227789,
    3782074590599432740,  1419307814092336225,   7951308495700413025,
    ...
  • 同一类型的目标整数
    17358988457627394926
    ,大多数情况下不在集合中

可以保证,目标整数是通过将集合中最多50个(或更少)整数的子集XORing生成的

什么是最有效的算法,以找到一个子集(任何,不一定是最小的)的整数,使目标整数时异或

如果是NP难,证明它的基本思想是什么?

在Z2中工作,这个问题相当于找到矩阵方程的解,其中,
A
是通过对每个元素进行二进制展开而形成的64x800二进制矩阵,
b
是表示解决方案的64元素二进制矩阵


这样的系统很容易用简单的高斯消去法求解

我收回我最后的评论……如果你想要的只是一个解决方案(不是最好的解决方案),那就不是NP难了。@nneonneo:谢谢。我在问题中澄清,任何解决方案都足够。这个问题与加密有关吗?您能否提供一个示例,说明如何以及为什么能够从数组中的一组值获得作为异或运算结果的目标整数。你对如何将高斯消去法应用于这个问题有什么想法吗?@BobBryan:是的。我一直在尝试用python编写一个国际象棋库。为了高效查找,Zobrist哈希可以用作位置的标识符。有关示例实现,请参见。我想知道是否可以反转该散列函数。既然您似乎可以访问该散列函数的代码,那么实际上,散列函数中的索引不能简单地存储到一个数组中,以便以后可以轻松检索它们吗?如果您经常需要这些,那么这样做可能会更有效率。如果您以前使用过高斯消去法,我怀疑使用高斯消去法可能是直接的,但如果没有,那么它将很难实现。如果你真的想走这条路,也许@nneonneo可以为你提供一些代码示例。非常感谢。({0,1},XOR)构成了一个组,这是一个简单而强大的洞察。