Я знаю, что со следующими рассуждениями что-то не так, но я не уверен, что это такое.
БПФ:
дано два полинома
A = a_0 + a_1 x + a_2 x^2 + ... + a_n x^n
и
B = b_0 + b_1 x + b_2 x^2 + ... + b_n x^n
Вы можете рассчитать коэффициенты произведения
AB = \sum _k = 0 ^ 2n ( \sum _ j = 0 ^ k (a_j b_{k-j}))x^k
в O(n log n )
времени.
Итак, учитывая два вектора (a_0, ..., a_n)
и (b_0, ..., b_n)
, мы можем вычислить
вектор v_i = \sum j = 0 ^ k ( a_j b_{k-j})
во O(n log n)
времени (путем вложения векторов в нули.)
Учитывая вышеизложенное, мы должны быть в состоянии вычислить скалярное произведение A =(a_0, ..., a_n)
и B =(b_0, ..., b_n)
, что составляет A.B = \sum_j=0 ^ n a_j b_j
за O(n log n)
времени, предварительно обработав один из векторов, скажем, B
будет B' = (b_n, b_{n-1}, ..., b_1, b_0)
, затем вычисление свертки, как в 2. в O(n log n)
времени.
Если приведенные выше рассуждения верны, то это означает, что мы можем реализовать умножение матриц двух nxn
матриц за O(n^2 log n )
время, вычисляя скалярное произведение в O(n log n)
раз O(n)
раз.
Однако лучшее время выполнения для умножения матриц, которое мы знаем, составляет около O(n^2.4)
, так что это вряд ли может быть правдой, что, вероятно, означает, что шаги 1,2 или 3 неверны.