求最接近给定数字的数组中三个元素之和的渐近最优方法

发布于 2024-11-24 03:44:36 字数 315 浏览 2 评论 0原文

在他对 的回答中这个问题,约翰·费米内拉 (John Feminella) 说:

如果你真的很喜欢,可以通过次二次方来完成这个任务 将每个整数表示为位向量并执行快速 傅立叶变换,但这超出了本答案的范围。

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

In his answer to this question, John Feminella says:

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.

What is the asymptotically optimal way of solving the problem described in that question?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与君绝 2024-12-01 03:44:36

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

Suppose we have an array 1 2 4. We represent this array as a polynomial f(x) = x^1 + x^2 + x^4. Let's look at f(x)^2, which is

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

The number of ways to write n as the sum of two elements of the array is the coefficient of x^n, and this is true in general. FFT gives us a way to multiply polynomials efficiently*, so basically what we do is compute f(x)^3 and look at the coefficient of the target number S.

  • The reason this algorithm doesn't solve the 3SUM problem is that the efficiency of an FFT multiply depends on the degree of the resulting polynomial and thus that the array values lie in a small range.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文