Slides06 FFT
Slides06 FFT
▪ Need to compute
2𝑑−2 𝑖
𝑟 𝑥 = 𝑐𝑖 𝑥 𝑖 where 𝑐𝑖 = 𝑎𝑘 𝑏𝑖−𝑘
𝑖=0 𝑘=0
▪ Naïve computation: 𝑂 𝑑2
Polynomial Multiplication
▪ Given 𝑝 𝑥 = σ𝑑−1 𝑎
𝑖=0 𝑖 𝑥 𝑖
and 𝑞 𝑥 = σ 𝑑−1
𝑏
𝑖=0 𝑖 𝑥 𝑖
▪ Compute 𝑟 𝑥 = σ2𝑑−2
𝑖=0 𝑐𝑖 𝑥
𝑖 where 𝑐 = σ𝑖
𝑖 𝑘=0 𝑎𝑘 𝑏𝑖−𝑘
𝑑
▪ Then, 𝑟 = 𝑝1 𝑞1 + 𝑝1 𝑞2 + 𝑝2 𝑞1 𝑥 + 𝑝2 𝑞2 𝑥 𝑑 . We need to compute
2
Adapting Karatsuba Algorithm
▪ Time Complexity
𝑑
𝑇 𝑑 = 3𝑇 + 𝑂 𝑑 ⟹ 𝑇 𝑑 = 𝑂 𝑑 log2 3
2
Polynomial Multiplications vs Integer
Multiplications
Polynomial Interpolation
▪ Represent a polynomial 𝑝(𝑥) of degree 𝑑 − 1 by 𝑑 points
𝑥0 , 𝑝 𝑥0 , 𝑥1 , 𝑝 𝑥1 , … , 𝑥𝑑−1 , 𝑝 𝑥𝑑−1
where 𝑥0 , 𝑥1 , … , 𝑥𝑑−1 are distinct.
Before we move on…
▪ Let 𝑝 𝑥 = σ𝑑−1
𝑡=0 𝑎𝑡 𝑥 𝑡 . We have 𝑦 = σ𝑑−1 𝑎 𝑥 𝑡 for each 𝑖.
𝑖 𝑡=0 𝑡 𝑖
𝑦0 1 𝑥0 𝑥02 ⋯ 𝑥0𝑑−1 𝑎0
𝑦1 1 𝑥1 𝑥12 ⋯ 𝑥1𝑑−1 ⋅ 𝑎1
⋮ = ⋮
⋮ ⋮ ⋮ ⋱ ⋮
𝑦𝑑−1 1 𝑥𝑑−1 2
𝑥𝑑−1 𝑑−1
⋯ 𝑥𝑑−1 𝑎𝑑−1
▪ Multiplication Step:
– For each 𝑖 = 0,1, … , 2𝑑 − 2, compute 𝑟 𝑥𝑖 = 𝑝 𝑥𝑖 𝑞(𝑥𝑖 )
– Obtain interpolation for 𝑟(𝑥): 𝑥0 , 𝑟 𝑥0 , 𝑥1 , 𝑟 𝑥1 , … , 𝑥2𝑑−2 , 𝑟 𝑥2𝑑−2
Objective
𝑝 𝑥 = 𝑎0 + 𝑎1 𝑥 + ⋯ + 𝑎𝑑−1 𝑥 𝑑−1
𝑟 𝑥 = 𝑝 𝑥 ⋅ 𝑞(𝑥)
𝑞 𝑥 = 𝑏0 + 𝑏1 𝑥 + ⋯ + 𝑏𝑑−1 𝑥 𝑑−1 = 𝑐0 + 𝑐1 𝑥 + ⋯ + 𝑐2𝑑−2 𝑥 2𝑑−2
𝑥0 , 𝑝 𝑥0 , 𝑥1 , 𝑝 𝑥1 , … , 𝑥2𝑑−2 , 𝑝 𝑥2𝑑−2
𝑥0 , 𝑟 𝑥0 , 𝑥1 , 𝑟 𝑥1 , … , 𝑥2𝑑−2 , 𝑟 𝑥2𝑑−2
𝑥0 , 𝑞 𝑥0 , 𝑥1 , 𝑞 𝑥1 , … , 𝑥2𝑑−2 , 𝑞 𝑥2𝑑−2
Multiplication
𝑟 𝑥𝑖 = 𝑝 𝑥𝑖 𝑞(𝑥𝑖 )
Step 1: Interpolation
Interpolation Step (FFT)
Interpolation Step
▪ Let 𝐷 = 2𝑑 − 1.
▪ Assume 𝐷 is an integer power of 2.
– We want to divide and conquer!
𝐷
▪ “Left-right decomposition”: 𝑝 𝑥𝑖 = 𝑝1 𝑥𝑖 + 𝑝2 𝑥𝑖 ⋅ 𝑥𝑖 2
𝑎0 𝑎1 𝑥𝑖 … 𝐷/2−1
𝑎𝐷/2−1 𝑥𝑖
𝐷/2
𝑎𝐷/2 𝑥𝑖
𝐷/2+1
𝑎𝐷/2+1 𝑥𝑖 … 𝑎𝐷−1 𝑥𝑖𝐷−1
𝑝1 (𝑥𝑖 ) 𝑝2 (𝑥𝑖 )
Divide and Conquer: Computing 𝑝(𝑥𝑖 )
𝑝(𝑥0 )
𝑝(𝑥1 )
…
𝑝(𝑥𝐷/2−1 )
𝑝(𝑥𝐷/2 )
𝑝(𝑥𝐷/2+1 )
…
𝑝(𝑥𝐷−1 )
Lessons we learned
▪ Even-Odd Decomposition:
𝑝 𝑥 = 𝑝𝑒 𝑥 2 + 𝑥 ⋅ 𝑝𝑜 𝑥 2 ,
where
𝐷−2
2
𝑝𝑒 𝑥 = 𝑎0 + 𝑎2 𝑥 + 𝑎4 𝑥 + ⋯ + 𝑎𝐷−2 𝑥 2
𝐷−2
𝑝𝑜 𝑥 = 𝑎1 + 𝑎3 𝑥 2
+ 𝑎5 𝑥 + ⋯ + 𝑎𝐷−1 𝑥 2
▪ Choose 𝑥1 and 𝑥2 such that 𝑥1 = −𝑥2 . We have
𝑝𝑒 𝑥12 = 𝑝𝑒 𝑥22 and 𝑝𝑜 𝑥12 = 𝑝𝑜 𝑥22
An Idea to Compute 𝑝(𝑥1 ) and 𝑝(𝑥2 ) Together
𝑝 𝑥1 = 𝑝𝑒 𝑥12 + 𝑥1 ⋅ 𝑝𝑜 𝑥12
𝑝 𝑥2 = 𝑝𝑒 𝑥22 + 𝑥2 ⋅ 𝑝𝑜 𝑥22
𝐷
Two size-𝐷 computations → four two size- computations, great!
2
A Divide and Conquer Attempt
𝑝(𝑥0 ) 𝑝𝑜 (𝑥02 )
𝑝(𝑥1 ) 𝑝𝑜 (𝑥22 )
… …
𝑝(𝑥𝐷/2−1 ) 2
𝑝𝑜 (𝑥𝐷−2 )
𝑝(𝑥𝐷/2 ) 𝑂 𝐷 𝑝𝑒 (𝑥02 )
𝑝(𝑥𝐷/2+1 ) 𝑝𝑒 (𝑥12 )
… …
2
𝑝(𝑥𝐷−1 ) 𝑝𝑒 (𝑥𝐷−2 )
▪ Time Complexity
𝐷
▪ 𝑇 𝐷 = 2𝑇 + 𝑂 𝐷 ⟹ 𝑇 𝐷 = 𝑂 𝐷log𝐷
2
Are We Done?
Are We Done?
I can do it!
How to make
𝑥02 = −𝑥22 .
? ?
Complex Numbers
▪ 𝑧 = 𝑎 + 𝑏𝑖
– 𝑎: real part
– 𝑏: imaginary part
– 𝑖 = −1: imaginary unit
1. if 𝜔 = 1, return (𝑝(1));
𝐷−2
2
2. 𝑝𝑒 𝑥 = 𝑎0 + 𝑎2 𝑥 + 𝑎4 𝑥 + ⋯ + 𝑎𝐷−2 𝑥 2
𝐷−2
2
3. 𝑝𝑜 𝑥 = 𝑎1 + 𝑎3 𝑥 + 𝑎5 𝑥 + ⋯ + 𝑎𝐷−1 𝑥 2
4. 𝑝𝑒 𝜔0 , 𝑝𝑒 𝜔2 , … , 𝑝𝑒 𝜔𝐷−2 ← FFT 𝑝𝑒 , 𝜔2 ;
5. 𝑝𝑜 𝜔0 , 𝑝𝑜 𝜔2 , … , 𝑝𝑜 𝜔𝐷−2 ← FFT 𝑝𝑜 , 𝜔2 ;
6. for 𝑡 = 0,1, … , 𝐷 − 1:
7. 𝑝 𝜔𝑡 = 𝑝𝑒 𝜔2𝑡 + 𝜔𝑡 ⋅ 𝑝𝑜 𝜔2𝑡
8. return 𝑝 𝜔0 , 𝑝 𝜔1 , … , 𝑝 𝜔𝐷−1 ;
Time Complexity for Interpolation Step
Objective
𝑝 𝑥 = 𝑎0 + 𝑎1 𝑥 + ⋯ + 𝑎𝑑−1 𝑥 𝑑−1
𝑟 𝑥 = 𝑝 𝑥 ⋅ 𝑞(𝑥)
𝑞 𝑥 = 𝑏0 + 𝑏1 𝑥 + ⋯ + 𝑏𝑑−1 𝑥 𝑑−1 = 𝑐0 + 𝑐1 𝑥 + ⋯ + 𝑐2𝑑−2 𝑥 2𝑑−2
Objective
𝑝 𝑥 = 𝑎0 + 𝑎1 𝑥 + ⋯ + 𝑎𝑑−1 𝑥 𝑑−1
𝑟 𝑥 = 𝑝 𝑥 ⋅ 𝑞(𝑥)
𝑞 𝑥 = 𝑏0 + 𝑏1 𝑥 + ⋯ + 𝑏𝑑−1 𝑥 𝑑−1 = 𝑐0 + 𝑐1 𝑥 + ⋯ + 𝑐2𝑑−2 𝑥 2𝑑−2
What we want…
We Have Interpolation of 𝑟(𝑥) Now…
Example: 𝐴∗ = 𝑎ത 𝑏ത 𝐴 = 𝑎 𝑐
𝑐ҧ 𝑑ҧ 𝑏 𝑑
▪ 𝐜𝑖 , 𝐜𝑗 = σ𝐷
𝑘=1 𝜔
(𝑘−1)(𝑖−1) 𝜔 (𝑘−1)(𝑗−1)
▪ 𝐜 𝑖 , 𝐜 𝑖 = σ𝐷
𝑘=1 𝜔
(𝑘−1)(𝑖−1) 𝜔 (𝑘−1)(𝑖−1) = 𝐷
𝜔𝜔
ഥ =1
𝐴 is not orthonormal.
But we can scale it!
1
𝐴(𝜔) is orthonormal!
𝐷
2𝜋
1 𝑖
Proposition. 𝐴(𝜔) is orthonormal for 𝜔 = 𝑒 𝐷 .
𝐷
Proof.
1
▪ Let 𝐜𝑖 , 𝐜𝑗 be two arbitrary columns of 𝐴(𝜔).
𝐷 𝐷 𝐷
1 1
𝐜𝑖 , 𝐜𝑗 = ⋅ 𝜔 𝑘−1 𝑖−1 ⋅ 𝜔 (𝑘−1)(𝑗−1) = 𝜔 (𝑘−1)(𝑗−𝑖)
𝐷 𝐷
𝑘=1 𝑘=1
1
▪ If 𝑖 = 𝑗, we have 𝐜𝑖 , 𝐜𝑗 = σ𝐷 0
𝑘=1 𝜔 = 1;
𝐷
▪ If 𝑖 ≠ 𝑗, then 𝜔𝐷 = 𝑒 2𝜋𝑖 = 1
𝐷
1 1 1 − 𝜔 𝑗−𝑖 𝐷
𝐜𝑖 , 𝐜𝑗 = 𝜔 (𝑘−1)(𝑗−𝑖) = 𝑗−𝑖
=0
𝐷 𝐷 1−𝜔
𝑘=1
1
▪ Thus, 𝐴(𝜔) is orthonormal.
𝐷
Inverting 𝐴(𝜔)…
▪ We have
−1 −1 ∗
−1
1 1 1 1 1 1 ∗
𝐴 𝜔 = 𝐷⋅ ⋅𝐴 𝜔 = ⋅𝐴 𝜔 = ⋅𝐴 𝜔 = 𝐴 𝜔
𝐷 𝐷 𝐷 𝐷 𝐷 𝐷
▪ Therefore,
−1
1 1 1 −1
𝐴 𝜔 𝑖,𝑗 = 𝐴 𝜔 = ⋅ 𝜔− 𝑖−1 𝑗−1 = 𝜔 𝑖−1 𝑗−1 ,
𝐷 𝑗,𝑖 𝐷 𝐷
which implies
−1
1
𝐴 𝜔 = ⋅ 𝐴 𝜔−1 .
𝐷
After blablabla math parts
1
Putting 𝐴 𝜔 −1
= ⋅ 𝐴 𝜔−1 back
𝐷
𝒄𝟎 1 1 1 ⋯ 1 𝑟(1)
𝒄𝟏 1 𝜔 −1 𝜔−2 ⋯ 𝜔 −(𝐷−1) 𝑟(𝜔)
1
𝒄𝟐 = ⋅ 1 𝜔−2 𝜔−4 ⋯ 𝜔 −2(𝐷−1) ⋅ 𝑟(𝜔2 )
⋮ 𝐷
⋮ ⋮ ⋮ ⋱ ⋮ ⋮
𝒄𝑫−𝟏 1 𝜔 −(𝐷−1) 𝜔 −2(𝐷−1) ⋯ 𝜔 −(𝐷−1)(𝐷−1) 𝑟 𝜔𝐷−1
What we want…
▪ Naïve way also need 𝑂 𝐷2 times!
▪ How to improve it? This is 𝐴−1 !
1
Putting 𝐴 𝜔 −1
= ⋅ 𝐴 𝜔−1 back
𝐷
𝑐0 1 1 1 ⋯ 1 𝑟(1)
𝑐1 1 𝜔 −1 𝜔−2 ⋯ 𝜔 −(𝐷−1) 𝑟(𝜔)
1
𝑐2 = ⋅ 1 𝜔−2 𝜔−4 ⋯ 𝜔 −2(𝐷−1) ⋅ 𝑟(𝜔2 )
⋮ 𝐷
⋮ ⋮ ⋮ ⋱ ⋮ ⋮
𝑐𝐷−1 1 𝜔 −(𝐷−1) 𝜔 −2(𝐷−1) ⋯ 𝜔 −(𝐷−1)(𝐷−1) 𝑟 𝜔𝐷−1
Objective
𝑝 𝑥 = 𝑎0 + 𝑎1 𝑥 + ⋯ + 𝑎𝑑−1 𝑥 𝑑−1
𝑟 𝑥 = 𝑝 𝑥 ⋅ 𝑞(𝑥)
𝑞 𝑥 = 𝑏0 + 𝑏1 𝑥 + ⋯ + 𝑏𝑑−1 𝑥 𝑑−1 = 𝑐0 + 𝑐1 𝑥 + ⋯ + 𝑐2𝑑−2 𝑥 2𝑑−2