Skip to main content
Michigan
Electrical Engineering and Computer Science
4 credits

Michigan EECS 376: Foundations of Computer Science

EECS 376 is Michigan's theory course, covering algorithm design and analysis, complexity, NP-completeness, computability, and an introduction to randomness and cryptography. It's a core CS requirement usually taken after 203 and 281, and it's proof-based throughout.

Fennie is independent and not affiliated with University of Michigan. This is an unofficial study guide.

Build my EECS 376 study plan

What makes it hard

It's the most mathematical course in the core — reductions and potential-function arguments require a kind of creative proof-writing that homework templates only partially prepare you for. NP-completeness reductions are the famous hurdle: knowing the definitions is easy, constructing a correct reduction under exam time is not, and partial credit depends on precise statements of what maps to what.

What you'll cover

  • Algorithm design paradigms and analysis
  • Divide and conquer and dynamic programming
  • Computability and undecidability
  • NP-completeness and reductions
  • Approximation algorithms
  • Randomized algorithms and cryptography basics

The EECS 376 study guide

How to study for Michigan EECS 376, step by step.

  1. 1

    Keep EECS 203 proof skills warm going in

    376 assumes induction and contradiction are fluent tools. If they're rusty, rebuild them in week one — every unit writes proofs on top of them.

  2. 2

    Learn reductions by writing the mapping explicitly

    For every reduction, state precisely what instance maps to what and prove both directions. The discipline feels pedantic and is exactly what exam graders award points for.

  3. 3

    Re-derive homework solutions from a blank page

    Understanding a posted solution is the floor. Days later, reproduce it cold — exams present novel problems, and reproduction practice is what builds transfer.

  4. 4

    Build a catalog of canonical problems

    Keep a running list of the NP-complete problems used in reductions and the trick each enables. Exam reductions are usually one creative step from a catalog entry.

  5. 5

    Space the theory with Fennie

    Upload your EECS 376 materials and Fennie's Daily Plan spreads proof practice and concept review across the weeks each unit needs to settle, with quizzes generated from your actual notes. Free to start.

    Start my EECS 376 plan free

How Fennie helps with EECS 376

Fennie's Daily Plans give EECS 376's abstractions the spacing they need — reductions and computability arguments settle over weeks, not in a pre-exam weekend. Use chat to test a reduction by explaining both directions and having the gaps probed, and quiz yourself on the canonical NP-complete problem catalog.

FAQ

Is EECS 376 harder than EECS 281?

They're hard differently. 281 is engineering pressure — big projects, performance grading. 376 is mathematical pressure — creative proofs under exam time. Students with strong proof backgrounds often find 376 smoother; students who survived 203 reluctantly usually find it the harder of the two.

How do I get better at NP-completeness reductions?

Write the instance mapping explicitly and prove both directions, every time, even when it feels obvious. Build a catalog of canonical problems (3-SAT, vertex cover, Hamiltonian path) and study which reduction tricks each enables — exam reductions are usually one step from a known pattern.

When should I take EECS 376?

The usual slot is after EECS 203 and alongside or after 281. The proof maturity from 203 matters more than the data structures from 281, so prioritize having the math fluency before you enroll.

Pass EECS 376 with a plan, not a cram

Upload your EECS 376 materials and Fennie generates a Daily Plan paced to your deadline — plus chat, flashcards, and quizzes built from the actual course content.

Get started free

More Michigan courses