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.
What makes it hard
The exams demand reasoning, not recall: analyze an algorithm you haven't seen, justify a bound, argue correctness, all 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.
Today
Today's CMSC 351 plan
What a Fennie Daily Plan looks like for CMSC 351. Yours is built from your own syllabus and adapts every day to your deadlines and progress.
First plan free, no card required. Fennie is independent and unaffiliated with your school.
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.
More 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. It's the course where computer science becomes mathematics for a semester.