Covers abstract data types and structures including dictionaries, balanced trees, hash tables, priority queues, and graphs; sorting; asymptotic analysis; fundamental graph algorithms including graph search, shortest path, and minimum spanning trees; multithreading and parallel algorithms; P and NP complexity classes. Prerequisites: CSE 311
This course will assume competency with Java programming (covered in the CSE12X or CSE14X sequence) and knowledge of several topics from Discrete Math (covered in CSE 311). In particular, we assume knowledge of:
We will use Java for programming assignments. We strongly recommend although will not require that you use the IntelliJ development environment. Links for downloading and installing Java and IntelliJ will be included with our first exercise.
(Optional) Data Structures and Algorithm Analysis in Java 3rd Ed., Mark Allen Weiss, Addison Wesley: 2012, ISBN-10: 0132576279. Our course calendar will list sections of the textbook that are most relevant to the topic discussed in class that day. You may find the textbook useful to clarify topics and find more examples as well as to examine Java implementations of the data structures and algorithms discussed during lecture. We will not be assigning problems from the textbook.
We will use a set of free on-line notes for the material on parallelism and concurrency.
The Ed Discussion board should be your first stop for questions about course content and assignments. Before posting, first check that your question has not already been answered on the Discussion board, and if not, ask it there. If it is not possible to ask your question on the Discussion board without revealing details of your solution, please either use a private post on the Discussion board or send email to cse332-staff at cs.washington.edu, which will go to the instructor and TAs. In general we prefer that you send questions to the cse332-staff list instead of to an individual staff member so that you will get a faster response time and the entire staff can remain aware of questions and issues.
We will use the "Announcements" category on the Ed Discussion board for class announcements. You will be expected to read messages in the Announcements category on Ed Discussion so be sure you are receiving email notifications for these posts.
Lectures will meet MWF 12:30-1:20pm in CSE2 G01 and 3:30-4:20pm in CSE2 G01. You should plan on attending the lecture you are registered for, although occasionally attending the other lecture will be fine as long as there is space. Attendance at lecture is strongly encouraged; we will regularly pause to let you discuss ideas and solve problems with the people around you, which is much more effective in-person than remotely. Slides for lecture will be posted on the course calendar generally before lecture. Inked slides will be posted after lecture.
If you are unable to attend a lecture, both lectures will be recorded on Panopto and recordings will be posted on Panopto (accessible from Canvas); while we do our best to provide lecture recordings, technical errors sometimes do happen. In the event of a technical error, we generally won't re-record the lecture.
Sections will be held on Thursdays in rooms indicated on the course time schedule. Section attendance is strongly encouraged. You should plan on attending the section you are registered for. Occasionally attending another section should be fine as long as there is space. If you do this, please ask permission from the leading TA(s) and let them know you are present. Slides, and handouts for section will be posted on the course calendar. Sections will NOT be recorded as we want students to feel comfortable asking and answering questions in the smaller classroom environment.
Office Hours will be held throughout the week both in person and on Zoom. You may attend the office hours of any staff member, not just the TA who leads your section. A schedule of office hours and more information can be found on the office hours page.
Course Staff information can be found on the staff page.
Your learning in the course will be assessed via exercises, an in-person midterm exam, and an in-person cummulative final exam.
There will be an in-person midterm and an in-person cummulative final exam. The midterm exam is tentatively set for Wednesday April 30th in the evening, exact time and location TBA. The final exam will be Thursday June 12, 2025 12:30-2:20pm (location TBA). More information about the midterm and final exam will be posted on the exams page.
If you think you might not be able to attend the exams in-person at those times, please see the makeup exam policy under Accommodations.
There will be a total of approximately 15 exercises, which you will complete individually. You will have approximately one week to complete each exercise, with 2 exercises due most weeks. Much of the quarter, there will be two exercises out for you to be making progress on. Some exercises will involve programming in Java while others will be written assignments (at most one of each type per week). Exercises will be posted on the exercise page and will be submitted to Gradescope.
Your 12 best-scoring exercises will be counted toward your grade.
The course staff is made up of people, that means we sometimes make mistakes! When those mistakes happen in grading, we want to correct them.
You will have six late days to use during the quarter for exercises. A late day allows you to turn in an assignment up to 24 hours later without penalty. Simply submit late and we will keep track of your usage internally.
Regardless of how many late days you have, you cannot submit an assignment more than 48 hours after it is due without prior permission from course staff.
For example, an assignment due at 11:59 PM on Friday could be turned in at 10 PM on Sunday with no penalty by using two late days. However, you cannot submit at 12:01 AM Monday as it would be more than 48 hours.
If you run out of late days, you may still turn in an assignment late, at a penalty of 15% per day (but still may not turn in an assignment after the 48-hour-late-deadline without prior permission from the course staff).
At the end of the quarter, we will apply late days to the first exercises turned in late, and late penalties to any remaining late submissions. Late penalties are applied before dropping exercises.
Course grades will be computed approximately as follows (weights may be modified):
We expect all work you submit to be your own. However we believe you can learn a lot from discussing course concepts with others. When completing the exercises you should:
It should be obvious, but referring to solutions found on the web or solutions from this or other courses from previous quarters is considered cheating, as is requesting help with an assignment from an "interactive source" other than course staff. This includes pasting the questions from our exercises into search tools, requesting help on platforms like Chegg or Stackoverflow, or use of generative AI systems like Chat-GPT. We plan on running similarity-detection software over all submitted student assignments, including assignments from past quarters. Instructors are required to report violations of course policy to The Office of Community Standards & Student Conduct.
You may not utilize artificial intelligence or machine learning systems (e.g., Chat-GPT or copilot) on any assignments (this includes both programming and written exercises). That means you may not plug the homework problems into these systems (even if you later put the response in your own words), nor can you put a draft submission into the system to use the system for editing purposes.
Your performance in this course should not be affected by circumstances beyond your control. We can still work with you for situations other than the university-wide accommodations. If anything does come up, you should contact the course staff as early as you can.
If you have, or think you may have, a temporary health condition or permanent disability, contact Disability Resources for Students (DRS) to get started with accommodations. In some prior quarters, DRS has become overwhelmed with new requests and were slow to process them. We strongly recommend reaching out as soon as possible, as we are unable to provide certain accommodations (e.g., extra testing time) except as decided on by DRS.
There are some circumstances for which we offer conflict exams (exams scheduled at different times than the main exam). However we don't offer these for every possible situation (with 300-plus students, logistics limit what we can do).
A "hard" conflict is one which is unavoidable, and which is important enough that it takes precedence over an exam. Generally, these would be important family or academic responsibilities that you cannot reschedule. We will ask you if you have a hard conflict about a week before the exam. Please be sure to fill out the form on-time. If you fill out the form by the deadline with a hard conflict, we guarantee we'll find you a conflict exam (or other appropriate accommodation).
Examples of hard conflicts include
A "soft" conflict, is one which would make it difficult---but not impossible---to attend the main exam. We hope to give conflict exams to students with soft conflicts, but don't guarantee we can do so.
Examples of soft conflicts include
We will tell you before the main exam whether we can accommodate your soft conflict, and the time of the conflict exam.
If you are sick on the day of the exam, we will treat it as a hard conflict. Just let us know (send an email to Robbie) before the exam starts to let us know you're sick. Similarly, we will accommodate family or other emergencies that come up at the last second. In all cases, please notify Robbie of the situation as soon as you can (and before the exam begins).
There are some things we don't accommodate---in a class of our size, logistics require us to draw a line somewhere. If you have one of these, we expect you to attend the exam at the usual time. Examples of things which don't qualify for a conflict include:
A few days before the exam, everyone who has filled out the conflict form will get an email saying whether we think they have a hard conflict, soft conflict that we can accommodate, or non-conflict.
We schedule conflict exams in phases. We generally have one within a day-or-two of the main exam that we schedule a few days in advance. Once we know everyone who needs a conflict, we will finalize a schedule of conflict exam(s) (we can generally do that scheduling starting the day after the main exam, since we don't have the full list of who was sick until just before the exam happens).
Exams are always scheduled within a week of the main exam. Generally they will be during daytime class hours (8:30-4:30 Monday through Friday), though we may schedule at unusual times if it works better for staff and for the students involved.
In some instances, it isn't possible to make any of the scheduled conflict exams. Extended illness (e.g., contracting COVID shortly before the exam) or an extended family emergency (e.g., death in the family) and similar emergencies sometimes cause this to happen. In such instances, we usually don't offer remote exams.
If the midterm is missed, we may decide to use the final exam grade to count in place of the midterm (and still count for the final exam portion of the grade).
If the final is missed, we may decide to give you an incomplete and take the final exam in the next quarter.
We may also reach some other different accommodation when that is more appropriate. In any of these cases, we'll work with you to find something that makes sense.