- Lecture. Tu/Th 1:25-2:40 pm in Gross Hall 107
- Recitation. Mondays, time and locations vary (see Dukehub)
- Primary Reference. We will mostly use Algorithms 1st Edition by Jeff Erickson, which is freely available online by the author.
- Optional References. We also recommend Algorithms by Dasgupta and all, and Introduction to Algorithms by Cormen and all, if you are interested in additional supplementary references.
Bulletin Description
Design and analysis of efficient algorithms at an undergraduate level. Topics include greedy algorithms, divide and conquer, dynamic programming, graph algorithms, linear programming, randomized algorithms, and NP-completeness.
Learning Objectives
- Design correct and efficient algorithms for computational problems using techniques including
- recursion,
- divide and conquer,
- parallelization,
- dynamic programming,
- graph search,
- greedy,
- flows and matching,
- randomization,
- and approximation.
- Analyze the correctness and efficiency of algorithms using
- recurrences,
- asymptotic analysis,
- empirical benchmarks,
- and mathematical proofs.
Prerequisites
The enforced course prerequisites are Computer Science 201 and Computer Science 230 (or approved substitutions). This course requires undergraduate background in data structures as well as a certain amount of mathematical sophistication. Ideally this background is obtained in the prerequisite courses, but you should review the detailed prerequisites and getting started guide to determine if there gaps in your background. Free online references are provided to all of the background topics.