如何计算时间复杂度为 O(n log n) 的 XOR(二元)卷积

Posted

技术标签:

【中文标题】如何计算时间复杂度为 O(n log n) 的 XOR(二元)卷积【英文标题】:how to calculate XOR (dyadic) convolution with time complexity O(n log n) 【发布时间】:2019-05-04 15:06:09 【问题描述】:

enter image description here

“⊕”是按位异或运算。

我认为可能使用 Karatsuba 的算法来解决问题,但是当我尝试在 Karatsuba 的算法中使用 XOR 而不是“+”时,很难得到子问题。

【问题讨论】:

Karatsuba 的算法不是O(n log n) 【参考方案1】:

convolution theorem 给你

F(C) = F(A) . F(B)

其中F 是与傅立叶相关的变换,在本例中为 Hadamard 变换,. 是逐点乘法。使用fast Walsh–Hadamard transform,您可以在O(n log n) 操作中计算F(A)F(B),最后是C(使用逆运算)。逐点乘法就是O(n)

【讨论】:

以上是关于如何计算时间复杂度为 O(n log n) 的 XOR(二元)卷积的主要内容,如果未能解决你的问题,请参考以下文章

算法复杂度O(logn)详解

② 时间空间复杂度计算

在o(N log N)时间内使用恒定的空间复杂度对链表进行排序

归并排序的时间复杂度O(n*log n)是怎么得来的,求大神详细的讲解一下

为啥代码的时间复杂度为 O(log n)?

为啥即使 Eratothenes 筛子的时间复杂度为 O(nlog(log(n))),程序对于 n=100000 也不起作用