Learning Goals

The course-level learning goals are

  • Recognize which algorithm design technique(s), such as divide and conquer, greedy algorithms, or dynamic programming was used in a given algorithm.
  • Select and judge several promising paradigms and/or data structures (with some modifications) for a given problem by analyzing the problems properties.
  • Implement a solution to a problem using a specified algorithm design paradigm.
  • Prove the correctness of an algorithm using proof techniques such as direct proofs, proofs by contradiction and mathematical induction.
  • Select, judge and apply suitable mathematical techniques (such as asymptotic notations and recurrence relations) to establish reasonably tight upper and lower bounds on the running time of algorithms.
  • Recognize similarities between a new problem and some of the problems they have encountered, and judge whether or not these similarities can be leveraged towards designing an algorithm for the new problem.