
How can I learn algorithm from scratch - ankit1911
I had started with C programming on UNIX system about 3 years ago. Currently, I am comfortable with system &amp; network programming. However, the biggest problem I face while coding is my lack of knowledge in the area of algorithm. A few weeks back someone suggested me a book named CLRS, however, even this introduction book is getting heavy now.
I am very poor at mathematics. There are tons of experienced folks out here, so I would be very grateful if you guys can let me know how I should start on my way to be good at algorithms.
Thanks.
======
avinassh
CLRS is quite 'academic' and requires good understanding of mathematics. It's
a great book, but not a good one for beginners, imo. It will be difficult as
self study for first timers. You can start with Datastructures and Algorithm
Analysis in C by M. A. Weiss[0]. One more alternative is The Algorithm Design
Manual by S. Skiena[1]. It's also good and focuses more on algorithm,
implementation (as opposed to math-y stuff of CLRS). If I were you, I would
get both the books and read alternatively. Don't miss out on exercises, they
are very important.

I also suggest you to join this Coursera course, Algorithms: Design and
Analysis by Tim Roughgarden[2]. Currently the course is open, so you can sign
up for classes. The course is offered in two parts[3], complete both of them.

Once you are comfortable with basic concepts start solving questions/puzzles
online on sites like SPOJ[4], UVa[5], (YC-funded) HackerRank[6]. You could try
TopCoder[7] also, but the questions are bit difficult. Hope this helps.

PS - You should study math, because it is important in Algorithms Analysis.
You could try reading required parts of Concrete Mathematics by Knuth[8] or as
you come across new concepts, Google and understand them.

[0] -
[http://www.amazon.com/dp/8177583581](http://www.amazon.com/dp/8177583581)

[1] -
[http://www.amazon.com/dp/1848000693](http://www.amazon.com/dp/1848000693)

[2] -
[https://www.coursera.org/course/algo](https://www.coursera.org/course/algo)

[3] -
[https://www.coursera.org/course/algo2](https://www.coursera.org/course/algo2)

[4] - [http://www.spoj.com](http://www.spoj.com)

[5] - [http://uva.onlinejudge.org](http://uva.onlinejudge.org)

[6] - [http://hackerrank.com](http://hackerrank.com)

[7] - [http://www.topcoder.com](http://www.topcoder.com)

[8] -
[http://www.amazon.com/dp/0201558025](http://www.amazon.com/dp/0201558025)

~~~
brudgers
I would also recommend Roughgarden's Coursera classes, however, I would
strongly recommend waiting for a live session.

A book I think is informative from a practical perspective is _Algorithms in a
Nutshell_ from O'Reilly Press. As always with Amazon I would look for a used
copy.

~~~
avinassh
But no need to wait at this moment, as class is live. However I also agree
that live session is recommended and actually fun. Some of the Community TAs
are really good, which one will miss if attended non-live version of class.

------
laex
You could check out the following resources:

1\. Coursera Algorithms I for formal university-style learning. See
[https://www.coursera.org/course/algs4partI](https://www.coursera.org/course/algs4partI)

2\. Algomation.com for visualising algorithms. See
[http://www.algomation.com/](http://www.algomation.com/)

3\. [http://bigocheatsheet.com/](http://bigocheatsheet.com/) for time/space
complexities for the most common data structures & algorithms.

4\. The book - Cracking the Coding Interview which goes through the questions
that top companies like Google, Amazon, Microsoft ask during interviews. For
their solutions, see
[https://github.com/gaylemcd/ctci](https://github.com/gaylemcd/ctci)

Hope that helps in some ways.

~~~
GFischer
+1, I just enrolled on the Coursera algorithms course, I was going to
recommend that one.

My only complaint is that they removed the videos from past sessions (I did
find them elsewhere on the web).

------
brudgers
The great thing about being very poor at mathematics is that it is easy to
improve and to improve quickly...of course this requires accepting that being
poor is an improvement over being very poor and that it will require much more
effort to go from poor to mediocre.

The great thing about self-directed learning is that there is so much time
over which to acquire new knowledge in the area. And in the age of the
internet there are vast resources available on any computing topic.

The best resource for learning algorithms is Wikipedia. It doesn't stand alone
and a lot of the typical algorithm article will go over most people's head but
the more you learn the more of an article will make sense each time you come
back to it.

Finally, there are only a few people who are objectively good at designing
algorithms - Tarjan, Hoare, Dijkstra for example. Most of what is
professionally good is pattern matching existing algorithms to new situations.
That's the art that Knuth has spent sixty years describing.

------
jimkri
The best way that I learned algorithms was I looked at many different books
about them. Here are some of the ones I used and you can contact me if you
want any of them I have all the pdfs, I also want to say that I dont know if
they are the best but they helped me to understand Algorithms and I really
love them now, it is so interesting.

Intro to Algorithms, it was pretty tough at times but I really liked it. The
Algorithm design manual. Algorithms in a nutshell.

I also was taking a course at Temple which helped but I really liked reading
about them, than I thought a lot about the algorithm. I also have a lot of
Data Structures books to go along with the Algorithm books too, let me know
and they are all yours.

------
fandawg195
MIT has some great youtube videos on Algos. and data structures -
[https://www.youtube.com/channel/UCEBb1b_L6zDS3xTUrIALZOw](https://www.youtube.com/channel/UCEBb1b_L6zDS3xTUrIALZOw)

