Definieren Sie die Polynome, wo deg(A) = q
und deg(B) = p
. Die deg(C) = q + p
.
In diesem Fall deg(C) = 1 + 2 = 3
.
A = 3 + xB = 2 x2+2C=A∗B=?
Wir können C in der O(n2) -Zeit leicht durch Brute-Force-Multiplikation von Koeffizienten finden. Durch Anwenden von FFT (und inverser FFT) können wir dies in O(nlog(n)) Zeit erreichen. Ausdrücklich:
- Konvertieren Sie die Koeffizientendarstellung von A und B in ihre Wertdarstellung. Diesen Vorgang nennt man Auswertung . Das Durchführen von Divide-and-Conquer (D & C) dafür würde O(nlog( n ) ) Zeit in Anspruch nehmen .
- Multiplizieren Sie die Polynome in ihrer Wertedarstellung komponentenweise. Dies gibt die Wertedarstellung von C = A * B zurück. Dies braucht O ( n ) Zeit.
- Invertiere C mit inverser FFT, um C in seiner Koeffizientendarstellung zu erhalten. Dieser Vorgang wird als Interpolation bezeichnet und benötigt auch O ( n log( n ) ) Zeit.
Im weiteren Verlauf stellen wir jedes Polynom als einen Vektor dar, dessen Wert seine Koeffizienten sind. Wir füllen den Vektor mit 0en auf bis zur kleinsten Potenz von zwei, n = 2k, n ≥ de g( C) . Also ist n = 4 . Wenn Sie eine Zweierpotenz wählen, können Sie unseren Divide-and-Conquer-Algorithmus rekursiv anwenden.
A=3+x+0x2+0x3⇒B=2+0x+2x+0x3⇒a⃗ =[3,1,0,0]b⃗ =[2,0,2,0]
Sei A′,B′ die Wertrepräsentation von A bzw. B. Beachten Sie, dass FFT (Fast Fourier Transform ) eine lineare Transformation ( lineare Abbildung ) ist und als Matrix M . Somit
A′=Ma→B′=Mb→
Wir definieren M=Mn(ω) wobei ω komplexe Wurzeln sind nth komplexe Einheitswurzeln. Beachten Sie n = 4
in diesem Beispiel. Beachten Sie auch, dass der Eintrag in der Zeile jth und in der Spalte kthωjkn . Weitere Informationen zur DFT-Matrix finden Sie hier
M4(w)=⎡⎣⎢⎢⎢⎢⎢⎢111...11ω1ω2. . .ωn - 11ω2ω4. . .ω2 ( n - 1 ). . .. . .. . .ωj k. . .1ωn - 1. . .. . .ω( n - 1 ) ( n - 1 )⎤⎦⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢11111ωω2ω31ω2ω4ω61ω3ω6ω9⎤⎦⎥⎥⎥⎥
Ausgehend von den ω4= 4t h Wurzeln der Einheit haben wir die geordnete Mengengleichung:
{ ω0, ω1, ω2, ω3, ω4, ω5, . . . } = { 1 , i , - 1 , - i , 1 , i , . . . }
Dies kann als Iteration durch die Wurzeln des Einheitskreises im Gegenuhrzeigersinn dargestellt werden .
Beachten Sie auch die mod n
Natur, dh ω6= ω6modn= ω2= - 1und- i = ω3= ω3 + n
Um Schritt 1 ( Bewertung ) abzuschließen, finden wir EIN′, B′ durch Ausführen
EIN′= M∗ a⃗ = ⎡⎣⎢⎢⎢⎢11111ωω2ω31ω2ω4ω61ω3ω6ω9⎤⎦⎥⎥⎥⎥⎡⎣⎢⎢⎢3100⎤⎦⎥⎥⎥= ⎡⎣⎢⎢⎢⎢3 + 13 + 1 ω3 + ω23 + ω3⎤⎦⎥⎥⎥⎥= ⎡⎣⎢⎢⎢43 + i23 - i⎤⎦⎥⎥⎥B′=M∗ b⃗ =⎡⎣⎢⎢⎢⎢11111ωω2ω31ω2ω4ω61ω3ω6ω9⎤⎦⎥⎥⎥⎥⎡⎣⎢⎢⎢2020⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢⎢2 + 22 + 2 ω22 + 2 ω42 + 2 ω6⎤⎦⎥⎥⎥⎥= ⎡⎣⎢⎢⎢4040⎤⎦⎥⎥⎥
Dieser Schritt kann mithilfe von D & C-Algorithmen erreicht werden (über den Rahmen dieser Antwort hinaus).
EIN′∗ B′ komponentenweise multiplizieren (Schritt 2)
EIN′∗ B′= ⎡⎣⎢⎢⎢43 + i23 - i⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢4040⎤⎦⎥⎥⎥= ⎡⎣⎢⎢⎢16080⎤⎦⎥⎥⎥= C′
Schließlich besteht der letzte Schritt darin, C 'in Koeffizienten darzustellen. Beachten
C′= Mc⃗ ⇒ M- 1C′= M- 1Mc⃗ ⇒ c⃗ = M- 1C′
Hinweis M- 1n= 1nMn( ω- 1)1undωj= - ωn / 2 + j.
M- 1n= 14⎡⎣⎢⎢⎢⎢11111ω- 1ω- 2ω- 31ω- 2ω- 4ω- 61ω- 3ω- 6ω- 9⎤⎦⎥⎥⎥⎥= 14⎡⎣⎢⎢⎢11111- ich- 1ich1- 11- 11ich- 1- ich⎤⎦⎥⎥⎥
ω- j
{ ω0, ω- 1, ω- 2, ω- 3, ω- 4, ω- 5,...}={1,−i,−1,i,1,−i,...}
nthω−j=ωn−j
c⃗ =M−1C′=1nMn(w−1)=14⎡⎣⎢⎢⎢11111−i−1i1−11−11i−1−i⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢16080⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢⎢(16+8)/4(16−8)/4(16+8)/4(16−8)/4⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢6262⎤⎦⎥⎥⎥
C=A∗B=6+2x+6x2+2x3