最小元素数使用xor生成所有其他元素

时间:2017-09-14 05:12:19

标签: algorithm

我有n个整数a_1, ..., a_n。我想从xor形成其他人的所有人中选择最小数字。

例如,考虑[1,2,3]1^3=2,因此您不需要数组中的2。所以你可以删除它。最终得到[1,3]。所以元素的最小数量是2,它们可以通过xored中的任何两个来形成数组中的所有原始元素。贪婪的方法会在这里起作用吗?还是DP?

编辑:解释我在想什么。我想到的一种贪婪的方法是因为a^b=c然后是a^c=bb^c=a。首先,我删除所有重复项。然后我将在开头列表中首先列出每个元素可以配对的所有对,以在数组中形成另一个元素。预处理需要O(n^3)。然后我选择贡献最少的元素,然后删除它,然后从每个其他元素中减去1。我重复这个,直到所有元素都有< = 2对。我停下来这也需要O(n^3)总共O(n^3)。这种贪婪的方法有用吗?有DP方法吗?

1 个答案:

答案 0 :(得分:0)

如果n以50为界,我认为回溯应该有效。

假设在某个步骤中我们已经选择了一个 S 数字子集(应该产生所有其他数字),并希望在该子集中包含一个新数字。 然后我们可以做到以下几点:

  • 考虑所有剩余的数字 R 并在 S 中包含所有其他人无法生成的数字( S 和<强> - [R
  • R
  • 中包含 S 随机(或&#34;最佳&#34;以某种方式)数字
  • R 中删除更新 S
  • 中可以生成的所有数字

此外,您应该跟踪当前的最佳解决方案,并切断所有不会获得更好结果的分支。