0% found this document useful (0 votes)
403 views20 pages

FFT

This document describes the fast Fourier transform (FFT) algorithm and how it can be used to efficiently multiply polynomials and large integers. It begins by introducing polynomials and their representation as coefficients of terms. It then describes how to evaluate polynomials using Horner's rule and how polynomial multiplication normally takes quadratic time. The document introduces primitive roots of unity and how they enable representing polynomials as discrete Fourier transforms. It then describes how the FFT algorithm uses a divide-and-conquer approach to compute the discrete Fourier transform in only linearithmic time. This allows polynomial multiplication to also be performed in linearithmic time. Finally, it explains how the FFT can be applied to multiply large integers by representing them as polynomials over a finite field.

Uploaded by

vivek singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
403 views20 pages

FFT

This document describes the fast Fourier transform (FFT) algorithm and how it can be used to efficiently multiply polynomials and large integers. It begins by introducing polynomials and their representation as coefficients of terms. It then describes how to evaluate polynomials using Horner's rule and how polynomial multiplication normally takes quadratic time. The document introduces primitive roots of unity and how they enable representing polynomials as discrete Fourier transforms. It then describes how the FFT algorithm uses a divide-and-conquer approach to compute the discrete Fourier transform in only linearithmic time. This allows polynomial multiplication to also be performed in linearithmic time. Finally, it explains how the FFT can be applied to multiply large integers by representing them as polynomials over a finite field.

Uploaded by

vivek singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 20

The Fast Fourier Transform

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

FFT 1
Outline and Reading
Polynomial Multiplication Problem
Primitive Roots of Unity (§10.4.1)
The Discrete Fourier Transform (§10.4.2)
The FFT Algorithm (§10.4.3)
Integer Multiplication (§10.4.4)
Java FFT Integer Multiplication (§10.5)

FFT 2
Polynomials
Polynomial:
p( x )  5  2 x  8 x 2  3x 3  4 x 4
In general,

n 1
p( x )   ai x i

i 0

or
n 1
p( x )  a0  a1 x  a2 x    an 1 x
2

FFT 3
Polynomial Evaluation
Horner’s Rule:
 Given coefficients (a0,a1,a2,…,an-1), defining polynomial
n 1
p( x )   a x i
i

i 0
 Given x, we can evaluate p(x) in O(n) time using the equation

p( x)  a0  x(a1  x(a2    x(an2  xan1 )))


Eval(A,x): [Where A=(a0,a1,a2,…,an-1)]
 If n=1, then return a0
 Else,
 Let A’=(a1,a2,…,an-1) [assume this can be done in constant time]
 return a0+x*Eval(A’,x)
FFT 4
Polynomial Multiplication
Problem
Given coefficients (a0,a1,a2,…,an-1) and (b0,b1,b2,…,bn-1) defining
two polynomials, p() and q(), and number x, compute p(x)q(x).

Horner’s rule doesn’t help, since


n 1
p( x )q( x )   ci x i

i 0
where
i
ci   a j bi  j
j 0
A straightforward evaluation would take O(n2) time. The
“magical” FFT will do it in O(n log n) time.

FFT 5
Polynomial Interpolation &
Polynomial Multiplication
Given a set of n points in the plane with distinct x-coordinates,
there is exactly one (n-1)-degree polynomial going through all
these points.
Alternate approach to computing p(x)q(x):
 Calculate p() on 2n x-values, x0,x1,…,x2n-1.
 Calculate q() on the same 2n x values.
 Find the (2n-1)-degree polynomial that goes through the points
{(x0,p(x0)q(x0)), (x1,p(x1)q(x1)), …, (x2n-1,p(x2n-1)q(x2n-1))}.

Unfortunately, a straightforward evaluation would still take


O(n2) time, as we would need to apply an O(n)-time Horner’s
Rule evaluation to 2n different points.
The “magical” FFT will do it in O(n log n) time, by picking 2n
points that are easy to evaluate…

FFT 6
Primitive Roots of Unity
A number w is a primitive n-th root of unity, for n>1, if
 wn = 1
 The numbers 1, w, w2, …, wn-1 are all distinct
Example 1: x x^2 x^3 x^4 x^5 x^6 x^7 x^8 x^9 x^10
1 1 1 1 1 1 1 1 1 1
 Z*11: 2 4 8 5 10 9 7 3 6 1
3 9 5 4 1 3 9 5 4 1
4 5 9 3 1 4 5 9 3 1
5 3 4 9 1 5 3 4 9 1
6 3 7 9 10 5 8 4 2 1
7 5 2 3 10 4 6 9 8 1
8 9 6 4 10 3 2 5 7 1
9 4 3 5 1 9 4 3 5 1
10 1 10 1 10 1 10 1 10 1

 2, 6, 7, 8 are 10-th roots of unity in Z*11


 22=4, 62=3, 72=5, 82=9 are 5-th roots of unity in Z*11
 2-1=6, 3-1=4, 4-1=3, 5-1=9, 6-1=2, 7-1=8, 8-1=7, 9-1=5
