#algorithm #polynomials #polynomial-math
Вопрос:
Многочлены обычно записываются в виде суммы степеней (или различных произведений генераторов), и Google дает мне множество результатов, как перейти от этого к форме, которая является произведением чистых сумм (той, где вы можете видеть, где полином исчезает).:
x^2 — 1 = (x 1) (x — 1)
Однако я ищу другое направление, которое намного проще, но все равно дорого с точки зрения вычислений, если делать это наивно.
У меня есть массив из n значений, на которых полином обращается в нуль. Могу ли я каким-то образом получить коэффициенты в n log n?
Ответ №1:
Я в этом сомневаюсь. N log N — теоретически известная наилучшая асимптотическая скорость для умножения полиномов. Однако проблема, по-видимому, требует иерархического полиномиального расширения путем умножения
step 1) x^2 Ax B = (x a)(x b), x^2 Cx D = (x c)(x d), ...,
step 2) x^4 Ax^3 Bx^2 Cx D = (x^2 Ax B)(x^2 Cx D), ...
...
step log N/2) (polynomial of order N/2) * (polynomial of order N/2)
Когда размер полинома становится достаточно большим, можно начать использовать метод, основанный на БПФ, или Карацубу до этого. Я ожидал бы, что этот метод находится где-то между наивным методом O(N^2), который будет умножать базовый многочлен (x a) один на один с (x b), (x c)… и N log N, возможно, до N (log N)^2.
Комментарии:
1. Интересно, я действительно хотел бы увидеть некоторые материалы, в которых рассматривается этот вопрос на фундаментальном алгебраическом уровне (а не только для комплексных чисел).