Let's say we have a signal
$$x = (x_0, x_1, x_2, ..., x_{N-1})$$
$x_n \in \mathbb{C}$, that contains $N$ samples.
Joseph Fourier showed that any signal can be represented as a sum of scaled periodic functions. In case of Discrete Fourier Transform it looks like
$$x_n = \sum_{k=0}^{N-1}y_k * csin(k,n)$$
So a single sample $x_n$ is represented as a sum of values of complex sinusoids $csin(k,n)$ scaled by their factors $y_k$. How complex sinusoids look like and what parameters $k,n$ mean is explained in the next part.
DFT is a transform that takes a list of samples $x$ and returns a list of scaling factors $y$.
$$DFT(x) = y = (y_0, y_1, y_2, ..., y_{N-1})$$
This version of transform is also called a Forward Discrete Fourier Transform.
Inverse Discrete Fourier Transform (IDFT) does the opposite - takes a list of scaling factors $y$ and returns the original signal $x$
$$IDFT(y) = x = (x_0, x_1, x_2, ..., x_{N-1})$$
DFT is used to:
DFT just by computing spectrum of a signal is important by itself and considering that it is indispensible for digital filters, it becomes very important tool.
Also DFT is a good introduction to a field of transforms many of which are used to compress or somehow encode audio, images and video (mp3, ogg, jpg, mpeg).
Fast Fourier Transform (FFT) is a fast implementation of DFT. They give exactly the same result, just a method of computing the result is different. DFT computed from definition has complexity $O(n^2)$ whereas FFT has complexity $O(n\log n)$. In many cases names FFT and DFT are used interchangeably.
Some programs or libraries deliberately name their functions fft()
and ifft()
eg. Octave.