Example 2: The complex number e2pi/n is a primitive n-th root of
unity, where i   1 FFT 7
Properties of
Primitive Roots of Unity
Inverse Property: If w is a primitive root of unity, then w -1=wn-1
 Proof: wwn-1=wn=1 n 1

Cancellation Property: For non-zero -n<k<n, w


j 0
kj
0
 Proof: n 1
(w k )n  1 (w n )k  1 (1)k  1 11
w
j 0
kj

w 1
k

w 1
k
 
w 1 w 1
k k
0

Reduction Property: If w is a primitve (2n)-th root of unity, then


w2 is a primitive n-th root of unity.
 Proof: If 1,w,w2,…,w2n-1 are all distinct, so are 1,w2,(w2)2,…,(w2)n-1

Reflective Property: If n is even, then wn/2 = -1.


 Proof: By the cancellation property, for k=n/2:
n 1
0  w ( n / 2) j  w 0  w n / 2  w 0  w n / 2    w 0  w n / 2  (n / 2)(1  w n / 2 )
j 0

 Corollary: wk+n/2= -wk.


FFT 8
The Discrete Fourier Transform
Given coefficients (a0,a1,a2,…,an-1) for an (n-1)-degree polynomial
p(x)
The Discrete Fourier Transform is to evaluate p at the values
 1,w,w2,…,wn-1
 We produce (y0,y1,y2,…,yn-1), where yj=p(wj)
n 1
That is,
y j   aiw
 ij

i 0
 Matrix form: y=Fa, where F[i,j]=wij.

The Inverse Discrete Fourier Transform recovers the


coefficients of an (n-1)-degree polynomial given its values at
1,w,w2,…,wn-1
 Matrix form: a=F -1y, where F -1[i,j]=w-ij/n.

FFT 9
Correctness of the
inverse DFT
The DFT and inverse DFT really are inverse operations
Proof: Let A=F -1F. We want to show that A=I, where
1 n 1 ki kj
A[i, j ]   w w
n k 0
If i=j, then
1 n 1 ki ki 1 n 1 0 1
A[i, i ]  w w  w  n  1
n k 0 n k 0 n

If i and j are different, then

1 n 1 ( j i ) k
A[i, j ]   w 0 (by Cancellati on Property)
n k 0

FFT 10
Convolution [a0,a1,a2,...,an-1] [b0,b1,b2,...,bn-1]

The DFT and the


inverse DFT can be
Pad with n 0's Pad with n 0's

used to multiply two [a0,a1,a2,...,an-1,0,0,...,0] [b0,b1,b2,...,bn-1,0,0,...,0]


polynomials
DFT DFT

[y0,y1,y2,...,y2n-1] [z0,z1,z2,...,z2n-1]
So we can get the
coefficients of the Component
Multiply
product polynomial
quickly if we can
compute the DFT (and [y0z0,y1z1,...,y2n-1z2n-1]

its inverse) quickly…


inverse DFT

[c0,c1,c2,...,c2n-1]
(Convolution)
FFT 11
The Fast Fourier Transform
The FFT is an efficient algorithm for computing the DFT
The FFT is based on the divide-and-conquer paradigm:
 If n is even, we can divide a polynomial

into two polynomials

and we can write

FFT 12
The FFT Algorithm

The running time is O(n log n). [inverse FFT is similar]


FFT 13
Multiplying Big Integers
Given N-bit integers I and J, compute IJ.
Assume: we can multiply words of O(log N) bits in constant time.
Setup: Find a prime p=cn+1 that can be represented in one word,
and set m=(log p)/3, so that we can view I and J as n-length
vectors of m-bit words.
Finding a primitive root of unity.
 Find a generator x of Z*p.
 Then w=xc is a primitive n-th root of unity in Z*p (arithmetic is mod p)
Apply convolution and FFT algorithm to compute the convolution C
of the vector representations of I and J.
n 1
Then compute
K   ci 2mi
i 0

K is a vector representing IJ, and takes O(n log n) time to compute.

FFT 14
Java Example:
Multiplying Big Integers
Setup: Define BigInt class, and include essential parameters,
including the prime, P, and primitive root of unity, OMEGA.

10;

FFT 15
Java Integer
Multiply Method
Use convolution to multiply two big integers, this and val:

FFT 16
Java FFT in Z*p

FFT 17
Support Methods for
Java FFT in Z*p

FFT 18
Non-recursive FFT
There is also a non-recursive version of the FFT
 Performs the FFT in place
 Precomputes all roots of unity
 Performs a cumulative collection of shuffles on A and
on B prior to the FFT, which amounts to assigning
the value at index i to the index bit-reverse(i).
The code is a bit more complex, but the running
time is faster by a constant, due to improved
overhead

FFT 19
Experimental Results
Log-log scale shows traditional multiply runs in
O(n2) time, while FFT versions are almost linear

FFT 20

You might also like