To cut a long story short, I am a CS student that has received no formal Post-16 Maths education for years. Right now even my Algebra is extremely rusty and I have a couple of months to shape up my skills. I've got a couple of video lectures in my bookmarks, consisting of:
My aim as of today is to be able to read the CLRS book Introduction to Algorithms and be able to follow the Mathematical notation in that, as well as being able to confidently read and back-up any arguments written in Mathematical notation.
Aside from these video lectures, can anyone recommend any good books to help teach someone wishing to go from a low-foundation level to a more advanced level of Mathematics?
Just as a note, I've taken a first-year module in Analytical Modelling, so I understand some of the basic concepts of Discrete Mathematics.
EDIT: Just a note to those that are looking to learn Linear Algebra using the Video Lectures I have posted up. Peteris Krumins' Blog contains a r un-through of these lecture notes ^{[7]} as well as his own commentary and lecture notes, an invaluable resource for those looking to follow the lectures too.
Concrete Mathematics: A Foundation for Computer Science ^{[1]} is a fairly well-known book that might help -- Donald Knuth is one of the authors.
[1] http://rads.stackoverflow.com/amzn/click/0201558025Well, there's always the canonical Discrete math text ^{[1]}. I think being able to advance your discrete math skills past the basics will probably be the biggest help in getting through algorithms.
[1] http://rads.stackoverflow.com/amzn/click/0072899050What's missing in your list is I think one of the most fundamental topics: probability (although statistics will have some overlap).
If you want to follow CLRS, you need to understand how probability works. For example the proof of Quicksort's average case behaviour requires an expectation argument that isn't too hard, but might throw you if you don't understand it.
This ^{[1]} book by Mitzenmacher and Upfal is my favourite probability introduction. It's not easy, but it's very readable and gives a proper feel for applications as well as theory.
You can leave differential equations for a while as they're not tremendously vital for the areas you're looking at.
Discrete mathematics is the all important, catch-all topic. Know some basic combinatorics: formulae for n choose k, permutations etc. Make sure you understand what a relation is. Basic set theory is important, and you should know what someone means when they say "Consider a graph G=(V,E)". Any introductory text will get you to those levels, but if you really want to say you've nailed it the hard (and perhaps most rewarding) way, get cracking on Concrete Mathematics ^{[2]}.
You should also know a little number theory, just enough to be dangerous. This is again important for some stuff in CLRS. If you know a little something about prime numbers, and modulo arithmetic you're probably good to go, but keep a reference nearby when you meet a proof step you're not expecting.
[1] http://rads.stackoverflow.com/amzn/click/0521835402I've found Discrete Mathematics for Computing ^{[1]} by Peter Grossman to be quite helpful. It's basically an introduction to different parts of CS maths. It includes chapters on algorithms, number bases, computer arithmetic (at the binary level), logic, sets, induction & recursion, boolean algebra, graph theory, and trees. A really wide range of material, with exercises.
[1] http://rads.stackoverflow.com/amzn/click/0333981111In your list of topics, I think some are definitely more important than others. Certainly, this depends on the industry you go into, but I've reordered and modified your list based on priority:
(highest priority)
(lowest priority)
And, other than all of these formally defined fields, please, PLEASE be able to do basic math in your head. It bothers me to no end when I see programmers around me not be able to convert 101 from binary to decimal without calc.exe.
Robert Breezer: "A First Course in Linear Algebra " The first hit with Google.
Not only free as free beer, but also free as in freedom. Very good both for total beginners and for advanced students. I have learned it through. I have never seen another math book with such good quality.
If you've only got a couple months to catch up on your math skills, unless you're inherently sharp at math, you'll find it extremely difficult to catch up. I would strongly recommend focusing on a few core areas and not worrying about the higher level math subjects. In particular, pre-calc algebra, discrete math, and statistics are the areas you'll want to concentrate on, and probably some basic geometry and trig, too. Calculus is a nice-to-have if you can squeeze it in, but differential equations is a little overboard, in my opinion. I would also consider linear algebra to be fluff as well, unless you plan on going into computer graphics.
This is all just my opinion, of course.
You should look into logic. To be able to model and reason about complex systems is invaluable. (Yeah, yeah - I took the line from the cover of the book)
Great book this is ^{[1]}
[1] http://rads.stackoverflow.com/amzn/click/052154310XDo not try to shortcut your math education! My experience has been that the highest level math classes still rely on very solid algebra skills.
Look at the first math class your curriculum requires and make sure you understand the final from the prereq courses.
I can't say I read the whole book, but this one seemed comfortably comprehensive while thankfully brief and direct with a focus on mathematics for the science and engineering student.
Maths: A Student's Survival Guide ^{[1]}
And I actually studied in an American curriculum so yes, it translates just fine.
Here are the sections I wish my high school (and first year of undergrad CS) had actually taught me as well as this book did:
7) Binomial series and proof by induction;
8) Differentiation;
9) Integration;
10) Complex numbers;
11) Working with vectors.
that numbering should go from 7 through to 11. Markdown's messing with me.
[1] http://www.cambridge.org/uk/catalogue/catalogue.asp?isbn=9780521017077Check out similar asked question: Useful math for programmers ^{[1]}
[1] http://stackoverflow.com/questions/11743/useful-math-for-programmersYou might want to get your hands on " What is Mathematics? ^{[1]}
[1] http://books.google.co.in/books?id=%5FkYBqLc5QoQC&dq=what%2Bis%2Bmathematics&printsec=frontcover&source=bl&ots=qNQ8GPBXpJ&sig=YVzPSeLb7xdWvDbZODnFWIkOJ9I&hl=en&ei=Y63oSdW%5FCpy5jAfHkNGeCg&sa=X&oi=book%5Fresult&ct=result&resnum=2I took a Discrete Math class with a text by Biggs. Discrete Math is your programming friend.
http://www.cs.princeton.edu/courses/archive/spring10/cos433/mathcs.pdf
I have not read this book in it's entirety but it looks very promising.