GitHunt
AB

Abdelaal495/Ring-Isomorphisms-and-The-FFT

An implementation of the Radix-2 Decimation-In-Time (DIT) form of the Cooley-Tukey FFT algorithm, as well as its inverse. The algorithm is used to multiply 2 polynomials and compute the convolution of 2 vectors in O(nlogn) time.

Polynomials "are" Discrete Signals?

Rings are a very interesting class of algebraic structures in mathematics; a Ring can be thought of as a set of mathematical objects that can be added, subtracted, and
multiplied (in more formal terms from abstract algebra, the set should be an Abelian group under addition, and should satisfy commutativity and distributivity under
multiplication). It is trivial to observe that real polynomials and real discrete signals are both rings (the operations for signals are addition and convolution).
The elegant part in this argument is as follows: there is a bijective mapping from real polynomials to real discrete signals that completely preserves the addition
and multiplication (convolution) operations, more formally known as a Ring Isomorphism. In simpler terms, polynomials and signals exactly identical in structure from
a purely algebraic perspective, despite how different they are in substance, and convolution between signals can be accurately mapped to polynomial multiplication!

Fast Polynomial Multiplication Using The FFT

Given that we can draw an isomorphism between discrete signals and real polynomials, the Fast Fourier Transform (radix-2) was used in this repository to speed up
polynomial multiplication by viewing it as a convolution of discrete signals, accomplishing multiplication in O(log(n)) time. Potential future applications are in public
key cryptosystems involving ideal lattices.

Languages

C++100.0%

Contributors

Created June 27, 2022
Updated February 6, 2023