如何计算时间复杂度为 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(N log N)时间内使用恒定的空间复杂度对链表进行排序
归并排序的时间复杂度O(n*log n)是怎么得来的,求大神详细的讲解一下
为啥即使 Eratothenes 筛子的时间复杂度为 O(nlog(log(n))),程序对于 n=100000 也不起作用