Précision sur FFT
-
19-09-2019 - |
Question
Je sais qu'il ya quelque chose de mal avec le raisonnement suivant, mais je ne suis pas sûr de ce qu'il est.
La FFT:
-
donnés deux polynômes
A = a_0 + a_1 x + a_2 x^2 + ... + a_n x^n
et
B = b_0 + b_1 x + b_2 x^2 + ... + b_n x^n
vous pouvez calculer les coefficients du produit
AB = \sum _k = 0 ^ 2n ( \sum _ j = 0 ^ k (a_j b_{k-j}))x^k
dans le temps de
O(n log n )
. -
Donc, étant donné deux vecteurs
(a_0, ..., a_n)
et(b_0, ..., b_n)
nous pouvons calculer lev_i = \sum j = 0 ^ k ( a_j b_{k-j})
vecteur dans le temps deO(n log n)
(en intégrant les vecteurs de zéros.) -
Compte tenu de ce qui précède, nous devrions être en mesure de calculer le produit scalaire de
A =(a_0, ..., a_n)
etB =(b_0, ..., b_n)
qui estA.B = \sum_j=0 ^ n a_j b_j
dans le temps deO(n log n)
par prétraiter l'un des vecteurs direB
àB' = (b_n, b_{n-1}, ..., b_1, b_0)
puis calculer la convolution comme dans 2.O(n log n)
temps.
Si le raisonnement ci-dessus est correct, cela signifie que nous pouvons mettre en œuvre matrice de deux matrices de multiplication de nxn
dans le temps de O(n^2 log n )
en calculant le produit scalaire en temps O(n log n)
temps de O(n)
.
Cependant, la meilleure exécution pour la multiplication de la matrice que nous savons est sur O(n^2.4)
si cela semble peu probable pour être vrai, ce qui signifie probablement des étapes 1,2, ou 3 est incorrect.
La solution
Il y a des entrées n^2
dans le produit, non n
et donc cet algorithme serait O(n^2 * n * log n) = O(n^3 log n)
.
Et le meilleur algorithme pour calculer les produits de point est O(n)
, pas O(n log n)
. Voilà pourquoi l'algorithme naïf pour la multiplication de la matrice est O(n^3)
. (Il est des produits de point n^2
qui peut être fait dans le temps de O(n)
).
Autres conseils
Je me demande pourquoi il est une réalisation qui à l'étape 3, vous pouvez calculer le produit scalaire dans O (n log n) comme il est bien connu que le produit scalaire peut être calculé en O (n)? étape également 2 ressemble à un temps linéaire au lieu de O (n log n) pas?
En outre la conclusion à propos de O (n ^ 2 log n) ne suit pas logiquement. Vous ne pouvez pas prendre le produit scalaire O (n) fois résultant dans la matrice AB --- pour autant que je sais que vous devez prendre des produits de point O (n ^ 2), conduisant à (selon votre analyse) O (n ^ 3 log n) qui est inférieur à la norme O (n ^ 3). Ceci est à cause de votre O étrange (n log n) résultat produit scalaire.