【问题标题】:Find a subset of maximum size n with XOR k使用 XOR k 找到最大大小为 n 的子集
【发布时间】:2022-01-24 22:08:32
【问题描述】:

我有一个大小为 a = 10⁵ 的数组,其中的数字大小至少为 16 个字节。
现在我必须找到一个异或值等于 k ​​的子序列。
该子序列的最大长度为 n。 (1

我尝试了 BruteForce,但即使进行了许多优化,它仍然需要比我的计算机的使用寿命更长的时间。
网上有很多类似问题的解决方案,但没有一个可以在这里应用,我无法在这里找到可以提供帮助的算法或方法。

是否有人知道时间复杂度低于 O(n a^n) 的更好解决方案?
(注意我还在上高中,所以请用我能理解的方式解释一下)

编辑:子序列表示数组的非连续部分(例如 ['a', 'c', 'e'] 是 ['a', 'b', 'c', 'd', 'e'])

【问题讨论】:

    标签: arrays subset xor subsequence


    【解决方案1】:

    看到你的更新,这个问题显然是O(a^n)--exponential time--表面上。这是最难的时间复杂度类之一。

    坦率地说,正如您所怀疑的那样,以幼稚的方式编写用于解决此问题的程序将花费非常长的时间。不仅超出计算机的使用寿命,20 中的n 将在 10^100 次操作中产生最坏的结果。即使调整为每纳秒进行多次操作,这也是如此之大的时间量,假设我在这里没有计算错,这将远远超过宇宙的热寂。换句话说,对于大小为 100,000 的数组上的大小为 20 的序列,您永远无法使用幼稚的方法解决此问题。

    话虽如此,我不知道是否存在“快速”解决方案。乍一看,这似乎是所谓的“k-xor 问题”。或者更确切地说,如果我们将数组中的每个元素与k 的值进行异或,那么它应该是一个相同的问题。并且“k-xor 问题”似乎在密码学中具有如此重要的意义,以至于人们一直在努力创建纯粹的量子算法来处理问题的时间复杂度问题。这些解决方案适用于较小的n 值,例如34,而不是20。即使是非量子解决方案似乎也有时间复杂度 O(a^(n/2)) 数量级的解决方案,这意味着您的最坏情况运行时复杂度仍将按 10^50 次操作的顺序执行,这仍然是一个不可思议的大数字。

    你说你在读高中,考虑到目前仍在进行前沿研究来改进这类问题的解决方案,我认为你研究效率是不合理的。我希望至少要求研究生水平的研究人员(而不是高中生)来解决此类问题的有效解决方案。

    除非您遗漏或误解了可能显着降低问题复杂性的重要细节,否则您将无法编写有效的解决方案。期间。

    简而言之,我会将其视为允许简单地忽略问题的大小,而只是编写一个可以处理较小值的an 的解决方案。如果您的老师不知何故知道一种快速算法,那么也许他们应该提交一篇研究论文。

    【讨论】:

    • 感谢您的帮助,但您的解决方案仅涵盖子数组。我需要的是子序列(如['a','c','e'])。我已经实现了我只需要做两次异或运算来计算下一个星座的部分。
    • @RD4 我明白了。我误解了,因为“序列”一词似乎是指相邻的元素。这给事情带来了一个相当大而丑陋的扳手。
    • @RD4 鉴于您提供的说明,我已经花时间阅读了该问题,因为我怀疑(似乎正确)您找到有效解决方案的几率很低。我的答案现已更新以反映我的发现。
    • 这不是我的老师让我解决的问题,我是在互联网的某个地方找到的。谢谢,至少我现在知道我无法解决这个问题。我将您的答案标记为解决方案。
    猜你喜欢
    • 2018-09-06
    • 2014-04-20
    • 2017-09-09
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多