您如何找到异或为零的整数数组的最大子集



澄清一下,数组的最大子集:[0,1,4,5,6,8],xors到0将是[0,1,4,5],因为0^1^4^5=0(其中^是xor)。我知道这可以通过蛮力在指数时间内完成,但我想知道下限是多少,以及当时什么算法可以解决它。

我正在实现理性筛子算法。除了维基百科文章之外,有关该算法的资源相当稀缺。为了完成有理筛选,您尝试查找一组数组的子集,这样在添加相应的元素时,生成的数组只有偶数。例如:

[2,3,4,5]+[4,3,4,3]=[6,6,8,8] 这将是一个有效的解决方案,前提是这些数组存在于较大的集合中。

根据那篇维基百科文章,这可以用线性代数来解决,但我不知道足够的线性代数来解决它。

出于算法的目的,空子集没有用。

我简化了问题,说数组只能有 0 和 1,并将数组放入一个数字中,以便可以用单个运算符计算总和,但除此之外,它们是相同的问题。

是的,它可以表述为线性优化问题。假设整数是k位并且有n位,则可以将它们表示为k * n矩阵A,其中列表示整数,列n的行r是整数i的第r位。

然后整数的选择和异或可以表示为A * x,其中x是一个大小为n的向量,在选定整数的位置有1-s。这必须在 GF(2) 以上,所以乘法是标准的,加法是异或。所以你正在解决maximize(|x|)Ax = 0.

相关内容

  • 没有找到相关文章

最新更新