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

时间:2011-07-15 01:12:57

标签: arrays algorithm fft bitvector

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

  

如果你真的很喜欢,可以用次要的方式做这个   将每个整数表示为位向量并执行快速   傅里叶变换,但这超出了这个答案的范围。

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

1 个答案:

答案 0 :(得分:8)

假设我们有一个数组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的效率乘法取决于所得多项式的次数,因此数组值的范围很小。