Courses Offered

Below is a list of upper-level Theory courses being taught in this Fall and Winter. More information about these courses and others, including prerequisite information, can be found on the EECS courses page of the Michigan Engineering Bulletin.

Fall 2025

EECS 475: Introduction to Cryptography

Instructor: Ke Wu

Covers fundamental concepts, algorithms, and protocols in cryptography. Topics: ancient ciphers, Shannon theory, symmetric encryption, public key encryption, hash functions, digital signatures, key distribution. Emphasizes attack models, precise definitions of security, reductions, and proof techniques.

EECS 498: Advanced Data Structures

Instructor: Seth Pettie

This course surveys data structures across several domains, such as textual data, geometric data, graph data, and numerical data.  It covers models for the design and analysis of practical data structures, such as the external memory and cache-oblivious models, amortized analysis, and the data-stream model.  The course emphasizes the use of hashing and randomness in designing efficient data structures.

EECS 498: Computability and Complexity

Instructor: Nikhil Bansal

Computability and Complexity Theory are the foundational pillars of computation theory. They investigate which problems can be solved at all, or solved within constraints on resources such as time and space. In this course, we will explore various computational models, including finite automata, Turing machines, RAM machines, and Boolean circuits, and study complexity classes such as P, NP, co-NP, PSPACE, and co-NL. The goal is to develop a deeper understanding of fundamental computational questions and the objects within the computational universe, while also learning techniques to reason about them. For more information, see the course flyer.

CSE 572: Randomness and Computation

Instructor: Nikhil Bansal

Fundamentals of randomness and its pervasive use in computer science, including the probabilistic method, the design and analysis of algorithms, computational complexity, cryptography, combinatorics, logic and proof systems, and related topics.

CSE 575: Advanced Cryptography

Instructor: Chris Peikert

A rigorous introduction to the design of cryptosystems and to cryptanalysis. Topics include cryptanalysis of classical cryptosystems; theoretical analysis of one-way functions; DES and differential cryptanalysis; the RSA cryptosystem; ElGamal, elliptic, hyperelliptic and hidden mononomial cryptosystems; attacks on signature schemes, identification schemes and authentication codes; secret sharing; and zero knowledge.

CSE 598: Parameterized Algorithms

Instructor: Euiwoong Lee

CSE 598: Graph Algorithms via Graph Decomposition

Instructor: Thatchaphol Saranurak

CSE 598: Category Theory

Instructor: Max New

Winter 2026

EECS 474: Algorithms for Data Science

Instructor: Euiwoong Lee

Fundamental techniques and mathematical methods for designing and analyzing algorithms used in data science and machine learning. Topics include randomized algorithms (sketching), streaming algorithms (frequent items), dimensionality reduction (Johnson-Lindenstrauss embeddings), matrix approximation (randomized singular value decomposition), optimization (stochastic gradient descent, Newton’s method), and graph algorithms (spectral clustering).

EECS 475: Introduction to Cryptography

Instructor: Mahdi Cheraghchi

Cryptography, or “secret writing,” is nearly as old as written communication itself. Yet only in the past few decades has it grown from a “black art” into science with rigorous mathematical foundations and methodologies. These have taken cryptography far beyond its roots in simple secret codes, to a discipline with wide-reaching influence on computing as a whole. This class is an undergraduate-level introduction to modern cryptography. The emphasis is on essential concepts, precise attack models and security definitions, and constructions of some real-world cryptosystems. For more information, see the course website.

477: Introduction to Algorithms

Instructor: Seth Pettie

Fundamental techniques for designing efficient algorithms and basic mathematical methods for analyzing their performance. Paradigms for algorithm design: divide-and-conquer, greedy methods, graph search techniques, dynamic programming. Design of efficient data structures and analysis of the running time and space requirements of algorithms in the worst and average cases.

CSE 574: Computational Complexity Theory

Instructor: Mahdi Cheraghchi

This course explores the story of computation after Alan Turing. The notion of Turing Machines provides a mathematical abstraction of what it means to compute. In principle, it captures all computing devices that we know of or will ever come up with. Computational complexity takes a step further and also takes into consideration the fact that computers are limited in resources, such as time, memory, or randomness. The phenomenon of computing becomes much more nuanced with limited resources in mind. Which computational problems can or cannot be solved with limited resources? That is what computational complexity aims to study. For more information, see the course website.

CSE 586: Design and Analysis of Algorithms

Instructor: Quentin Stout

Design of algorithms for nonnumeric problems involving sorting, searching, scheduling, graph theory and geometry. Design techniques such as approximation, branch-and-bound, divide-and-conquer, dynamic programming, greed and randomization applied to polynomial and NP-hard problems. Analysis of time and space utilization.

CSE 598: Lattice Cryptography

Instructor: Chris Peikert

Point lattices have proven remarkably useful in cryptography, both for cryptanalysis (breaking codes) and more recently for constructing cryptosystems with unique security and functionality properties. This graduate-level seminar will cover classical results, exciting recent developments, and important open problems. Specific topics will be drawn from: lattice reduction algorithms and their applications, worst-case to average-case reductions, basic cryptographic constructions, and “exotic” ones like fully homomorphic encryption.

CSE 598: Dynamic Data Structures

Instructor: Thatchaphol Saranurak

CSE 598: Foundation of Distributed Consensus and Blockchain

Instructor: Ke Wu

This course covers the  mathematical foundations and principles/theory for blockchains, including the following modules that form the scientific foundation of blockchain technologies: distributed consensus, blockchain protocols, and incentives and mechanism design. For more information, see the course flyer.