Algorithm 使用xor生成所有其他元素的最小元素数
我有n个整数Algorithm 使用xor生成所有其他元素的最小元素数,algorithm,Algorithm,我有n个整数a_1,…,a_n。我想从所有xor构成其他xor的函数中选择最小数 例如,考虑 [1,2,3] , 1 ^ 3=2 < /代码>,这样您就不需要在数组中< 2 > /代码>。所以你可以移除它。以[1,3]结束。因此,元素的最小数目是2,它们可以通过对任意2个元素进行XOR运算来形成数组中的所有原始元素。贪婪的方法会在这里奏效吗?还是DP 编辑:解释我的想法。我想到的一个贪婪的方法是,如果A^b=c那么A^c=b和b^c=A。首先,我删除所有重复项。然后,我将首先在开头列出每个元素
a_1,…,a_n
。我想从所有xor构成其他xor的函数中选择最小数
例如,考虑<代码> [1,2,3] ,<代码> 1 ^ 3=2 < /代码>,这样您就不需要在数组中< <代码> 2 > /代码>。所以你可以移除它。以
[1,3]
结束。因此,元素的最小数目是2
,它们可以通过对任意2个元素进行XOR运算来形成数组中的所有原始元素。贪婪的方法会在这里奏效吗?还是DP
编辑:解释我的想法。我想到的一个贪婪的方法是,如果
A^b=c
那么A^c=b
和b^c=A
。首先,我删除所有重复项。然后,我将首先在开头列出每个元素可以配对以形成数组中另一个元素的所有对。预处理需要O(n^3)
。然后我选择贡献最小的元素,删除它,然后从其他元素中减去1。我重复这个过程,直到所有元素都有如果n是以50为界的,我认为回溯应该有效
假设在某个步骤中,我们已经选择了一个子集S(应该会产生所有其他数字),并希望在该子集中包含一个新数字。
然后,我们可以执行以下操作:
- 考虑所有剩余的数字R,并在S中包含其他人无法生成的所有数字(在S和R中)
- 在S中包含R
- 从R中删除更新后的S中可以生成的所有数字
此外,您还应该跟踪当前的最佳解决方案,并切断所有不允许获得更好结果的分支。问题不清楚。是否允许对缩减集中的两个以上元素进行异或运算?否。只有2个元素被允许进行异或运算。下行表决器可以解释吗?我已经添加了到目前为止我所尝试的内容的详细信息。您知道有一个有效的解决方案吗?看起来它很可能是NP完全的。@PaulHankin这是一场竞赛,n的范围是50,所以我不认为它是NP完全的(2^50操作永远不会在2秒内终止)