I just finished the AP Computer Science course in high school and since my school does not have any further classes, I was thinking about getting a textbook and continuing my study. APCS goes through Big O, Arrays + ArrayLists, Recursion, Linked Lists, a rough overview of some other data structures and some sorting and searching algorithms (all in Java).

I will start Calculus in school next year (if that helps to determine math level).

Since I was thinking about participating in CS tournaments, I thought it would be useful to learn more about algorithms and data structures.

I was looking at two textbooks, The Algorithm Design Manual by Steven S Skiena and Introduction to Algorithms by Cormen et. al. I was wondering which one, if any of these, would best fit my situation.

  • 2
    $\begingroup$ Welcome to Computer Science and kudos for wanting to learn more! While we have a general dislike of book requests, I think this on might just give enough information to allow for somewhat objective answers. $\endgroup$ – Raphael Jul 21 '14 at 7:13
  • $\begingroup$ many refs here $\endgroup$ – vzn Jul 21 '14 at 14:56
  • $\begingroup$ @Raphael Sorry I didn't know the books issue on here. I'll keep it in mind for later! $\endgroup$ – user20276 Jul 21 '14 at 19:13
  • $\begingroup$ @vzn Thanks, I'll take a look at that. $\endgroup$ – user20276 Jul 21 '14 at 19:14
  • $\begingroup$ Both books you are considering seem like fine choices. Second hand copies of earlier editions of Cormen et al. are quite cheap, if cost is a concern. $\endgroup$ – András Salamon Jul 22 '14 at 12:34

Personally, I recommend either Algorithms by Dasgupta, Papadimitriou, and Vazirani, or The Algorithm Design Manual by Skiena.

The Algorithm Design Manual is super-practical and full of excellent pragmatic advice, useful stories, and is well-written and easy to read. If you want to help get ready for programming contests, I strongly recommend that one.

I think Dasgupta has a better introduction from the perspective of learning the conceptual material, the theory, the proofs underneath the algorithms, etc. So, if you want to learn the theory, I recommend Dasgupta.

You won't go wrong with either; they are both outstanding.

Personally, I think they are better than Cormen. I learned from Cormen, and it's a perfectly fine book, but it can be a bit dense in places and a bit challenging to learn from, so it wouldn't be my first recommendation. Still, it's a reasonable contender and you wouldn't be led astray by it; I just think the others are better.

  • $\begingroup$ Hm, I found Cormen to be quite shallow in some key places, but ymmv. $\endgroup$ – Raphael Jul 21 '14 at 7:15

Cormen et al (CLRS) is aimed towards (undergrad) university students so it may be hard to follow with your current level of mathematics. So, if it has to be one of the two, Skiena may be the more reasonable choice as it is (also) written for professionals.

Other than that, I can recommend Robert Sedgewick's stack. Start with Introduction to Programming in Java which takes an interdisciplinary approach (hence requires little formal knowledge) and move on to Algorithms and An Introduction to the Analysis of Algorithms. Note that the latter will require you dig more into mathematics.

If you are willing do read up on necessary mathematics, almost any introductory undergrad textbook (see here for longer lists) should be a good start: pick one you can afford and read the first chapter to see if you like the style. There is no one best book; some work better for some people than others.

Note that these books will give you the university-level computer science treatment. If all you want is to be effective in school-level programming tournaments and quickly, you're likely better off with other resources, but I can't help you with that.

  • $\begingroup$ I want to concur with @Raphael: where do you want the book for? Skiena is fun, because it starts with the problem, rather than the data structure offered. But if you want to participate in programming problem solving contests, there should be nice texts that start with problem solving skills (ACM-ICPC ?). $\endgroup$ – Hendrik Jan Jul 21 '14 at 19:52

Not the answer you're looking for? Browse other questions tagged or ask your own question.