# Good explanatory resource for algorithm techniques such as greedy, backtracking and recursive functions

What would be a good book/resource that explains the basic idea behind those techniques, how to use (and maybe when to use them) and plenty of exercises with perhaps some worked examples (kind of like when for loops were introduced for the first time you were asked to use one to compute sums of odd numbers, even numbers etc.) ?

If the explanation is both formal and "plain" (for dummies style explanation) that would be great. Thanks!

-
Introduction to algorithms, Cormen et al. – AJed Jan 6 '13 at 17:55
Yes I know about the famous Cormen book but I find it a little heavy and intimidating. I need something that can help me ease into that level of technicality. – andreas.vitikan Jan 6 '13 at 20:03
I wonder whether you mean "primitive recursive functions" when you write "recursive functions", or whether you are also interested in general $\mu$-recursive functions like the Ackermann function (and possibly also including partial functions). Your focus on "algorithm techniques" indicates that you probably aren't that interested in general $\mu$-recursive functions, but I decided to ask nevertheless. – Thomas Klimpel Jan 8 '13 at 0:42
Yes, I meant primitive recursive functions. – andreas.vitikan Jan 8 '13 at 6:55

The Coursera course on Algorithms running currently suggests four books:

• CLRS - Cormen, Leiserson, Rivest, and Stein, Introdution to Algorithms (3rd edition)
• DPV - Dasgupta, Papadimitriou, and Vazirani, Algorithms
• KT - Kleinberg and Tardos, Algorithm Design
• SW - Sedgewick and Wayne, Algorithms (4th edition)

Sedgewick and Wayne is apparently very implementation-oriented, with tons of Java examples as well as testing metrics and lots of models. I haven't checked it out myself, but I will be.

Another great book is the Algorithms Design Manual by Skiena, apparently also very programmer-friendly.

-

I think it's hard to beat the CLRS book (Introduction to Algorithms by Cormen, Leiserson, Rivest, Stein) in terms of depth, breadth, or clarity of explanation. Algorithm Design, by Kleinberg and Tardos, is also very good and not nearly as intimidating.

Personally, even as someone who enjoys learning out of books most, starting from scratch with an algorithms textbook seems like a rough introduction to the subject. I think it would be easier if you watched video lectures, as there are some very high-quality lectures available on the internet nowadays. In general I'd encourage you to search MIT opencourseware and other similar offerings. This class might be a good option that I've used to brush up on some basic stuff earlier this year (scroll down to "Videos"). Unfortunately the videos there are considerably low-quality; you may be better off finding another class. Youtube EDU also has some filmed lectures that may be useful, particularly if there are some specific topics you're interested in.

-
or look through one of the countless free MOOCs available now. – Artem Kaznatcheev Jan 6 '13 at 21:44

For recursion have a look at this tutorial:

It follows somehow the "dummies" way but it is very illustrative and relatively strong (I mean you will get the necessities). The main problems is that you will have to learn a new paradaigm of programming [if you dont know it already] (the functional languages paradaigm). But these are the best to study recursion.

(if you find something like this about other algorithm techniques, please let me know. This would be beneficial for a lot of high school students interested in CS).

-