Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I think the best way to learn algorithms are through the various competition sites. </p> <ul> <li><a href="http://ace.delos.com/usacogate" rel="noreferrer">USACO</a> - my personal favorite, as it gives a clear path through the material</li> <li><a href="http://www.topcoder.com/" rel="noreferrer">TopCoder</a> - already mentioned</li> <li><a href="http://www.spoj.pl/" rel="noreferrer">Sphere Online Judge</a> - great if you want to work in another language other than C/C++/Java</li> </ul> <p>As far as books, the best single intro I've seen for the non-math specialist is <a href="http://www.brpreiss.com/books/opus4/" rel="noreferrer">Data Structures and Algorithms</a>. It takes you through an algorithm line by line and shows you how it decomposes mathematically, something CLRS's otherwise excellent analysis section is a little less clear on. </p> <p>Skiena's <a href="http://rads.stackoverflow.com/amzn/click/1848000693" rel="noreferrer">Algorithm Design Manual</a> is also excellent, as is his <a href="http://rads.stackoverflow.com/amzn/click/0387001638" rel="noreferrer">Programming Challenges</a>, which is essentially a tutorial through the Valladolid Online Judge. </p> <p>Honestly, though, I think the single most helpful thing a beginner can do is to implement the various algorithms -- merge sort, say, followed by Quicksort -- and time them against variously sized inputs. Create a spreadsheet with a graph that shows their growth over time. Very few non-specialists will have the patience or the know-how to set up a recurrence relation and solve their way through it. But you must understand the effect of, say O n^2 growth over time, and there's no better way to learn this than to watch your own program blow through its memory stack. :)</p> <p>I say this as a non-CS, non-math programmer who has spent a good couple of months wrapping my mind around algorithmic analysis. </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload