05
FFT Animations
Chapter 5 • Advanced
150 min
FFT Animations
Fast Fourier Transform (FFT)
FFT is an efficient algorithm to compute the Discrete Fourier Transform (DFT).
Polynomial Multiplication
Problem
Multiply two polynomials:
A(x) = a₀ + a₁x + a₂x² + ... + aₙxⁿ
B(x) = b₀ + b₁x + b₂x² + ... + bₘxᵐ
Naive Method: O(n²)
python.js
def multiply_polynomials_naive(A, B):
"""Naive polynomial multiplication: O(n²)"""
n, m = len(A), len(B)
result = [0] * (n + m - 1)
for i in range(n):
for j in range(m):
result[i + j] += A[i] * B[j]
return result
FFT Approach
Key Idea
- Evaluate polynomials at 2n points
- Multiply point values: O(n)
- Interpolate to get coefficients: O(n log n)
Total: O(n log n)
FFT Algorithm
Divide & Conquer
python.js
import math
import cmath
def fft(poly, inverse=False):
"""
Fast Fourier Transform.
Time: O(n log n)
"""
n = len(poly)
# Base case
if n == 1:
return poly
# Divide: Split into even and odd
even = fft(poly[0::2], inverse)
odd = fft(poly[1::2], inverse)
# Combine
result = [0] * n
angle = 2 * math.pi / n
if inverse:
angle = -angle
for i in range(n // 2):
twiddle = cmath.exp(1j * angle * i)
result[i] = even[i] + twiddle * odd[i]
result[i + n // 2] = even[i] - twiddle * odd[i]
if inverse:
result = [x / n for x in result]
return result
def ifft(poly):
"""Inverse FFT"""
return fft(poly, inverse=True)
def multiply_polynomials_fft(A, B):
"""Multiply polynomials using FFT: O(n log n)"""
# Pad to power of 2
n = 1
while n < len(A) + len(B):
n <<= 1
A_padded = A + [0] * (n - len(A))
B_padded = B + [0] * (n - len(B))
# FFT
A_fft = fft(A_padded)
B_fft = fft(B_padded)
# Point-wise multiplication
C_fft = [A_fft[i] * B_fft[i] for i in range(n)]
# Inverse FFT
C = ifft(C_fft)
# Round to integers
return [round(x.real) for x in C[:len(A) + len(B) - 1]]
Applications
- Polynomial multiplication: O(n log n) vs O(n²)
- Signal processing: Filtering, convolution
- Image processing: Convolution operations
- Number theory: Large integer multiplication
- Data compression: Audio/video encoding
Complexity
- Time: O(n log n)
- Space: O(n)
Practice Problems
- Implement FFT and IFFT
- Multiply polynomials using FFT
- Multiply large integers using FFT
- Convolution of sequences
- Visualize FFT on signals