In this course, you will learn:
- How to represent data in ways that allow you to access it efficiently in the ways you need to.
- How to analyze the efficiency of algorithms.
- How to bootstrap solutions on small inputs into algorithmic solutions on bigger inputs.
- Solutions to several classic optimization problems.
- How to critically analyze whether a locally optimal approach (greedy) can provide a globally optimal solution to a problem.
- Mathematical Preliminaries; Asymptotic analysis and recurrence relations; Sorting and Searching; Heaps and Binary Search Trees
- Algorithm Design Paradigms - Divide-and-Conquer algorithms, Dynamic Programming, Greedy Algorithms
- Graphs and graph traversals; minimum spanning trees; shortest paths
- Flows; NP-completeness; Approximation Algorithms