Como @DavidRicherby ya señala, la confusión surge porque se mezclan diferentes medidas de complejidad. Pero déjame explicar un poco.
Por lo general, cuando se estudian algoritmos para la multiplicación polinómica sobre anillos arbitrarios, uno está interesado en la cantidad de operaciones aritméticas en el anillo que usa un algoritmo. En particular, dado un anillo (conmutativo, unitario) y dos polinomios f , g ∈ R [ X ] de grado menor que n , el algoritmo de Schönhage-Strassen necesita multiplicaciones y adiciones O ( n log n log log n ) en R para calcular f g ∈ R [ X ]Rf,g∈R[X]nO(nlognloglogn)Rfg∈R[X]por, más o menos, contiguo raíces primitivas -ésimos de unidad a R para conseguir algo de anillo más grande D ⊃ R y luego, utilizando la transformada rápida de Fourier sobre D , calculando el producto en D .nRD⊃RDD
Si su anillo contiene un raíz-ésima de la unidad, entonces esto puede ser acelerado a O ( n log n ) las operaciones en R mediante el uso de la transformada rápida de Fourier directamente sobre R . Más específicamente, sobre Z ⊂ C , puede hacer esto usando operaciones de anillo O ( n log n ) (ignorando el hecho de que esto requeriría una aritmética exacta sobre los números complejos).nO(nlogn)RRZ⊂CO(nlogn)
La otra medida que se puede tener en cuenta es la complejidad de bits de una operación. Y esto es lo que nos interesa al multiplicar dos enteros de longitud de bits . Aquí, las operaciones primitivas se multiplican y agregan dos dígitos (con carry). Entonces, al multiplicar dos polinomios sobre Z , en realidad debe tener en cuenta el hecho de que los números que surgen durante el cálculo no se pueden multiplicar utilizando un número constante de operaciones primitivas. Esto y el hecho de que Z no tiene un n -ésima raíz primitiva de la unidad para n > 2 le impide appling la O ( n log n )nZZnn>2O(nlogn)algoritmo. A superar este considerando con coeficientes del anillo Z / ⟨ 2 n + 1 ⟩ , ya que los coeficientes del polinomio producto no superará este unido. Hay (cuando n es una potencia de dos), que tiene (la clase de congruencia) 2 como n raíz ésima de la unidad, y mediante la llamada recursiva del algoritmo para la multiplicación de los coeficientes, se puede lograr un total de O ( n log n log log n ) (es decir, bit) operaciones primitivas. Esto luego se traslada a la multiplicación entera.f,gZ/⟨2n+1⟩n2nO(nlognloglogn)
f=∑ni=0fiXix∈Z
f(x)=(…(fnx+fn−1)x+…+…)+f0
fH=∑i=1n/2fn/2+iXi
L=∑i=0n/2fiXi
H>n/2L≤n/2n es un poder de dos, por simplicidad).
f(x)
f(x)=H(x)xn/2+L(x)
nn+logn
n/2n/2Ω(n2)nO(n)O(nlogcn)=O~(n)c>0