views:

214

answers:

7

I'm a programmer who's beginning to appreciate the knowledge & usability of Algorithms in my work as I move forward with my skill-set. I don't want to take the short path by learning how to apply algorithms "as-is" but would rather like to know the foundation and fundamentals behind them. For that I need Math, at which I'm pretty "basic". I'm considering getting tuition's for that.

What I would like is to have a concise syllabus/set of topics/book which I could hand over to my math tutor to get started.

HIGHLY DESIRED: one book. the silver bullet. (fingers crossed!)

PS: I've got some leads but want to hear you guys/gurus out: Discrete Math, Combinatorics, Graph theory, Calculus, Linear Algebra, and Number Theory.

Looking forward to your answers. Thanks!

+2  A: 

PS: I've got some leads but want to hear you guys/gurus out: Discrete Math, Combinatorics, Graph theory, Calculus, Linear Algebra, and Number Theory.

Depends on what you want to do with it.

Number theory? I'd cross that off the list.

Calculus is a very big topic. It'd be very important if you wanted to do scientific computing; less so otherwise.

I'd add numerical methods to the list. "Numerical Recipes" is a book that I would say is good, but it has its detractors. You'll find a lot of these topics described within, with working code. The prose is excellent.

But it's not for beginners; it's not introductory.

HIGHLY DESIRED: one book. the silver bullet. (fingers crossed!)

You're going to be disappointed here, I'm afraid.

duffymo
Thanks duffymo for such a quick response. I understand CS is such a big topic so I'm narrowing it to CLRS which is suitably comprehensive. I wont mind a few good books if not one :)
sector7
I would also add matrix computations by golub to linear algebra and numerical algorithms. it's more narrow than numerical recipes, but goes much deeper
aaa
Matrix Computations - added! Thanks!
sector7
@aaa - an excellent recommendation. I would add Gil Strang's Linear Algebra lectures on-line from MIT. He's the bomb. (Google for the URL).
duffymo
thanks, I did not know about that.
aaa
+2  A: 

Discrete Math will be your most important topic.

I highly recommend Discrete Mathematics and Its Applications. It teaches you lots of relevant stuff to computers, such as number bases, probability, proofs, the list goes on. It actually is written to focus on providing examples that relate to computers and computation. At my college (Purdue), this book is used in the CS AND Math department, which I think is a vote of confidence.

As for graph theory, that's very important, but Introduction to Algorithms will more than take care of you on that subject.

Maybe also pick up Calc 1. It might not be directly applicable to your work, but it teaches you some different thought patterns and if you ever run into calculus notation (pretty common), you'll have more of an idea of what's going on. Other than that, the other maths are useful basically depending on what you want to do.

I found linear algebra to be interesting, but not really applicable to anything I've done. Though, I focus more on security than on scientific computing, where it might be more useful.

samoz
Linear algebra is quite useful. Google's pagerank uses it. Operations research is based on it. Many new graph related algorithms are coming up based on Semidefinite programming etc. Then you have graphics which uses it, etc etc. It is not just for scientific computing.
Moron
Thanks guys! Just the kind of answers I'm looking for. Need to collate all the info, search for books, and then the hardest part - look for someone to teach me all that! :D
sector7
`Though, I focus more on security than on scientific computing, where it might be more useful` - erm, Linear algebra and modular arithmetic are *the* most fundamental building blocks of cryptography...
BlueRaja - Danny Pflughoeft
+1  A: 

After following a lot of discussions on stackoverflow, I'd also add a basic primer in other problem solving techniques and algorithms beyond the scope of Corman's book. This would include linear, integer, and non-linear programming, constraint programming, queueing theory, simulation modeling, and the use of various search algorithms like genetic algorithms, simulated annealing, and tabu search. You won't necessarily find a book to cover ALL these subjects, but many programmers have only limited exposure to these concepts in school. A good course in probability and statistics couldn't hurt either. I agree that calculus and its followup, differential equations, won't be of much help. But a good course in linear algebra forms a foundation for alot of material in the study of algorithms and statistics. I'd recommend Strang as a start there.

Grembo
Strang look a bit "intermediate-to-advanced" stuff innit? Thanks for the info Grembo!
sector7
+2  A: 

I would like to advocate for linear algebra. When you run into a calculus, probability, or most other high level math problems, it is often obvious what type of math is required. With linear algebra, many problem have complex but rudimentary solutions using basic math. This leads to naive developers to construct overly complicated algorithms to solve trivial linear algebra problems.

I've seen really bad code that would have been much cleaner if the developer had basic understanding of vectors and linear algebra. In one of my computer graphics courses, the bulk of my classmates used lines and lines of trig functions to solve what was essentially an addition and subtraction problem.

My favorite example comes from an online tutorial, where the author normalized a vector by computing the angle between the x-axis, and computing the sin and cos of the angle.

mikerobi
Thanks for the advice mikerobi!
sector7
Good advice (see for example [here](http://stackoverflow.com/questions/2930942/fastest-way-to-find-the-rotation-of-a-vector))
BlueRaja - Danny Pflughoeft
+1  A: 

CLRS states in the introduction the math prerequisites:

You should have some facility with proofs by mathematical induction. A few portions of the book rely on some knowledge of elementary calculus. Beyond that, Parts I and VIII of this book teach you all the mathematical techniques you will need.

The majority of it is in part eight.

The text also has a comprehensive bibliography. Here are some that come up repeatedly:

  1. Even, Shimon. Graph Algorithms. Rockville, MD: Computer Science Press, 1979. ISBN: 0914894218.
  2. Feller, William. An Introduction to Probability Theory and Its Applications. 3rd ed. 2 vols. New York, NY: John Wiley & Sons, 1968, 1971. ISBN: 0471257087. ISBN: 0471257095.
  3. Lawler, Eugene L. Combinatorial Optimization: Networks and Matroids. New York, NY: Holt, Rinehart, and Winston, 1976. ISBN: 0030848660.
  4. Liu, Chung L. Introduction to Combinatorial Mathematics. New York, NY: McGraw-Hill, 1968. ISBN: 0070381240.
  5. Niven, Ivan, and Herbert S. Zuckerman. An Introduction to the Theory of Numbers. 4th ed. New York, NY: John Wiley & Sons, 1980. ISBN: 0471028517.
fatcat1111
I don't have CLRS atm; this is something I definitely was looking for. Much appreciated fatcat1111!"Parts I and VIII of this book teach you all the mathematical techniques you will need" - somehow I don't believe that though. I've heard horror stories from beginners. Can someone who's read it pls vouch?
sector7
+4  A: 

At MIT, students are required to take Mathematics for Computer Science before taking Intro to Algorithms which uses CLRS. The lecture notes (PDF) from the Math class are pretty good and self-contained.

namin
+1 this is an excellent find, namin! Looks like an ideal starting point for someone who wants to get better at the many aspects of discrete math! I would recommend it!
Krystian
+2 Great great find! Even though the content in lecture notes is still beyond my (ahem) elementary math, that gives me the big picture of what I can/should expect. Thank you sir namin!
sector7
+1  A: 

I doubt just one, single book would satisfy all your needs. When it comes to number theory, I would recommend the book "Number Theory for Computing". I used it for some undergraduate courses and I like its style, not too complicated, but not "dumbed down" either.

Krystian
Looks good! I might even check out Elementary Number Theory. Thanks Krystian!
sector7