Асимптотически оптимальный способ нахождения суммы трех элементов массива, ближайшего к заданному числу

В своем ответе на этот вопрос Джон Фэминелла говорит:

Можно сделать это субквадратично, если вы действительно представляя каждое целое число в виде битового вектора и выполняя быстрый Фурье, но это выходит за рамки этого ответа.

Каков асимптотически оптимальный способ решения проблемы, описанной в этом вопросе?

Ответы

Ответ 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 зависит от степени полученного полинома и, следовательно, значения массива лежат в небольшом диапазоне.