Data Structures and Algorithms

University of Washington, Summer 2021

This is CSE 373 Summer 2021 at the University of Washington. Looking for Autumn 2021?

Husky Maps is a web app for mapping the world, searching for places, and navigating around Seattle. All these features are powered by the sociotechnical infrastructure of data structures and algorithms, programming abstractions designed by software engineers to represent data and automate processes. CSE 373 asks the question: How does the design of an abstraction affect implementations and clients?

Computing culture has historically addressed this question from a disembodied technical perspective, viewing social perspectives on computing as less relevant than technical perspectives. But in order to address society’s most challenging questions around the design and use of computing, we’ll need to learn about the impacts of our programming in a deeply sociotechnical way—combining social and technical ideas. Just as machine learning and artificial intelligence is changing the world for better and for worse, the design of data structures and algorithms can raise equally important sociotechnical questions for the systems we build. In our first project, for example, we’ll study Autocomplete, a feature of the Husky Maps search bar.

Autocomplete is a feature that helps a user select valid search results by showing possible inputs as they type. Computer scientists have historically only asked questions such as, “Is this implementation of autocomplete correct?” or “How efficient is this implementation of autocomplete?” These are important questions, but they’re not the only questions. In this course, we will ask these questions but also new questions such as, “How does this definition reshape civil and human rights?” and “What ideas about society does it encode?”

To begin to answer these complex sociotechnical questions, I believe we need to appreciate learning as an embodied experience involving all of our humanity and ways of knowing.

Although CSE 373 is designed to be taken after CSE 143—we expect familiarity with array lists, linked lists, and search trees—the focus is not on programming but rather the design, analysis, and critique of the data structures and algorithms that implement software’s social imaginations and designed futures.

  1. Design data structures and algorithms by implementing and maintaining invariants.
  2. Analyze the runtime and design values of data structures and algorithms.
  3. Critique the application of data structures and algorithms toward social problems.

In the first 7 weeks, we’ll study 3 interfaces and 6 applications of data structures and algorithms.

  1. Autocomplete data structures and algorithms for search suggestions and DNA indexing.
  2. Priority queue data structures for content moderation and shortest paths.
  3. Graph data structures and shortest paths for seam carving and navigation directions.

In the final 2 weeks, we’ll wrap up the course by reflecting on our journey through computing.

Deliberate practice

In a traditional classroom, you attend class while a teacher lectures at them until time is up. Then, you go home and do the important work of applying concepts toward practice problems or assignments. Finally, you take an exam to show what you know.

Research shows that this doesn’t work for science, engineering, and mathematics.1 Think of learning computer science as learning how to ride a bike. Quite a few people know how to ride a bike. But how many of them learned to ride a bike through traditional lecture three times a week? Probably no one—learning to ride a bike requires riding an actual bike! We might start with training wheels but we eventually remove the training wheels as you develop proficiency over time. Likewise, learning computer science requires deliberate practice.

  1. Sustained motivation.
  2. Tasks that build on prior knowledge.
  3. Immediate, personalized feedback on tasks.
  4. Repetition of all the above.

The course is organized into five (5) two-week modules: Abstractions, Autocomplete, Priority Queues, Shortest Paths, and Portfolio. Modules include multiple activities, some of which are designed to be completed on your own while others are designed for section teams or project teams.

  1. On your own before class, prepare for learning by completing the pre-class preparation.
  2. In section teams during class and quiz section, collaborate on the in-class guided practice.
  3. On your own after quiz section, complete the checkpoint and record your own explanation video.
  4. In project teams throughout the module, apply design, analysis, and critique skills in the project.

As a 4-credit course, expect to spend 4 hours in class and 8 hours outside of class working on this course. Depending on how you plan your project work, some weeks may be more work or less work than other weeks. If you find the workload is significantly exceeding this expectation, talk to your TA for advice.

Community of learners

This course is more than concepts and learning objectives. We are a community of learners defined by how we conduct ourselves, how we communicate with each other, and ultimately how we care about each other. We believe everyone can succeed and grow as a whole human being together through our community of learners. But to realize this vision, we’ll need to work together to act compassionately and treat everyone how they wish to be treated. We are only as good as we are to each other.

