Abstract¶
A data structure is a decision. Every one of them is somebody’s answer to the same question: given what I need to do with this data, how do I store it so the things I do most often are fast? Algorithms are similar: a procedure someone designed, defended, and proved. Learning data structures and algorithms is learning to make and defend those decisions yourself, instead of inheriting them.
You’re learning this at a strange time. You can hand a problem to a model and get working code back in seconds, and a lot of the time it’s good code. That’s not a shortcut to feel guilty about, it’s real, and the instinct to reach for it is rational. But the bar for what counts as a strong engineer is rising right alongside those tools. When generating a solution is nearly free, the value moves to the people who can tell a good solution from a plausible one, by reasoning about what a structure costs, why it breaks, and whether it’s even the right one. That judgment comes from building it by hand.
That’s what I’ve attempted to design this course for. We cover the core data structures and algorithms — lists, trees, heaps, hash tables, graphs, and the algorithms that run on them — by working them by hand: tracing them, analyzing them, implementing them, and arguing about the tradeoffs. The aim is straightforward. Whether you go on to ship fast with AI or to build the systems underneath it, you’ll understand the machinery well enough to know what’s actually happening.
| Mon, Jun 22 | Lecture | Introductions | |
| Wed, Jun 24 | Lecture | Introduction to ADTs | |
| Thu, Jun 25 | Section | Section 1 | HW1 due |
| Fri, Jun 26 | Lecture | Intro to Runtime Analysis | |
| Mon, Jun 29 | Lecture | Big O & Case Analysis | |
| Wed, Jul 1 | Lecture | Analyzing Recursive Code | |
| Thu, Jul 2 | Section | Section 2 | HW2 due |
| Fri, Jul 3 | HOLIDAY — No Class | ||
| Mon, Jul 6 | Lecture | Intro to Hashing | |
| Wed, Jul 8 | Lecture | Hashing Collision Resolution | |
| Thu, Jul 9 | Section | Section 3 | HW3 due |
| Fri, Jul 10 | Lecture | Analyzing Trees | |
| Mon, Jul 13 | Lecture | Self Balancing Trees | |
| Wed, Jul 15 | Exam | Midterm 1 | |
| Thu, Jul 16 | Section | Section 4 | HW4 due |
| Fri, Jul 17 | Lecture | Intro to Heaps | |
| Mon, Jul 20 | Lecture | Heap Implementation | |
| Wed, Jul 22 | Lecture | Intro to Graphs / Graph Modelling | |
| Thu, Jul 23 | Section | Section 5 | HW5 due |
| Fri, Jul 24 | Lecture | Intro to Graph Algorithms (BFS, DFS, Topo) | |
| Mon, Jul 27 | Lecture | Shortest Path | |
| Wed, Jul 29 | Lecture | MSTs | |
| Thu, Jul 30 | Section | Section 6 | HW6 due |
| Fri, Jul 31 | Lecture | Disjoint Sets | |
| Mon, Aug 3 | Lecture | Sorting I | |
| Wed, Aug 5 | Exam | Midterm 2 | |
| Thu, Aug 6 | Section | Section 7 | HW7 due |
| Fri, Aug 7 | Lecture | Sorting II | |
| Mon, Aug 10 | Lecture | Dynamic Programming | |
| Wed, Aug 12 | Lecture | Final Review | |
| Thu, Aug 13 | Section | Section 8: Final Review | HW8 due |
| Fri, Aug 14 | Exam | Final Exam (handwritten, in person) |
This course is designed to support students who have completed CSE 123: Introduction to Computer Programming III. You should be comfortable implementing basic data structures — resizing arrays, linked nodes, and trees — and reading and writing Java. We build directly on these foundations.
Why should we learn?¶
This course will help prepare you for programming jobs. But the decisions you’ll learn to make don’t end at runtime and memory. What you optimize for, whose request counts as the “common case,” what you treat as an edge case worth handling — these are design choices, and they decide who a system works well for and who it fails. The judgment that lets you pick the right data structure is the same judgment that lets you ask whether something is the right thing to build. I want you to leave here competitive as an engineer. I also want you to leave treating those choices as choices, not defaults.
The University of Washington acknowledges the Coast Salish peoples of this land, the land which touches the shared waters of all tribes and bands within the Duwamish, Puyallup, Suquamish, Tulalip and Muckleshoot nations. Among the traditions of the Coast Salish peoples is a value for the connectedness between all living things and a recognition of the unique ways that each of us comes to know things.
We are responsible for each others’ success
Everyone has a right to feel like they belong in this course. We’ll need to act with compassion and caring to collaborate with each other. Although we will need more than just unexamined commitments to collaboration, listening, empathy, mindfulness, and caring, the following guidelines offer a starting point for ensuring compassion toward each other Inoue, 2022.
Listen with intention to understand first and form an opinion only after you fully understand.
Take responsibility for intended and unintended effects of your words and actions on others.
Mindfully respond to others’ ideas by acknowledging the unique value of each contribution.
You should expect and demand to be treated by your classmates and teachers with respect. If any incident occurs that challenges this commitment to a supportive, diverse, inclusive, and equitable environment, please let the instructor know so the issue can be addressed. Should you feel uncomfortable bringing up an issue with the instructor directly, meet our advisors during quick questions or contact the College of Engineering.
We recognize everyone has unique circumstances
Do not hesitate to contact the instructor by email at vagar343@uw.edu or during office hours (see the Staff page). The sooner we are made aware of your circumstances, the more we can help. Extenuating circumstances include work-school balance, familial responsibilities, religious observations, military duties, unexpected travel, or anything else beyond your control that may negatively impact your performance in the class.
It is the policy and practice of the University of Washington to create inclusive and accessible learning environments consistent with federal and state law. If you have already established accommodations with Disability Resources for Students (DRS), activate your accommodations via myDRS so we can discuss how they will be implemented in this course. If you have a temporary health condition or permanent disability that requires accommodations, contact DRS directly to set up an Access Plan.
Washington state law requires that UW develop a policy for accommodation of student absences or significant hardship due to reasons of faith or conscience, or for organized religious activities. The UW’s policy, including more information about how to request an accommodation, is available at Religious Accommodations Policy. Accommodations must be requested within the first two weeks of this course using the Religious Accommodations Request form.
We believe everyone wants to learn
Education is about shaping your identity as much as it is about learning things. In school, the consequences of making mistakes are relatively small. But the habits you form now—repeated over days, weeks, months, or years—determine who you will be in the future. Now is the best time to practice honest habits.
We ask that you do not claim to be responsible for work that is not yours. When you receive substantial help from someone else, include a citation. Don’t post your solutions publicly. Most importantly, don’t deprive yourself or others of the learning opportunities that we’ve created in this course. Allegations of misconduct by students may be referred to the appropriate campus office for investigation and resolution.
Academic honesty reflects the trust (or the lack thereof) between students and teachers. We do our best to design the course in ways that ensure trust, but we know our systems are not perfect. If you submit work in violation of these policies but bring it to the attention of the instructor within 72 hours, you may resubmit your own work without further consequence. Rather than blame students, we want to fix or replace broken systems that compel students to lose trust.
How the course works¶
Lectures run Monday, Wednesday, and Friday. They cover the core ideas and worked examples.
Homework is your deliberate practice. Each week’s assignment is one LeetCode-style coding problem and one exam-style written problem, due by end of day Thursday. Thursday section is the natural place to work through them with TA support, though attendance is optional (see Participation). Section is also where the handwritten-exam skill gets built, so it’s the on-ramp to the final.
Expect roughly 4 hours in class and 8 hours outside of it each week. Some weeks run heavier than others. If your workload is consistently far above this, talk to your TA.
Grading. Your grade is the sum of three components:
Homework, 40%. Eight assignments, 5% each. Your lowest score is automatically replaced with full credit, so everyone effectively starts the quarter with one perfect homework.
Midterms, 30%. Two midterms, 15% each, graded on effort as mock data structures and algorithms interviews.
Final, 30%. One cumulative, handwritten exam, taken in person.
Participation (extra credit only). Section is optional. Attend at least 7 of the 8 sections and you earn an extra 5% added to your final grade. This is a pure bonus: nothing is deducted if you don’t attend, the 5% simply won’t apply.
Component weights may shift by up to 10% in either direction as the course evolves. Any changes will be announced on the course site.
Late work. Homework does not have built-in late days. If something comes up, post privately on Ed before the deadline and we’ll consider exceptions case by case.
Regrades. If you think something was graded incorrectly, submit your request as a private Ed post.
This course website is adapted from the CSE 373 course site created by Kevin Lin, used under CC BY-NC-SA 4.0.
- Inoue, A. B. (2022). Labor-Based Grading Contracts: Building Equity and Inclusion in the Compassionate Writing Classroom, 2nd Edition. The WAC Clearinghouse; University Press of Colorado. 10.37514/per-b.2022.1824