EECS 376 - Foundations of Computer Science

Undergraduate course, University of Michigan - Ann Arbor, 2023

I was a teaching assistant for the University of Michigan - Ann Arbor introduction to algorithms and complexity course targeting undergraduates in the computer science major.

Course Overview

The course contains an introduction to classical algorithm design paradigms, various models of computing, basic results in complexity theory, basic results of randomized computation, and basic cryptographic protocols.

A (not-so) brief listing of covered topics:

  • The Potential Method
  • Divide and Conquer
  • Dynamic Programming
  • Greedy Algorithms
  • Formal Languages and Finite Automata
  • Turing Machines and Decidability
  • Diagonalization
  • The Acceptance and Halting Problems
  • Reducibility
  • The Classes P and NP
  • Reductions and NP-Completeness
  • NP-Complete Problems
  • The Cook-Levin Theorem
  • Search and Approximation Algorithms
  • Probability, Randomness in Computation
  • One-time Pad, Diffie-Hellman, and Discrete Logarithm
  • RSA and Factoring

Syllabus

The course information is hosted at a public facing site. One can find the syllabus of the appropriate time periods via the wayback machine.