【发布时间】:2017-03-18 17:55:35
【问题描述】:
为了澄清,数组的最大子集:[0,1,4,5,6,8] xor 到 0 将是 [0,1,4,5],因为 0^1^4^5= 0(其中 ^ 是异或)。我知道这可以通过蛮力在指数时间内完成,但我想知道下限是什么,以及在那段时间内解决它的算法。
我正在实现 Rational 筛算法。除了wikipedia article,算法上的资源相当稀缺。为了完成有理筛,你试图找到一组数组的一个子集,这样当把相应的元素相加时,得到的数组只有偶数。例如:
[2,3,4,5]+[4,3,4,3]=[6,6,8,8] 这将是一个有效的解决方案,前提是这些数组存在于更大的集合中。
根据那篇维基百科文章,这可以使用线性代数来解决,但我对线性代数了解的不够多。
就算法而言,空子集没有用处。
我简化了问题,说数组只能有 0 和 1,并将数组放入单个数字中,以便可以使用单个运算符计算总和,否则它们是相同的问题。
【问题讨论】:
-
仅连续子集?
-
不,您可以使用任何非空子集。 @גלעדברקן
-
其实我想不出一个次指数的解决方案。
-
您可以对所有数字进行异或运算,然后找到异或等于该数字的最小子集并将其从解决方案中删除。复杂性仍然相同,但您正在尝试找到一些小而不是大的东西。
标签: arrays algorithm subset linear-algebra