click on the image to see an animation (be prepared to wait a while) This course focuses on the development of correct and efficient algorithmic solutions to computational problems, and on the underlying data structures to support these algorithms. Topics include computational complexity, analysis of algorithms, proof of algorithm correctness, advanced data structures such as balanced search trees, and also important algorithmic techniques including greedy and dynamic programming. The course complements the treatment of NP-completeness in CSCI 0301.


Prerequisites: CS 102, CS 201
Suggested course(s) to take next: CS 311, CS 312

It's easy to overlook the importance of algorithms compared to other, flashier areas of computer science, but this is what makes the difference between decent programs and great programs.
-- Duncan Sanford '06

I see this course as the heart of the major. Computation, ultimately, comes down to algorithms, and at the heart of our interest in algorithms is an interest in efficiency. (That's why we have computers do this stuff, rather than doing it by hand.!) This course is where we learn the tools, techniques, strategies, and data structures to design and analyze efficient algorithms for all areas of computing.
-- Prof. Dickerson