# 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 four on the EECS courses page of the Michigan Engineering Bulletin.

## Fall 2024

### 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 477: Introduction to Algorithms

Instructor: Euiwoong Lee

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.

### EECS 498: Advanced Data Structures

Instructor: Seth Pettie

### EECS 498/CSE 598: Algorithms for Machine Learning and Data Science

Instructor: Michał Dereziński

This course will introduce algorithmic and theoretical foundations of data science, with a focus on applications to machine learning. With the emergence of machine learning and data science, as well as the ever-increasing data sizes, providing theoretical foundations for the computational complexity of data manipulation algorithms is becoming increasingly important. The course will cover several important algorithms which use randomization and linear algebra to construct compressed data representations and efficiently perform prediction, optimization and inference tasks for big data and ML. We will introduce randomized dimensionality reduction, sketching, and stochastic optimization, among others, and provide the tools needed to design and analyze algorithms that rely on these concepts. Algorithmic paradigms for big data The course will delve into topics in linear algebra, such as matrix multiplication and singular value decomposition, as well as in probability, such as expectation, independence and concentration of random variables.

### 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: Paul Grubbs

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: Foundations of Fairness in Machine Learning

Instructor: Ben Fish

## Winter 2025

### EECS 475: Introduction to Cryptography

Instructor: Mahdi Cheraghchi

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.

### 477: Introduction to Algorithms

Instructor: Euiwoong Lee

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

Fundamentals of the theory of computation and complexity theory. Computability, undecidability, and logic. Relations between complexity classes, NP-completeness, P-completeness, and randomized computation. Applications in selected areas such as cryptography, logic programming, theorem proving, approximation of optimization problems, or parallel computing.

### CSE 598: 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: Machine Learning Theory

Instructor: Wei Hu

### CSE 598: Graph Algorithms

Instructor: Nicole Wein