Welcome to CS161: Design and Analysis of Algorithms!

The course staff are really excited to meet everyone and get started learning, designing, and analyzing algorithms this summer! We will post a finalized syllabus here once we get closer to the start of summer quarter. In the meantime, here is some general logistics info. Please do email me if you have other questions!

Syllabus and Lecture Notes for Summer 2025

A draft version of the lecture notes and syllabus are here. Students officially registered for the course should check Canvas for the latest version of these notes; they will be updated there more frequently than this website. Source code for all of the algorithms discussed is available here. I'm hoping to integrate these more closely with the class this summer, e.g., by having optional programming lab days.

Logistics

Department Description

Worst and average case analysis. Recurrences and asymptotics. Efficient algorithms for sorting, searching, and selection. Data structures: binary search trees, heaps, hash tables. Algorithm design techniques: divide-and-conquer, dynamic programming, greedy algorithms, amortized analysis, randomization. Algorithms for fundamental graph problems: minimum-cost spanning tree, connected components, topological sort, and shortest paths. Possible additional topics: network flow, string searching.

Prerequisite: 106B or 106X; 103 or 103B; 109 or STATS 116.