Polinomları tanımlayın, nerede deg(A) = q
ve deg(B) = p
. deg(C) = q + p
.
Bu durumda deg(C) = 1 + 2 = 3
,.
A=3+xB=2x2+2C=A∗B=?
Kolayca Cı bulabilirsiniz O(n2) katsayılarının kaba kuvvet çoğalması ile zaman. FFT (ve ters FFT) uygulayarak bunu O(nlog(n)) zamanında başarabiliriz . Açıkça:
- A ve B'nin katsayı gösterimini değer temsiline dönüştürün. Bu sürece değerlendirme denir . Bunun için Böl ve Conquer (D&C) yapmak O(nlog(n)) zaman alacaktır .
- Polinomları bileşen temsiliyle değer temsillerinde çarpın. Bu, C = A * B'nin değer gösterimini döndürür. Bu O(n) zaman alır.
- C'yi ters katsayılı gösterimde almak için ters FFT kullanarak C'yi ters çevirin. Bu işleme enterpolasyon denir ve ayrıca O(nlog(n)) zaman alır.
Devam edersek, her polinomu, değeri katsayıları olan bir vektör olarak temsil ederiz. Vektörü 0 ile en küçük iki, değerine kadar dolduruyoruzn=2k,n≥deg(C) . Böylece n=4 . İki gücün seçilmesi, bize bölün ve fethetme algoritmamızı tekrar tekrar uygulamak için bir yol sağlar.
A=3+x+0x2+0x3⇒B=2+0x+2x+0x3⇒a⃗ =[3,1,0,0]b⃗ =[2,0,2,0]
Let A′,B′ , sırasıyla A ve B değeri temsili olarak. FFT (Hızlı olduğuna dikkat edin Fourier Dönüşümü ) lineer transformasyonu (olup lineer harita ) ve bir matris olarak temsil edilebilir M . Böylece
A′=Ma→B′=Mb→
M=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⎤⎦⎥⎥⎥⎥
ω4=4th
{ω0,ω1,ω2,ω3,ω4,ω5,...}={1,i,−1,−i,1,i,...}
Bu, birim dairenin köklerini saat yönünün tersine çevirerek görüntülenebilir.
mod n
ω6=ω6modn=ω2=−1−i=ω3=ω3+n
A′,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⎤⎦⎥⎥⎥
Bu adım, D&C algoritmaları kullanılarak gerçekleştirilebilir (bu cevabın kapsamı dışında).
çarpmaA′∗B′
A′∗B′=⎡⎣⎢⎢⎢43+i23−i⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢4040⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢16080⎤⎦⎥⎥⎥=C′
Son olarak, son adım C 'yi katsayılara dönüştürmektir. ihbar
C′=Mc⃗ ⇒M−1C′=M−1Mc⃗ ⇒c⃗ =M−1C′
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
{ω0,ω−1,ω−2,ω−3,ω−4,ω−5,...}={1,−i,−1,i,1,−i,...}
Ayrıca, birliğin kökü göz önüne alındığında, eşitlik nin tuttuğu doğrudur . (Nedenini görüyor musun?)nthω−j=ωn−j
Ardından,
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⎤⎦⎥⎥⎥
Böylece, polinom 1 elde edilir : Inversion Formula pg 73, Dasgupta et. ark. (C) 2006C=A∗B=6+2x+6x2+2x3