But in the western scientific worldview, learning is for individual gain to help you achieve your goals. Knowledge is measured using standardized assessments for the purposes of comparing and evaluating people—in the most literal sense, to assess the social value of a person. This worldview serves an economic purpose. But if the primary purpose of learning is to help yourself, and learning is about competition, then why collaborate? Why help anyone but yourself? So far, we’ve discussed what we will be learning and how learning occurs, but perhaps we should also ask why learn at all?2

Cartesian Dualism
I think, therefore I am
Mind/body separation
Learning for individual gain
Measures intelligence against a single norm

Cartesian dualism describes mind/body separation, or the idea that rational thinking occurs independently of your physical being. Whether you learn alone or learn collaboratively makes no difference because knowledge is standardized: it doesn’t matter who, when, where, or how it was learned. If knowledge is a standardized commodity, and commodities can be purchased, then learning a concept in one way is the same as learning that same concept in any other way.

But not all traditions understand learning as dualism. 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.

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.3

In’lakesh is a Mayan culture that values multiple ways of knowing.

I am you and you are me
Body/mind/spirit = integrated
Learning for collective benefit
Values multiple ways of knowing

We could easily spend an entire course working to reconcile these worldviews. What can we learn from these perspectives? There’s a practicality to standardized education—this course is a commodity that offers economic value and social mobility. And yet learning is also a social phenomena, one that involves all of us and uniquely shaped by each and every student in the class. When you look around you, who you see are the people who will be shaping our social futures. We are all responsible for helping each other because each opportunity taken is a vote toward realizing a better future. Learning is not just for yourself in the short-term, but for everyone in the long-term. It won’t be easy because helping others requires leaving your comfort zone, but I believe we can rise to the occaision.

We are here to help each other. Collaboration, listening, empathy, mindfulness, and caring are essential to creating sustainable futures. The following specific actions and behaviors we pledge to do in order to encourage compassion toward each other in this class.4


We welcome students of all backgrounds. The computer science and computer engineering industries have significant lack of diversity. This is due to a lack of sufficient past efforts by the field toward even greater diversity, equity, and inclusion. The Allen School seeks to create a more diverse, inclusive, and equitable environment for our community and our field. 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 that students come from varied backgrounds and can have widely-varying circumstances affect them during their time in the course. Please do not hesitate to contact the instructor by appointment or via private discussion post. The sooner we are made aware, the more easily these situations can be resolved. 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.

Academic honesty is more about principles, values, and habits than it is about rules and regulations. 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 are in the future. Academic honesty is about learning the habits for leading an honest life according to western cultural expectations.

To define common practices for learning, follow the golden rule: do not claim to be responsible for work that is not yours or your team’s work (for team assignments). Rather than submitting work that is not yours, instead focus on learning and helping each other learn. If you receive substantial assistance from someone outside your team, include a citation in your work. We ask that you don’t request a copy of someone else’s work, don’t provide your work to another student, and don’t post your solutions publicly. We recognize that these policies reflect western values on ownership of ideas, and mistakes can happen, so if you submit work that is 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.


Computer science learning requires deliberate practice, so grading in this course encourages growth through revision and resubmission of work. Grading is organized around modules. Satisfactory completion of a module involves satisfactory completion of all components including lessons, checkpoints, explanations, and the project. Completion of each module unlocks a higher final grade.

1.0 or greater
Satisfactory Abstractions.
Satisfactory Autocomplete.
2.0 or greater
Satisfactory Abstractions.
Satisfactory Autocomplete.
Satisfactory Priority Queues.
3.0 or greater
Satisfactory Abstractions.
Satisfactory Autocomplete.
Satisfactory Priority Queues.
Satisfactory Shortest Paths.
Satisfactory Abstractions.
Satisfactory Autocomplete.
Satisfactory Priority Queues.
Satisfactory Shortest Paths.
Exemplary Portfolio.

We’re looking forward to learning with you this quarter!

  1. 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

  2. Jess Cleeves. 2020. Can Learning be Fair?: Explicit Acknowledgment of Structural Oppression as a Teaching Tool

  3. Roger Fernandes. 2012. 

  4. Asao B. Inoue. 2019. “Sample Charter for Compassion” in Labor-Based Grading Contracts: Building Equity and Inclusion in the Compassionate Writing Classroom

Table of contents