UMD CMSC 351: Algorithms
CMSC 351 is UMD's algorithms course — asymptotic analysis, recurrences, sorting, graph algorithms, and dynamic programming, with correctness and runtime arguments throughout. It has arguably the most fearsome reputation of any course in the major.
Fennie is independent and not affiliated with University of Maryland. This is an unofficial study guide.
Build my CMSC 351 study planWhat makes it hard
The exams demand reasoning, not recall: analyze an algorithm you haven't seen, justify a bound, argue correctness — under time. The folklore difficulty is real but specific: students who memorize algorithms without owning the analysis techniques have nothing to apply when the problem is novel, and CMSC 250's induction and counting are assumed cold.
What you'll cover
- • Asymptotic analysis and recurrences
- • Sorting algorithms and lower bounds
- • Divide and conquer
- • Graph algorithms
- • Dynamic programming
- • Correctness arguments
The CMSC 351 study guide
How to study for UMD CMSC 351, step by step.
- 1
Rehab CMSC 250 before the semester starts
Induction, counting, and logarithm fluency are assumed without review, and they're load-bearing in every analysis. A week of 250 review before 351 begins is the cheapest grade insurance available.
- 2
Analyze algorithms you've never seen
Exam questions present novel algorithms and ask for bounds and behavior. Practice on unfamiliar pseudocode regularly — analyzing the famous algorithms from lecture only trains recognition.
- 3
Master recurrences as a mechanical skill
Setting up and solving recurrences appears everywhere from divide-and-conquer onward. Drill the standard patterns until solving them costs no working memory during exams.
- 4
Treat dynamic programming as its own course
DP is the unit that breaks people: finding subproblems is a skill built only by solving many problems yourself. Start practicing before the unit opens and accept slow progress as normal.
- 5
Give it spaced reps with Fennie
Upload the CMSC 351 syllabus and Fennie's Daily Plan spaces analysis practice daily, schedules the 250-review and DP runway early, and generates practice problems and quizzes from your actual course materials. Free to start.
Start my CMSC 351 plan free
How Fennie helps with CMSC 351
Fennie's Daily Plans give CMSC 351 what its reputation actually demands: daily analysis practice, prerequisite review scheduled before the course assumes it, and extra runway for dynamic programming. Chat works novel-algorithm analysis step by step — bound, justification, correctness — which is the exam format, not the lecture format.
FAQ
Is CMSC 351 really that hard?
Its reputation as the major's hardest course is earned but specific: exams demand analyzing novel algorithms under time, which memorizing lecture algorithms cannot prepare you for. Students who practice analysis as a skill find it hard but fair.
How do I prepare for CMSC 351?
Arrive with CMSC 250 fluent — induction and counting above all — and practice analyzing unfamiliar pseudocode from the first week. Give dynamic programming extra weeks of problem practice; it's the unit that decides the most grades.
Why do so many students struggle in CMSC 351?
Because the exams test reasoning on novel problems and most studying trains recognition of familiar ones. The fix is unglamorous: regular practice producing analyses and proofs yourself, spaced across the semester rather than crammed.
Pass CMSC 351 with a plan, not a cram
Upload your CMSC 351 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 UMD courses
CMSC 131 — Object-Oriented Programming I
CMSC 131 is UMD's first programming course for CS majors, taught in Java — objects, control flow, methods, arrays, and intro design — with weekly projects graded by an autograder against test cases you can't see all of. It sets the tone for the entire CMSC sequence.
CMSC 132 — Object-Oriented Programming II
CMSC 132 continues UMD's Java sequence into data structures and design — inheritance, recursion, linked lists, trees, hash tables, and intro threads — with bigger autograded projects and the same handwritten-exam format as 131.
CMSC 216 — Introduction to Computer Systems
CMSC 216 drops UMD CS majors below the Java abstraction: C programming, pointers, dynamic memory, the UNIX environment, and assembly-level concepts, with substantial autograded projects. It's taken alongside or near CMSC 250 in the sequence.
CMSC 250 — Discrete Structures
CMSC 250 is UMD's discrete math course for CS majors — logic, proof techniques, induction, sets, functions, combinatorics, and probability basics — the course where computer science becomes mathematics for a semester.