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


