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'll develop a rigorous vocabulary for analyzing algorithmic efficiency and master a core toolkit of techniques: divide and conquer, greedy algorithms, dynamic programming, and graph algorithms. You'll learn to approach computational problems systematically, recognize when a problem is inherently hard, and most importantly, prove that your solutions are correct and efficient rather than merely hope they are.
Some helpful links:
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 )