Data Structures and Algorithms
University of Washington, Autumn 2024
Kevin Lin
he/him
My current academic interest is in designing computing education that empowers students. If I’m not working on this class, you can probably find me looking around for travel and restaurant deals, experiencing the latest indie movies at SIFF cinemas, introducing guests to our underwater neighbors at the Seattle Aquarium, or capturing photos and videos of the beauty of life.
Nathan Brunelle
he/him
Come chat about my Virginia-to-Seattle road trip with my spouse (Sarah) and dog (Bucky), how we baked >1000 cookies in one day, the relationship between math and crochet, my summer in a fisheries lab, or anything else on your mind! I’m always happy to host visitors to my office!
Husky Maps is a web app for mapping the world, searching for places, and navigating around Seattle. All these features are powered by data structures and algorithms, programming abstractions designed to represent data and automate processes. In your prior programming experience, you learned how to implement specifications by writing Java programs that used data structures to solve problems. In this course, you’ll learn how to answer the why question: Why did we write the specification that way in the first place?
There are many decisions to make when designing a software system, and many of these decisions have significant consequences on qualities of a system. In this course, we’ll focus on learning data structures as implementations of abstract data types. An abstract data type describes what you can do with a data type, but not how the data type is implemented; a data structure provides both a description of functionality and a specific implementation of functionality. Rather than think of problems as requiring custom algorithms that we invent from scratch each time, abstract data types help us think of problems as variations that can be addressed by adapting more general algorithm ideas.
Data Structures and Algorithms presents a selection of these ideas in a way intended to help you design, analyze, and evaluate software systems. Learning these ideas can enable fuller participation in the community of computing professionals. This 10-week course is organized around four 2-week case study projects. By the end of the course, you’ll have retraced the history of invention for 4 abstract data types, 12 implementations of them, and 7 real-world problems that they address:
- Deque data structures for browsing history.
- Autocomplete data structures and algorithms for search suggestions and DNA indexing.
- Priority queue data structures for web accessibility analytics and shortest paths.
- Shortest paths and graph data structures for seam carving and navigation directions.
- Finale evaluating and applying what you’ve learned over the quarter.
What will you learn?
While this course will expand your object-oriented programming skills, it’s actually more about the big ideas and design concepts behind all the data structures and algorithms that power our digital lives. Every week begins with a Monday lecture introducing the big question for that week and bridging it to what we already know. Then, over the rest of the week, we will explore the nuances of that question, expanding on it in different directions. Along the way, we’ll learn the data structures and algorithms that were invented to answer those questions.
Deques
Basic Data Structures
- 9/25
- Welcome
- PrjProject Setup by 9/27
- 9/26
- 9/27
- PrjDeques quiz by 10/4, code by 10/8, analysis by 10/11
Algorithm Analysis
- 9/30
- 10/2
- 10/3
- 10/4
Autocomplete
Search Trees
- 10/7
- 10/9
- 10/10
- 10/11
- PrjAutocomplete quiz by 10/18, code by 10/22, analysis by 10/25
Balanced Search Trees
- 10/14
- 10/16
- 10/17
- 10/18
- Two-Stage Exam 1
Priority Queues
Algorithm Design
- 10/21
- 10/23
- 10/24
- 10/25
- PrjPriority Queues quiz by 11/1, code by 11/5, analysis by 11/8
Object Composition
- 10/28
- 10/30
- 10/31
- 11/1
- Two-Stage Exam 2
Shortest Paths
Graphs
- 11/4
- 11/6
- 11/7
- 11/8
- PrjShortest Paths quiz by 11/15, code by 11/19, analysis by 11/22
Applications
- 11/11
- Holiday
- 11/13
- 11/14
- 11/15
- Two-Stage Exam 3
Finale
Why should we learn?
The education you receive in this course can help prepare you for programming jobs, but this isn’t the only purpose for computing education.1 Education is not only about yourself and your personal gain, but also about all of us and our capacity to live together as a community.
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 something.2
Modern education has the idea that we all need to know the same thing. At the end of the lesson, everyone will know the same thing. That’s why we have tests, that’s why we have quizzes, that’s why we have homework: to ensure we all know the same thing. And that’s powerful—that’s important—within a certain context.
But for native culture, the idea that each listener divines or finds their own answer, their own meaning, their own teaching from the story is equally powerful—that each person needs to be able to look at the world and define it for themselves within their culture and then also find a way to live in that world according to the teachings of their people in their culture.
Our course emphasizes the following values and policies.
- 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,3 the following guidelines offer a starting point for ensuring compassion toward each other.4
- Listen with intention to understand first and form an opinion only after you fully understand.
- Take responsibility for the 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 private discussion post or appointment. 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.
- 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.
- 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.
- 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.
- 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.
How will you learn?
In a traditional classroom, you attend class while a teacher lectures until time is up. Then, you go home and do the important work of applying concepts toward practice problems or assignments on your own. Finally, you take an exam to show what you know.
Today, we know that there are more effective ways to learn science, engineering, and mathematics.5 Learning skills like software engineering and algorithm analysis requires deliberate practice: a learning cycle that starts with sustained motivation, then presents tasks that build on prior knowledge, and concludes with immediate, personalized feedback. Each module in the course will involve several different activities that are designed so that we can make the most of our class time together.
- Before class, complete the homework to review recent lectures and preview the next lecture.
- Read the weekly Lessons and, in Canvas, complete the homework quiz.
- During lecture and quiz section, collaboratively practice applying and explaining what you learned.
- In PollEverywhere and in-person, participate in the guided practice and random call activities.
- After class, integrate what you learned in real-world problems by completing the projects.
- Complete the implementation (code) and analysis components for each project. In Canvas, demonstrate your learning by submitting a project presentation video.
- Demonstrate what you learned through two-stage exams during the quarter, and a final exam.
- In a two-stage exam, you’ll complete a 30-minute exam during class individually immediately followed by a group analysis activity.
Communicating your ideas and explaining your problem solving process is important in this course. We ask students to record their own screenshared and voiced videos because they provide rich information about your solution process and authenticate your assessment. But we know that visual or voiceover presentations are not accessible or equitable for everyone. If for any reason a voiceover presentation won’t work for you, we would be happy to work with you to find a better way to communicate your ideas and explain your problem solving process. You do not need to disclose why you feel uncomfortable, but we were thinking about people with vision impairment, gender and voice dysphoria, limited access to resources, or complicated living situations when designing this policy.
Expect to spend 4 hours in class and 8 hours outside of class working on this course. Some weeks may require more or less time than other weeks. If you find the workload is significantly exceeding this expectation, talk to your TA.
- 8:30 AM
- 9:00 AM
- 9:30 AM
- 10:00 AM
- 10:30 AM
- 11:00 AM
- 11:30 AM
- 12:00 PM
- 12:30 PM
- 1:00 PM
- 1:30 PM
- 2:00 PM
- 2:30 PM
- 3:00 PM
- 3:30 PM
- 4:00 PM
- 4:30 PM
- 5:00 PM
Monday
- Office Hours12:30 PM–2:30 PMART 317
- Lecture2:30 PM–3:30 PMARC 147
- Office Hours3:30 PM–4:30 PMCSE 4th Floor Breakout
Tuesday
- Office Hours11:30 AM–1:30 PMSIG 230
- Office Hours1:30 PM–3:30 PMLOW 220
- Office Hours3:30 PM–5:30 PMECE 125
Wednesday
- Office Hours12:30 PM–2:30 PMDEN 258
- Lecture2:30 PM–3:30 PMARC 147
Thursday
- Sections8:30 AM–4:30 PM
- Office Hours1:30 PM–3:30 PMCSE2 G01
- Office Hours3:30 PM–5:30 PMCMU 226
Friday
- Office Hours10:30 AM–12:30 PMECE 026
- Lecture2:30 PM–3:30 PMARC 147
- Office Hours3:30 PM–5:30 PMARC 160
How is this course graded?
Grading in this course encourages learning through deliberate practice by emphasizing revision and resubmission of work. Most of the coursework is designed around feedback loops where you try something, get feedback, then try again. Grades are based on what you eventually learn through this process. Only the requirements listed under a Canvas module count toward your final grade.
- 1.0 or greater
- Completion of all requirements in the Deques module.
- Completion of all requirements in the Autocomplete module.
- 2.0 or greater
- Completion of all requirements in the Deques module.
- Completion of all requirements in the Autocomplete module.
- Completion of all requirements in the Priority Queues module.
- Completion of all requirements in the Autocomplete module.
- 3.0 or greater
- Completion of all requirements in the Deques module.
- Completion of all requirements in the Autocomplete module.
- Completion of all requirements in the Priority Queues module.
- Completion of all requirements in the Shortest Paths module.
- Completion of all requirements in the Autocomplete module.
- 4.0
- Completion of all requirements in the Deques module.
- Completion of all requirements in the Autocomplete module.
- Completion of all requirements in the Priority Queues module.
- Completion of all requirements in the Shortest Paths module.
- Highest marks across all parts of the Finale.
- Completion of all requirements in the Autocomplete module.
Mark Guzdial. 2021. Computer science was always supposed to be taught to everyone, and it wasn’t about getting a job. ↩
Roger Fernandes. 2012. Roger Fernandes: Artist/Storyteller/Educator. ↩
Brian Arao and Kristi Clemens. 2013. “From Safe Spaces to Brave Spaces: A New Way to Frame Dialogue Around Diversity and Social Justice” in The Art of Effective Facilitation. ↩
Asao B. Inoue. 2019. “Sample Charter for Compassion” in Labor-Based Grading Contracts: Building Equity and Inclusion in the Compassionate Writing Classroom. ↩
Scott Freeman, Sarah L. Eddy, Miles McDonough, Michelle K. Smith, Nnadozie Okoroafor, Hannah Jordt, and Mary Pat Wenderoth. 2014. Active learning increases student performance in science, engineering, and mathematics. ↩