# AM 106/206. Applied Algebra.

Sets, subsets, and partitions; mappings, operations, and equivalence relations; groups, rings, and fields, polynomials, encryption, computer coding, application of modular arithmetic, combinatorial designs, lattices, application of trellis representation of lattices, fast algorithms;...

# CS 125. Algorithms and Complexity.

An accelerated introduction to theoretical computer science for students with strong mathematical preparation, to be taken in place of both Computer Science 121 and 124. Algorithm design methods, including graph algorithms, approximation algorithms, and randomized algorithms. Models of...

# CS 121. Introduction to the Theory of Computation

General introduction to the theory of computation, teaching how to reason precisely about computation and prove mathematical theorems about its capabilities and limitations. Finite automata, Turing machines, formal languages, computability, uncomputability, computational complexity, and...

# CS 222. Algorithms at the End of the Wire.

This is an advanced, rigorous course on algorithms focusing on networks, data transmission, and search engines. We learn the science that led to the founding of Google and the science behind standard compression tools. This course also covers topics in coding and data...

Read more about CS 222. Algorithms at the End of the Wire.

# CS 225. Pseudorandomness.

Efficiently generating objects that look random'' despite being constructed using little or no randomness. Connections and applications to computational complexity, cryptography, and combinatorics. Pseudorandom generators, randomness extractors, expander graphs, error-correcting codes,...