Wednesday, April 25, 2012

Design and Analysis of Algorithms I: a coursera.org course with Tim Roughgarden

Looking for an algorithms for a little over a year, I was very thrilled to find out coursera.org was going to offer an algorithms course, albeit part I of II.  My objective in taking the class was to gain the skills needed for the mathematical analysis of algorithms, exposure to complex problems and computational solutions, and increase my programming skill and capability.  Though not a master in any of these areas, I feel the course has definitely improved my skills, and am eager to sign up for Design and Analysis of Algorithms II.

The course consisted of 5 programming assignments, 5 problems sets, a final, and some optional theory problems.  The material was presented in 5 week long blocks of about 2 hours worth of video material.  The programming assignments ranged for pretty difficult(calculate strongly connected components on a graph of over 800k nodes) to relatively easy, (find if two elements of an array sum to a given number).  The course discussion boards and theory problems really helped solidify my understand of the material.  Additional "Theory" problems were also included, and were of the same difficulty as test problems given to Stanford students taking the course.  These additional problems required much thought, and solidified the concepts presented in lecture.

The content of the class consisted of basic mathematical analysis methods(big-Oh notation), the divide and conquer paradigm, master method, randomized algorithms, a handful of data structures, and graph algorithms.  Analysis of each presented algorithm that included a proof of its correctness and runtime complexity.  Each algorithm presented was explained in a very intuitive way,  much to the credit of our instructor Tim Roughgarden.

 For this course, I purchased Cormen's algorithm text book, which turned out to be a very good investment.  Compared to other textbooks, like Klienberg and Tardos, Cormen was more in depth, with greatly detailed analysis of algorithms and the mathematical rigor I need to convince myself of an argument.  If there is one take home skill I got from the course, its ability to sit down with Cormen, and internalize a concept.  A couple of the theory problems were drawn from Cormen, and I am glad to have the some help learning how to solve problems that once seem intimidated.

In conclusion, The course did an excellent job explaining the concepts required for algorithmic analysis, and given me the skills to continue my learning by using sources such as Cormen's book.  Often used in proofs in the class, and in Cormen for that matter, are generating functions.  This is a topic I need to look further in to if I want to generate proofs for my own nascent algorithms.  I am eagerly awaiting the next installment of the class, and look forward to taking Coursera's Automata with Jeffrey Ullman in the meantime.  

No comments:

Post a Comment