Abstract¶
Husky Maps is an educational 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. But why was the specification written that way in the first place?
There are many decisions to make when designing a software system, and many of them have significant consequences on the qualities of a system. In this course, we will 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—which is provided by a specific data structure. This course introduces advanced data structures and key algorithms in computer science from a design perspective, emphasizing how and why software were designed in certain ways.
Data Structures and Algorithms reframes computer science as much more than just programming: in this course, we start to understand computing as a much broader set of sociotechnical design skills for building scalable computing systems. This 10-week course is organized around five 2-week case study projects. By the end of the course, we will have retraced the conceptual leaps that it took to invent 4 abstract data types, 12 implementations of them, and 7 real-world problems that they address:
Wed, Sep 24 | Lecture | Dynamic Arrays | |
Project | Getting Started | ||
Thu, Sep 25 | Section | Reference Semantics | |
Fri, Sep 26 | Lecture | Linked Nodes | |
Project | Deques | ||
Mon, Sep 29 | Lecture | Asymptotic Analysis | |
Wed, Oct 1 | Lecture | Iterative Sorts | |
Thu, Oct 2 | Section | Runtime Analysis | |
Fri, Oct 3 | Lecture | Binary Search | |
Merge Sort |
Mon, Oct 6 | Lecture | Quiz 1 Review | |
Project | Autocomplete | ||
Wed, Oct 8 | Quiz | Two-Stage Quiz 1 | |
Thu, Oct 9 | Section | Quiz 1 Corrections | |
Fri, Oct 10 | Lecture | Binary Search Trees | |
Mon, Oct 13 | Lecture | Tries | |
Wed, Oct 15 | Lecture | 2–3 Trees | |
Left-Leaning Red-Black Trees | |||
Thu, Oct 16 | Section | Search Trees | |
Fri, Oct 17 | Lecture | Quicksort | |
Counting Sorts |
Mon, Oct 20 | Lecture | Quiz 2 Review | |
Project | Priority Queues | ||
Wed, Oct 22 | Quiz | Two-Stage Quiz 2 | |
Thu, Oct 23 | Section | Quiz 2 Corrections | |
Fri, Oct 24 | Lecture | Binary Heaps | |
Mon, Oct 27 | Lecture | Hash Tables | |
Wed, Oct 29 | Lecture | Affordance Analysis | |
Thu, Oct 30 | Section | Heaps and Hashing | |
Fri, Oct 31 | Lecture | Graph Data Type |
Mon, Nov 3 | Lecture | Quiz 3 Review | |
Project | Shortest Paths | ||
Wed, Nov 5 | Quiz | Two-Stage Quiz 3 | |
Thu, Nov 6 | Section | Quiz 3 Corrections | |
Fri, Nov 7 | Lecture | Graph Traversals | |
Mon, Nov 10 | Lecture | Shortest Paths Trees | |
Problems and Solutions | |||
Wed, Nov 12 | Lecture | Topological Sorting | |
Dynamic Programming | |||
Thu, Nov 13 | Section | Graph Algorithms | |
Fri, Nov 14 | Lecture | Minimum Spanning Trees | |
Disjoint Sets |
Mon, Nov 17 | Lecture | Quiz 4 Review | |
Project | Finale | ||
Wed, Nov 19 | Quiz | Two-Stage Quiz 4 | |
Thu, Nov 20 | Section | Quiz 4 Corrections | |
Fri, Nov 21 | Lecture | Nearest-Neighbor Search | |
Mon, Dec 1 | Lecture | Integration Questions | |
Wed, Dec 3 | Lecture | Teaching Team Q&A | |
Thu, Dec 4 | Section | Final Review | |
Fri, Dec 5 | Lecture | System Design | |
Tue, Dec 9 | Exam | Final Exam |
This course is designed to support students who have completed:
- CSE 123: Introduction to Computer Programming III
- Know the implementation of basic data structures such as resizing arrays, linked nodes, and trees. We will learn how effective software design is more than just about writing clear and correct code.
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. 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 things.
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.
- 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 private 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.
- 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 does learning occur?¶
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 Freeman et al., 2014. 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.
- On your own before class, prepare for learning by completing the pre-class preparation.
- In Canvas, read and annotate the lesson for the day and complete the pre-class quiz.
- In groups during class and quiz section, collaborate on the in-class guided practice.
- In PollEverywhere, correctly answer all questions to engage your learning during lecture.
- In Gradescope, correctly answer all questions to engage your learning during section.
- On your own after class, practice applying what you learned at home.
- In Canvas, apply your learning by completing Exercises to prepare you for the quizzes.
- In Canvas, apply your learning by assembling Project video presentations.
- During certain class meetings, complete the two-stage quiz to show what you’ve learned.
- In a two-stage quiz, complete a 25-minute quiz individually before reworking it as a group.
- At the end of the quarter, complete the final exam, which reassesses quiz concepts.
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.
How is this course graded?¶
Final grades are determined through a three-step process designed to measure your core knowledge, reward your hard work, and encourage consistent participation.
- Two-Stage Quizzes and Final Exam
- This is the most significant part of your grade. There are four quizzes, each contributing 10% to your final grade. The final exam is worth the remaining 60% of your grade and is broken into five parts. The first four parts of the final exam correspond to the four quizzes. If your score on a part of the final is higher than your score on the matching quiz, the better score will replace your original quiz grade. This ensures your final grade reflects your understanding at the end of the course.
- Projects and Exercises
- Projects and exercises scale the score you earned from your quizzes and final exam. If you complete all your project and exercise work perfectly, you keep 100% of your score from the first step. However, if you don’t do any of the project or exercise work at all, your score from the first step will be cut in half. Performance between 0 and 100 will scale this effect accordingly.
- Lightweight Activities
- Lightweight pre-class and in-class activities determine how your final grade is rounded. By default, your grade on the 4.0 scale is rounded down to the nearest decimal point (for example, a 3.89 becomes a 3.8). If you complete at least 90% of the lightweight activities, your grade will be rounded up instead (a 3.81 becomes a 3.9).
All coursework except for the final exam can be revised or resubmitted so that grading in this course rewards learning with feedback loops where you try something, get feedback, and then try again. Grades are based on what you eventually learn through this process.
- 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
- Freeman, S., Eddy, S. L., McDonough, M., Smith, M. K., Okoroafor, N., Jordt, H., & Wenderoth, M. P. (2014). Active learning increases student performance in science, engineering, and mathematics. Proceedings of the National Academy of Sciences, 111(23), 8410–8415. 10.1073/pnas.1319030111