Wie @DavidRicherby bereits betont, entsteht die Verwirrung, weil verschiedene Komplexitätsmaße verwechselt werden. Aber lassen Sie mich etwas näher darauf eingehen.
Wenn man Algorithmen zur Polynommultiplikation über beliebige Ringe untersucht, interessiert man sich normalerweise für die Anzahl der arithmetischen Operationen in dem Ring, die ein Algorithmus verwendet. Insbesondere benötigt der Schönhage-Strassen-Algorithmus bei einigen (kommutativen, einheitlichen) Ringen und zwei Polynomen f , g ∈ R [ X ] mit einem Grad kleiner als n O ( n log n log log n ) Multiplikationen und Additionen in R. um f g ∈ R [ X ] zu berechnenRf,g∈R[X]nO(nlognloglogn)Rfg∈R[X]indem man ungefähr te primitive Wurzeln der Einheit an R anschließt , um einen größeren Ring D ⊃ R zu erhalten, und dann unter Verwendung der schnellen Fourier-Transformation über D das Produkt in D berechnet .nRD⊃RDD
Wenn Ihr Ring eine te Wurzel der Einheit enthält, kann dies mithilfe der schnellen Fourier-Transformation direkt über R auf O ( n log n ) -Operationen in R beschleunigt werden . Genauer gesagt, über Z ⊂ C können Sie dies mit O ( n log n ) -Ringoperationen tun (ohne die Tatsache zu berücksichtigen, dass dies eine genaue Arithmetik über die komplexen Zahlen erfordern würde).nO(nlogn)RRZ⊂CO(nlogn)
Die andere Maßnahme, die berücksichtigt werden kann, ist die Bitkomplexität einer Operation. Und das interessiert uns, wenn wir zwei ganze Zahlen der Bitlänge multiplizieren . Hier multiplizieren und addieren die primitiven Operationen zwei Ziffern (mit Übertrag). Wenn Sie also zwei Polynome mit Z multiplizieren , müssen Sie tatsächlich berücksichtigen, dass die während der Berechnung auftretenden Zahlen nicht mit einer konstanten Anzahl primitiver Operationen multipliziert werden können. Dies und die Tatsache, dass Z keine n- te primitive Einheitswurzel für n > 2 hat, hindert Sie daran, das O ( n log n ) anzuwenden.nZZnn>2O(nlogn)Algorithmus. Sie dies überwinden durch Betrachtung mit den Koeffizienten aus dem Ring Z / ⟨ 2 n + 1 ⟩ , da die Koeffizienten des Polynoms Produkt wird das nicht gebundene überschreiten. Dort (wenn n eine Zweierpotenz ist) haben Sie (die Kongruenzklasse von) 2 als n- te Wurzel der Einheit, und indem Sie den Algorithmus für Koeffizientenmultiplikationen rekursiv aufrufen, können Sie insgesamt O ( n log n) erreichen log log n ) primitive (dh Bit-) Operationen. Dies überträgt sich dann auf die ganzzahlige Multiplikation.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 ist der Einfachheit halber eine Zweierpotenz).
f(x)
f(x)=H(x)xn/2+L(x)
nn+logn
n/2n/2Ω(n2)nO(n)O(nlogcn)=O~(n)c>0