【问题标题】:Asymptotically optimal way to find the sum of three elements of an array closest to a given number找到最接近给定数字的数组的三个元素之和的渐近最优方法
【发布时间】:2011-07-15 01:12:56
【问题描述】:

John Feminella 在回复this question 时说:

如果您真的很喜欢,可以通过以下方式执行此操作 将每个整数表示为位向量并执行快速 傅里叶变换,但这超出了这个答案的范围。

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

【问题讨论】:

    标签: arrays algorithm fft bitvector


    【解决方案1】:

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

    【讨论】:

    • f(x)^3 有 O(n^3) 个系数。 FFT 是否允许您计算有用的系数子集?
    • 这似乎会检测三个数字的总和是否为给定目标,但它不会找到这三个数字是什么。我错了吗?
    • @Tom 只有当范围很小并且 f(x)^3 具有度数
    • @templatetypedef 你是对的。可以将其作为子例程调用 O(log n) 次以找出数字是多少。
    • @foo- 你会怎么做呢?我看不出这些调用会是什么样子。
    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2014-07-29
    • 2014-11-15
    • 2012-11-17
    相关资源
    最近更新 更多