Katakanlah Anda memiliki dua polinomial: dan .2 x 2 + 2
Saya mencoba memahami bagaimana FFT membantu kami melipatgandakan polinomial ini. Namun, saya tidak dapat menemukan contoh yang berhasil. Dapatkah seseorang menunjukkan kepada saya bagaimana algoritma FFT akan melipatgandakan polinomial ini. (Catatan: tidak ada yang istimewa dari polinomial ini, tetapi saya ingin membuatnya sederhana agar lebih mudah diikuti.)
Saya telah melihat algoritma dalam pseudocode, tetapi semuanya tampaknya memiliki masalah (tidak menentukan apa input seharusnya, variabel yang tidak ditentukan). Dan yang mengejutkan, saya tidak dapat menemukan di mana ada orang yang benar-benar berjalan (dengan tangan) contoh mengalikan polinomial menggunakan FFT.
Jawaban:
Misalkan kita menggunakan akar keempat dari persatuan, yang sesuai dengan mengganti untuk . Kami juga menggunakan decimation-in-time daripada decimation-in-frequency dalam algoritma FFT. (Kami juga menerapkan operasi pembalikan bit dengan mulus.)1,i,−1,−i x
Untuk menghitung transformasi polinomial pertama, kita mulai dengan menulis koefisien: Transformasi Fourier dari koefisien genap adalah , dan koefisien ganjil adalah . (Transformasi ini hanya .) Oleh karena itu transformasi polinomial pertama adalah Ini diperoleh dengan menggunakan , . (Dari perhitungan faktor dua arah).3,1,0,0. 3,0 3,3 1,0 1,1 a,b↦a+b,a−b 4,3+i,2,3−i. X0,2=E0±O0 X1,3=E1∓iO1
Mari kita lakukan hal yang sama untuk polinomial kedua. Koefisiennya adalah Koefisien genap mentransformasikan ke , dan koefisien ganjil mentransformasikan menjadi . Oleh karena itu transformasi polinomial kedua adalah2,0,2,0. 2,2 4,0 0,0 0,0 4 , 0 , 4 , 0.
Kami memperoleh transformasi Fourier dari polinomial produk dengan mengalikan dua transformasi Fourier secara langsung: Masih harus menghitung transformasi Fourier terbalik. Koefisien genap invers-transform menjadi , dan koefisien ganjil invers-transform menjadi . (Transformasi terbalik adalah ) Oleh karena itu transformasi polinomial produk adalah Ini diperoleh dengan menggunakan , . Kami telah mendapatkan jawaban yang diinginkan16 , 0 , 8 , 0. 16 , 8 12 , 4 0 , 0 0 , 0 x , y↦ ( x + y) / 2 , ( x - y) / 2 6 , 2 , 6 , 2. X0 , 2= ( E0± O0) / 2 X1 , 3= ( E1∓ i O1) / 2 ( 3 + x ) ( 2 + 2 x2) = 6 + 2 x + 6 x2+ 2 x3.
sumber
Tentukan polinomial, di mana
deg(A) = q
dandeg(B) = p
. Thedeg(C) = q + p
.Dalam hal ini
deg(C) = 1 + 2 = 3
,.Kita dapat dengan mudah menemukan C dalam waktu dengan perkalian koefisien-koefisien kasar. Dengan menerapkan FFT (dan FFT terbalik), kita dapat mencapai ini dalam waktu . Secara eksplisit:O(n2) O(nlog(n))
Melanjutkan bersama, kami mewakili setiap polinomial sebagai vektor yang nilainya adalah koefisiennya. Kami mengisi vektor dengan 0 hingga kekuatan terkecil dari dua, . Jadi . Memilih kekuatan dua memberi kita cara untuk menerapkan algoritme divide-and-menaklukkan kami secara rekursif.n=2k,n≥deg(C) n=4
Biarkan menjadi representasi nilai dari A dan B, masing-masing. Perhatikan bahwa FFT (Fast Fourier Transform ) adalah transformasi linear ( peta linear ) dan dapat direpresentasikan sebagai matriks, . DemikianA′,B′ MM
Kami mendefinisikan mana adalah akar kompleks akar kompleks persatuan. Perhatikan , dalam contoh ini. Perhatikan juga bahwa entri pada baris dan kolom adalah . Lihat lebih lanjut tentang matriks DFT di siniM=Mn(ω) ω nt h j t h k t h ω j k njt h kt h ωjkn
n = 4
Karena akar persatuan , kami memiliki persamaan kesetaraan yang diurutkan:ω4= 4t h
Ini dapat divisualisasikan sebagai pengulangan melalui akar dari lingkaran unit dalam arah berlawanan arah jarum jam .
Perhatikan jugaω6=ω6modn=ω2=−1 −i=ω3=ω3+n
mod n
sifatnya, yaitu danUntuk menyelesaikan langkah 1 ( evaluasi ) kami menemukan dengan melakukanA′,B′
Langkah ini dapat dicapai dengan menggunakan algoritma D&C (di luar cakupan jawaban ini).
Multiply komponen (langkah 2)SEBUAH′∗ B′
Akhirnya, langkah terakhir adalah merepresentasikan C 'menjadi koefisien. Melihat
Perhatikan 1 dan .M.- 1n= 1nM.n( ω- 1) ωj=-ωn/2+jωj= - ωn / 2 + j
Juga, benar bahwa, mengingat akar persatuan , persamaan berlaku. (Apakah kamu mengerti mengapa?)nt h ω- j= ωn - j
Kemudian,c⃗ = M- 1C′= 1nM.n( b- 1) = 14⎡⎣⎢⎢⎢11111- saya- 1saya1- 11- 11saya- 1- saya⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢16080⎤⎦⎥⎥⎥= ⎡⎣⎢⎢⎢⎢( 16 + 8 ) / 4( 16 - 8 ) / 4( 16 + 8 ) / 4( 16 - 8 ) / 4⎤⎦⎥⎥⎥⎥= ⎡⎣⎢⎢⎢6262⎤⎦⎥⎥⎥
Jadi, kita mendapatkan polinomial 1 : Formula Pembalikan pg 73, Algoritma oleh Dasgupta et. Al. (C) 2006C= A ∗ B = 6 + 2 x + 6 x2+ 2 x3
sumber