Jak już wskazuje @DavidRicherby, zamieszanie powstaje, ponieważ różne pomiary złożoności ulegają pomieszaniu. Ale pozwól mi trochę rozwinąć.
Zwykle przy badaniu algorytmów mnożenia wielomianowego przez dowolne pierścienie interesuje nas liczba operacji arytmetycznych w pierścieniu, z których korzysta algorytm. W szczególności, biorąc pod uwagę pewien (przemienny, unitarny) pierścień i dwa wielomiany f , g ∈ R [ X ] stopnia mniejszego niż n , algorytm Schönhage-Strassen wymaga O ( n log n log log n ) mnożenia i dodawania w R w celu obliczenia f g ∈ R [ X ]Rf,g∈R[X]nO(nlognloglogn)Rfg∈R[X] , z grubsza, sąsiednie - prymitywne korzenie jedności zn trochę większy pierścień D ⊃ R , a potem za pomocą szybkiej transformaty Fouriera na D , obliczania artykuł D .RD⊃RDD
Jeśli pierścień zawiera -tego pierwiastka jedności, to można przyspieszyć do O ( n log n ) operacji w R przy użyciu szybkiej transformacji Fouriera bezpośrednio na badania . Mówiąc dokładniej, powyżej Z ⊂ C można to zrobić za pomocą operacji pierścienia O ( n log n ) (ignorując fakt, że wymagałoby to dokładnej arytmetyki liczb zespolonych).nO(nlogn)RRZ⊂CO(nlogn)
Inną miarą, którą można wziąć pod uwagę, jest złożoność operacji. I to nas interesuje, mnożąc dwie liczby całkowite o długości bitu . Tutaj podstawowe operacje mnożą się i dodają dwie cyfry (z przeniesieniem). Tak więc, mnożąc dwa wielomiany przez Z , należy wziąć pod uwagę fakt, że liczb powstających podczas obliczeń nie można pomnożyć za pomocą stałej liczby operacji pierwotnych. To i fakt, że Z nie ma n-tego prymitywnego pierwiastka jedności dla n > 2, uniemożliwia zastosowanie O ( n log n )nZZnn>2O(nlogn) algorytmu . Przezwyciężyć przez rozważanie współczynnikach z pierścienia Z / ⟨ 2 N + 1f,g , Ponieważ współczynniki wielomianu produktu nie przekroczą tej granicy. Tam (gdy n jest potęgą dwóch), masz (klasę zgodności) 2 jako nZ/⟨2n+1⟩n2n ty pierwiastek jedności, a rekurencyjnie wywołując algorytm mnożenia współczynników, możesz osiągnąć sumę pierwotne (czyli bit) operacje. To następnie przenosi się do mnożenia liczb całkowitych.O(nlognloglogn)
Na przykład, który ładnie podkreśla znaczenie różnicy między operacjami pierścieniowymi a operacjami pierwotnymi, rozważ dwie metody oceny wielomianów: metodę Hornera i metodę Estrina. Metoda Hornera ocenia wielomian przy pewnym x ∈ Z poprzez wykorzystanie tożsamości
f ( x ) = ( … ( f n x + f n - 1 ) x + … + … ) +f=∑ni=0fiXix∈Z
podczas gdy metoda Estrina dzieli f na dwie części
H = n / 2 ∑
f(x)=(…(fnx+fn−1)x+…+…)+f0
foraz
L= n / 2 ∑ i = 0 f i Xi
tj.
Hzawiera warunki stopnia
>n/2i
Lwarunki stopnia
≤n/2(zakładamy, że
nH=∑i=1n/2fn/2+iXi
L=∑i=0n/2fiXi
H>n/2L≤n/2n to potęga dwóch, dla uproszczenia).
Następnie możemy obliczyć za pomocą
f ( x ) = H ( xf(x)
i stosując algorytm rekurencyjnie.
f(x)=H(x)xn/2+L(x)
Pierwszy z nich, wykorzystujący dodatków i mnożeń, okazał się optymalny pod względem liczby dodatków i mnożeń (czyli operacji pierścieniowych), drugi potrzebuje więcej (co najmniej n + log n ).nn+logn
n/2n/2Ω(n2)nO(n)O(nlogcn)=O~(n)c>0