Math behind Algorithms
mnemonicsloth: Intro to Algorithms by CLR is the best first book on the subject I know of.  MIT has a complete set of lecture videos:http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Compute...But based on my own (admittedly weird) experience, Algorithms per se might not be the best place to start.  You might do better starting off with graph theory instead because:1. It's an equally fundamental entree to the same theoretical CS material.  Graphs abstract data structures like algorithms abstract programs.1a.  You wind up learning a lot of the same material.2. The "core" of Algorithmic analysis is solving counting problems with recurrence relations, sort of like the way "canceling terms" is the core of high school algebra.  It's easy to explain the concept in a few words, so it's easy to think you understand it, but you have to practice it in a lot of different contexts to really master the skill.  There's also a lot of deep theory hiding below the surface.  Graph theory, on the other hand, starts out with definitions that you can blow through in a day, and then builds progressively more complicated structures for you to analyze.3. Most of the proofs in graph theory actually involve writing programs to construct an existence proof or verify a property.  Obviously this is also true of algorithms, but the correspondence between proofs and programs is harder to see there.4. Graph theory touches higher math in more accessible places than algorithmic analysis.  You can analyze graphs with matrices, mess around with their eigenvalues (although I think the preferred term is "spectrum"), do some group theory -- "advanced undergraduate" stuff.  The only place in higher math where algorithms really come into play is number theory, which requires a lot of theoretical machinery to make its sausages.