MIT 6.046J: Design and Analysis of Algorithms
6.046J — renumbered 6.1220 in MIT's current catalog, but still searched overwhelmingly by its old number — is the advanced algorithms course following 6.006: divide and conquer, randomized algorithms, amortization, network flow, approximation, and complexity. The OCW lectures are a staple for advanced self-study.
Fennie is independent and not affiliated with MIT. This is an unofficial study guide.
Build my 6.046J study planWhat makes it hard
Where 6.006 teaches techniques, 6.046 demands invention: psets routinely require designing novel algorithms with full correctness and runtime proofs. Randomized analysis and reductions are the steepest material, and the proof burden is heavier than most students expect even after 6.006.
What you'll cover
- • Divide and conquer
- • Amortized analysis
- • Randomized algorithms
- • Network flow
- • Linear programming basics
- • NP-completeness and approximation algorithms
The 6.046J study guide
How to study for MIT 6.046J, step by step.
- 1
Confirm 6.006 mastery before starting
6.046 assumes you can apply every 6.006 technique fluently — it spends its time on invention, not review. If DP or graph algorithms are shaky, fix that first; the proof burden here leaves no slack.
- 2
Let pset problems sit overnight
These problems require designing novel algorithms, and insight arrives on the second or third spaced attempt. Read every problem the day the pset opens, then return across multiple days.
- 3
Drill randomized analysis as its own skill
Expectation bounds, indicator variables, and probabilistic arguments are the steepest material. Work the recitation problems on randomization twice — once with notes, once cold.
- 4
Write complete proofs, then audit them
Full correctness and runtime proofs are the deliverable, enrolled or self-studying. For OCW learners, compare against posted solutions only after a genuine attempt, line by line.
- 5
Schedule the marination with Fennie
Upload the 6.046 calendar or your OCW sequence and Fennie's Daily Plan blocks sustained, spaced pset time and queues technique review before each unit needs it, with practice questions generated from the actual materials. Free to start.
Start my 6.046J plan free
How Fennie helps with 6.046J
Daily Plans block sustained, spaced time for 6.046 psets — problems that need to sit overnight before insight strikes. Chat through a probabilistic analysis step by step when the expectation bounds blur, and review each technique with practice questions before the pset that needs it.
FAQ
Is 6.046 harder than 6.006?
Yes — it shifts from applying techniques to inventing algorithms and proving them correct. The pset problems are open-ended in a way 6.006's mostly aren't.
Is 6.046 now called 6.1220?
Yes — MIT's 2022 EECS renumbering made it 6.1220, but the OCW materials and most online discussion still use 6.046J. Same course lineage either way.
Do I need 6.046 for software interviews?
No — 6.006 covers nearly everything interviews test. 6.046 is for depth: research, competitive programming, and roles where algorithm design is the actual job.
Pass 6.046J with a plan, not a cram
Upload your 6.046J materials and Fennie generates a Daily Plan paced to your deadline — plus chat, flashcards, and quizzes built from the actual course content.
Get started freeMore MIT courses
6.100A — Introduction to Computer Science Programming in Python
6.100A — formerly 6.0001, the number most search results still use — is MIT's half-semester introduction to programming in Python for students with little or no experience. The 6.0001 lectures on OpenCourseWare are among the most popular free programming courses anywhere.
6.006 — Introduction to Algorithms
6.006 is MIT's core algorithms class — sorting, hashing, trees, graph algorithms, shortest paths, and dynamic programming — emphasizing both rigorous analysis and Python implementation. Its OpenCourseWare lectures are a global standard for learning algorithms and prepping technical interviews.
6.042J — Mathematics for Computer Science
6.042J — now numbered 6.1200J — is MIT's discrete math course for CS: proofs, induction, number theory, graph theory, counting, and discrete probability. Its OCW versions, with full lecture videos and the famous free textbook, make it one of the most-used discrete math resources in the world.
6.1010 — Fundamentals of Programming
6.1010 — formerly 6.009, the number much of the internet still uses — is MIT's second programming course, where Python fluency from 6.100A gets turned into real software through substantial weekly labs: audio processing, image filters, graph search, interpreters. It's the bridge between knowing Python and engineering with it.