Lecture Overview

Schedule

Title Description

1. Introduction, Time Complexity, and Big O Notation

Meet the course and the teaching team. Learn what an algorithm is, compare linear and exponential growth, and use Big O notation to describe how running time grows.

2. Space Complexity and Basic Data Structures

Reason about how much memory code uses. Explore hashing, Python dictionaries and sets.

3. Graphs and Sparse Matrices

Learn graph vocabulary (nodes, edges, paths, connectivity) and how to build graphs in Python. See why sparse matrices save memory for data that is mostly zeros.

4. Sparse Matrices, Stacks, Queues, and Graph Searches

Pick the right sparse format (COO, CSR or CSC) for the job. Build stacks and queues, then use them to search a graph with breadth-first and depth-first search.

5. Trees and Recursive Algorithms coming soon

Meet trees: roots, leaves and subtrees. Break problems into smaller copies of themselves, identify base and recursive cases, trace the call stack, and see where recursion goes wrong.

6. Recursive Data Structures coming soon

Build data structures defined in terms of themselves, such as linked lists and trees. Use binary search trees and k-d trees for fast lookup and nearest-neighbour search.

7. Dynamic Programming I coming soon

Spot problems with overlapping subproblems, like Fibonacci and climbing stairs. Speed them up with caching (top-down) and tables (bottom-up).

8. Dynamic Programming II coming soon

Apply dynamic programming to harder optimization problems such as edit distance, and recover the optimal solution by backtracking through the table.
No matching items