Definire i polinomi, dove deg(A) = q
e deg(B) = p
. Il deg(C) = q + p
.
In questo caso deg(C) = 1 + 2 = 3
,.
A=3+xB=2x2+2C=A∗B=?
Possiamo facilmente trovare C in tempo moltiplicando la forza bruta dei coefficienti. Applicando FFT (e FFT inversa), potremmo raggiungere questo obiettivo in tempo . esplicitamente:O(n2)O(nlog(n))
- Converti la rappresentazione del coefficiente di A e B nella sua rappresentazione del valore. Questo processo si chiama valutazione . L'esecuzione di Divide-and-Conquer (D&C) per questo richiederebbe tempo .O(nlog(n))
- Moltiplica per componente i polinomi nella loro rappresentazione del valore. Ciò restituisce la rappresentazione del valore di C = A * B. Questa operazione richiede tempo.O(n)
- Invertire C usando FFT inversa per ottenere C nella sua rappresentazione del coefficiente. Questo processo si chiama interpolazione e richiede anche tempo .O(nlog(n))
Continuando, rappresentiamo ogni polinomio come un vettore il cui valore sono i suoi coefficienti. Riempiamo il vettore con 0 fino alla potenza più piccola di due, . Quindi . Scegliere una potenza di due ci fornisce un modo per applicare ricorsivamente il nostro algoritmo di divisione e conquista.n=2k,n≥deg(C)n=4
A=3+x+0x2+0x3⇒B=2+0x+2x+0x3⇒a⃗ =[3,1,0,0]b⃗ =[2,0,2,0]
Sia la rappresentazione del valore di A e B, rispettivamente. Si noti che FFT (Fast Fourier Transform ) è una trasformazione lineare ( mappa lineare ) e può essere rappresentato come una matrice, . cosìA′,B′M
A′=Ma→B′=Mb→
Definiamo dove è radici complesse radici complesse di unità. Notare , in questo esempio. Si noti inoltre che la voce nella riga e è . Scopri di più sulla matrice DFT quiM=Mn(ω)ωnthn = 4
jthkthωjkn
M4(w)=⎡⎣⎢⎢⎢⎢⎢⎢111...11ω1ω2...ωn−11ω2ω4...ω2(n−1).........ωjk...1ωn−1......ω(n−1)(n−1)⎤⎦⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢11111ωω2ω31ω2ω4ω61ω3ω6ω9⎤⎦⎥⎥⎥⎥
Date le di unità, abbiamo l'eguaglianza ordinata impostata:ω4=4th
{ω0,ω1,ω2,ω3,ω4,ω5,...}={1,i,−1,−i,1,i,...}
Questo può essere visualizzato come iterando attraverso le radici del cerchio dell'unità in senso antiorario.
Inoltre, nota la mod n
natura, ovvero eω6=ω6modn=ω2=−1−i=ω3=ω3+n
Per completare il passaggio 1 ( valutazione ) troviamo eseguendoA′,B′
A′=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⎤⎦⎥⎥⎥
Questo passaggio può essere realizzato utilizzando algoritmi D&C (oltre lo scopo di questa risposta).
Moltiplica componenti (passaggio 2)A′∗B′
A′∗B′=⎡⎣⎢⎢⎢43+i23−i⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢4040⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢16080⎤⎦⎥⎥⎥=C′
Infine, l'ultimo passo è rappresentare C 'in coefficienti. Avviso
C′=Mc⃗ ⇒M−1C′=M−1Mc⃗ ⇒c⃗ =M−1C′
Si noti 1 e .M−1n=1nMn(ω−1)ωj=−ωn/2+j
M−1n=14⎡⎣⎢⎢⎢⎢11111ω−1ω−2ω−31ω−2ω−4ω−61ω−3ω−6ω−9⎤⎦⎥⎥⎥⎥=14⎡⎣⎢⎢⎢11111−i−1i1−11−11i−1−i⎤⎦⎥⎥⎥
ω−j può essere visualizzato come iterando attraverso le radici del cerchio dell'unità in senso orario .
{ω0,ω−1,ω−2,ω−3,ω−4,ω−5,...}={1,−i,−1,i,1,−i,...}
Inoltre, è vero che, data la radice dell'unità, vale l'uguaglianza . (Vedi perché?)nthω−j=ωn−j
Quindi,
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⎤⎦⎥⎥⎥
Quindi, otteniamo il polinomio 1 : Inversion Formula pg 73, Algorithms di Dasgupta et. al. (C) 2006C=A∗B=6+2x+6x2+2x3