Algorithms notes from UIUC
cs.uiuc.edu
cs.uiuc.edu
I wish my university had more courses like this, but for now I'll have to learn from these.
I never really learned anything about pure algorithms in high school, but it seems like quite a bit of people in my program covered the basics at their school. I want to learn more about this style of programming so that I can compete on sites like TopCoder, but I never know where to start. I'm guessing these notes are good, but now I just need to find the time to study the material.
While it was published as a book, it really is just a neater version of the lecture notes for the class.
Wouldn't it be better to explain divide-and-conquer with some other algorithm having broader applicability?
And it probably just takes a lot of space because it's complicated. Haha.
With just a little bit of linear algebra and abstraction it is easy to gain a lot of insight about Fourier transform. For example this is the way I see it:
* First you introduce shift-invariant linear operators (circulant in the finite-dimensional case), i.e. linear operators that don't change if you shift the vector, apply the operator and then shift it back.
* Then you show that the Fourier basis is THE basis that diagonalizes shift-invariant operators. This is just matter of multiplying the Fourier vectors with the shift operator and noticing that you get back the same vectors, and it is where the cyclicity of the roots of unity comes into play. This also explains why Fourier transform works for signal processing: if you have to operate in the frequency domain, shifting your signal in time shouldn't change anything.
* Then you show that convolution (or polynomial multiplication) is shift-invariant: this is just matter of writing down a convolution and doing a change of variable
* You are done: if convolution is diagonal in the Fourier basis, it can be applied just by multiplying its coefficients in the Fourier domain.
* Now you introduce FFT as an efficient way of computing Fourier transform, but only after you understood what the transform is doing.
When I realized this, something "clicked" in my mind and I finally "understood" Fourier analysis.
Maybe I should expand on this a bit more and write a blog post about it without all the complications that I find in books.
If I wasn't in / wasn't able to attend / dropped out of college, I'd just sit and read all of these notes and I'd probably be okay.