Design and Analysis of Algorithms

Course Goals

By the end of this course, you will have developed the following knowledge and skills:
  • You will know how to design and analyze algorithms, and clearly explain the steps of your design and analysis, justifying your claims with formal proof.
  • You will learn and understand several standard algorithmic design techniques, including greedy algorithms, divide and conquer, and dynamic programming.
  • You will be able to apply standard algorithmic design techniques to solve computational design problems of moderate difficulty. You will be able to describe and use these techniques in clear write-ups.
  • You will be able to identify problems that are computationally intractable and argue why these problems might be hard to solve efficiently.
  • You will learn how to design randomized and/or approximation algorithms, and determine when approximation and/or randomization are useful for a problem.
Above all, the goal of this course is to instill a deep understanding of how to think algorithmically about problems.