Algorithms are a cornerstone of the computational sciences and the need for efficient algorithms is ubiquitous in modern technology. However, the primary goals of algorithm design, the resources that need to be optimized, and even the model of computation varies widely between application areas. In this course, we will study some of the fundamental principles of algorithm design that appear in multiple areas and have had broad impact. In addition, we will focus on the mathematical tools that are frequently used in the theoretical analysis of algorithms, and study how such analysis, in turn, influences algorithm design. The course will be at an undergraduate level.
The email address to reach the course staff is compsci330-staff@cs.duke.edu We prefer that you use this email address or Piazza unless your query/request is specifically for one of the members of the course staff. In the latter case, please use the relevant email address(es) below.
Debmalya Panigrahi debmalya@cs.duke.edu
Kate O'Hanlon cco9@duke.edu
History of Algorithms
Asymptotic and Worst-case Analysis
Divide and Conquer
Greedy Algorithms
Dynamic Programming
Graph Representations
Graph Traversal and Applications
Shortest Path
Minimum Spanning Tree
Network Flows
Monte Carlo and Las Vegas Algorithms
Hashing
Design of Linear Programs
Solving Linear Programs (basics)
Linear Programming Duality
NP-completeness
Polynomial-time Reductions
Approximation Algorithms