在回答这个问题时,John Feminella说道:
解决该问题的渐近最优方法是什么?如果你变得很聪明地将每个整数表示为一个位向量并执行快速傅里叶变换,则可以在次二次时间内完成此操作,但这超出了此答案的范围。
假设我们有一个数组 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 的系数。