arrays - 找到最接近给定数字的数组的三个元素之和的渐近最优方法

标签 arrays algorithm fft bitvector

在他对 this question 的回答中, John Feminella 说:

It's possible to do this sub-quadratically if you get really fancy, by representing each integer as a bit vector and performing a fast Fourier transform, but that's beyond the scope of this answer.

解决该问题中描述的问题的渐近最优方法是什么?

最佳答案

假设我们有一个数组1 2 4。我们将此数组表示为多项式 f(x) = x^1 + x^2 + x^4。我们来看f(x)^2,也就是

x^2 + 2 x^3 + x^4 + 2 x^5 + 2 x^6 + x^8

n写成数组两个元素之和的方法数就是x^n的系数,一般情况下都是这样。 FFT 为我们提供了一种有效乘以多项式的方法*,因此基本上我们所做的是计算 f(x)^3 并查看目标数 S 的系数。

  • 此算法无法解决 3SUM 问题的原因是 FFT 乘法的效率取决于所得多项式的次数,因此数组值位于一个很小的范围内。

关于arrays - 找到最接近给定数字的数组的三个元素之和的渐近最优方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6701733/

相关文章:

c++ - Floyd-Warshall 算法的路径重建不适用于某些值

java - 使用 JCufft 进行实数到复数 FFT

c++ - 在不使用指针的情况下在 C++ 中将数组作为引用传递

java - 如何将包含整数和字符串的文本文件读入数组

python - 对 NumPy 数组中的连续值切片求和

javascript - 限制在 javascript 或 jquery 中显示的记录数量。每个循环到 html

c++ - 用 C++ 编写的 FASTA 阅读器?

python - 寻找机器人导航的算法

ios - 使用 vDSP 打包实数到复数 FFT 2d

embedded - 是否值得将 FFT 计算卸载到嵌入式 GPU?