澄清一下,数组的最大子集:[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
.