Welcome to the official course webpage for the Spring 2026 edition of CS 341!
Why should you care about designing algorithms?
A better processor makes your program twice as fast. A better algorithm can make it a million times faster. Algorithmic thinking is the only tool that transforms a hopelessly slow naive solution into a practical one — something no hardware upgrade can replicate. What you learn here transfers across every domain of computing. Master them, and you will have earned the core of what it means to think like a computer scientist.
What can you hope to learn from this course?
You will develop a vocabulary for reasoning rigorously about efficiency, and a toolkit of fundamental techniques such as divide and conquer, greedy, dynamic programming, graph algorithms. You will learn strategies for thinking about computational problems systematically, and to recognize when a problem is inherently hard. Most importantly, you will learn to prove that your solutions are correct and efficient, not just hope that they are.
Some helpful links:
Course outline
References
Lecture notes: Lap Chi, Jeff Erickson
Textbooks: Introduction to Algorithms, Algorithm Design, Algorithms
Lecture slides: Slides by Kevin Wayne for the "Algorithm Design" textbook
Lecture videos: Arne Storjohann and Richard Peng's lecture videos (Winter 2022 offering )