Визначте многочлени, де deg(A) = q
і deg(B) = p
. The deg(C) = q + p
.
У цьому випадку deg(C) = 1 + 2 = 3
.
A=3+xB=2x2+2C=A∗B=?
Ми можемо легко знайти C в O(n2) час множинним множенням коефіцієнтів. Застосовуючи FFT (і зворотну FFT), ми могли б досягти цього за час O(nlog(n)) . Явно:
- Перетворимо представлення коефіцієнта A і B у його значення. Цей процес називається оцінкою . Виконання ділення та перемоги (D&C) для цього потребує часу O(nlog(n)) .
- Помножимо на компоненти багаточлени в їх представленні значення. Це повертає подання значення C = A * B. Це займе O(n) час.
- Інвертуйте C, використовуючи зворотний FFT, щоб отримати С у його представленні коефіцієнта. Цей процес називається інтерполяцією, і він також потребує часу O(nlog(n)) .
Продовжуючи далі, ми представляємо кожен многочлен як вектор, значення якого - його коефіцієнти. Забиваємо вектор 0 до найменшої потужності двох, 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]
Нехай A′,B′ - представлення значень A і B відповідно. Зверніть увагу , що БПФ (швидке перетворення Фур'є ) являє собою лінійне перетворення ( лінійне відображення ) і може бути представлено у вигляді матриці, M . Таким чином
A′=Ma→B′=Mb→
Визначимо M=Mn(ω) де ω - складні корені nth складні корені єдності. Зауважте n = 4
, у цьому прикладі. Також зауважте, що запис у рядку jth та kth - ωjkn . Детальніше про матрицю DFT див. Тут
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,...}
Це можна візуалізувати як повторення через коріння одиничного кола у напрямку проти годинникової стрілки .
Також зауважте mod n
природу, тобто ω6=ω6modn=ω2=−1і−i=ω3=ω3+n
Для виконання кроку 1 ( оцінювання ) знаходимо 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⎤⎦⎥⎥⎥
Цього кроку можна досягти, використовуючи алгоритми D&C (за межами цієї відповіді).
Множення ' * B ' покомпонентно (крок 2)А'∗ Б'
А'∗ Б'= ⎡⎣⎢⎢⎢43 + i23 - я⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢4040⎤⎦⎥⎥⎥= ⎡⎣⎢⎢⎢16080⎤⎦⎥⎥⎥= С'
Нарешті, останній крок - представити C 'на коефіцієнти. Зауважте
С'= Мc⃗ ⇒ М- 1С'= М- 1Мc⃗ ⇒ c⃗ = М- 1С'
Помітка М- 1н= 1нМн( ω- 1)1іωj= - ωn / 2 + j.
М- 1н= 14⎡⎣⎢⎢⎢⎢11111ω- 1ω- 2ω- 31ω- 2ω- 4ω- 61ω- 3ω- 6ω- 9⎤⎦⎥⎥⎥⎥= 14⎡⎣⎢⎢⎢11111- я- 1i1- 11- 11i- 1- я⎤⎦⎥⎥⎥
ω- j можна візуалізувати як повторення через коріння одиничного кола загодинниковою стрілкою.
{ ω0, ω- 1, ω- 2, ω- 3, ω- 4, ω- 5, . . . } = { 1 , - я , - 1 , я , 1 , - я , . . . }
Також вірно, що з огляду на нт год корінь єдності дотримується рівність ω- j= ωn - j . (Ви бачите чому?)
Тоді
c⃗ = М- 1С'= 1нМн( ш- 1) = 14⎡⎣⎢⎢⎢11111- я- 1i1- 11- 11i- 1- я⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢16080⎤⎦⎥⎥⎥= ⎡⎣⎢⎢⎢⎢( 16 + 8 ) / 4( 16 - 8 ) / 4( 16 + 8 ) / 4( 16 - 8 ) / 4⎤⎦⎥⎥⎥⎥= ⎡⎣⎢⎢⎢6262⎤⎦⎥⎥⎥
Таким чином, ми отримуємо многочлен С= A ∗ B = 6 + 2 x + 6 x2+ 2 х3
1 : Формула інверсії pg 73, Алгоритми Дасгупта та ін. ін. (С) 2006р