CSE 373, Autumn 2018: Syllabus

Overview (link)

Teaching staff:


  • Lecture: KNE 220 from 2:30 to 3:20, MWF
  • Midterm: Friday, November 2 in class
  • Final: Tuesday, December 11 from 2:30 to 4:00


Goals (link)

The primary focus of this class is on gaining a strong theoretical and conceptual understanding of common data structures and algorithms as well as how they can be practically applied within larger programming projects.

Specific topics we will cover include:

  • Data structures and ADTs: lists, dictionaries, trees, balanced trees, AVL trees, hash tables, priority queues, binary heaps, disjoint sets
  • Graphs and graph algorithms: graph search, shortest path, and minimum spanning trees
  • Algorithm analysis: asymptotic analysis, locality, P and NP complexity classes
  • Sorting and divide-and-conquer

This course is also designed to have a practical component to help you gain basic familiarity with techniques used within industry. In particular, you'll be asked to:

  • Work on larger projects in pairs
  • Learn how to use an industrial-strength IDE
  • Learn techniques for checking correctness (writing unit tests with JUnit, designing and checking invariants, etc)
  • Gain basic exposure with integrating and using 3rd party libraries

And finally, this course also emphasizes the importance of making and justifying effective design decision. All of the above skills are those that are traditionally a part of any technical interview, thus this course is typically considered an important pre-requisite when applying for development positions.

Assessment (link)

Here is how your grade will be calculated:

  • Individual Written assignments: 15%
  • Partner projects: 45%
  • Midterm Exam: 15%
  • Final Exam: 20%
  • Participation: 5%


Grading policies for written assignments: Your written work will be graded based on correctness as well as the quality of the justifications and explanations you provide.

Grading policies for partner projects: Your code will be graded based on the following criteria:

  1. Correctness: Does your code pass the tests we gave you? Does it pass some additional tests we've withheld?
  2. Design: Are there any larger design issues with your code (e.g. inefficiency or gross redundancy)?
  3. Style: Does the automatic style checker we've provided you report no issues with your code?
  4. Test quality: You will sometimes be asked to write tests for your data structures. Do these tests correctly identify problems in buggy implementations?

If you feel you incorrectly lost points on an assignment, please start by talking to your grader to try and resolve the issue with them. If the issue is still not resolved, fill out the regrade request form linked on the class website. All regrade requests must be made within a week after you receive your feedback.


There will be 2 timed exams in this course: a midterm and a final exam. These will be written exams.

Make-up exams will only be given in case of a serious emergency. If you miss an exam, even if you are sick or injured, you must contact Shri BEFORE the exam (or arrange for someone to do so). You must show evidence that you are physically unable to take the exam. No make-ups will be granted for personal reasons such a travel or conflicting schedules. No accommodations will be made for students who arrive late to exams. The only accommodations for exams that will be made are those that correspond to the University's official accessibility guidelines, which must be reflected in your student account.


You earn participation points by participating in in-class activities -- worksheets or activities done in class. Be sure to write your name, UW email address (UW NetID), and date on each activity. You are given three (3) free in-class activity days, which you can use while you're traveling, etc. Missed in-class activities will not be accepted late. (If you have a valid reason for missing in-class activity, email me.)

We'll make worksheets for in-class activities available on the course website (on the course schedule, where slides are posted).

If you would like to pick up your worksheet, please select the "will pick up" option on the worksheet. I will keep complete in-class worksheets until after the quarter ends -- feel free to stop by my office during office hours, or schedule a different time to pick them up.

Since we added these participation point late to our grading policy, we'll begin counting these from now (Lecture 10, Oct 17). So everyone gets participation points for Lectures 1-9.

Homework (link)

There are two types of homework assignments: solo written assignments and partner programming projects. Homework due dates will be Fridays before 11:59pm to the Canvas turn in system.

Individual Written assignments
There will be 3 written assignments throughout the quarter, each span 1 week in length. These MUST be completed INDIVIDUALLY. See the section on academic honest and collaboration below.

Programming projects
There will be 4 pair programming projects throughout the quarter. These are meant to be completed in pairs, though you may work on them individually if you so choose. Projects generally span multiple weeks with a checkpoint due once a week. These checkpoints are due at the normal Friday night time.

If you lose points during a checkpoint, you may earn back half the points you lost if you fix and resubmit your work for the next project deadline. For example, suppose you earned 60% for your project 1, part 1 submission. If you fix and submit your part 1 code by the part 2 submission deadline, your part 1 score will be retroactively adjusted to 80%.

Note that your final project submission will not be eligible for this regrade policy.

Late days (link)

Each student receives three four late days that may be used for written assignments, checkpoints, and project due dates. If a team submits a project late, both students must use a late day. If you (or your partner) have no late days left, you will be deducted 20% of your overall score per each day late.

We will not accept assignments two days after the deadline, whether you use late days or not. Late days will be applied automatically. Leftover late days will have zero impact on your grade.

If unusual circumstances truly beyond your control prevent you from submitting an assignment or attending an exam on time, you should discuss this with the course staff ASAP. If you contact us well in advance of the deadline, we may be able to show more flexibility in some cases.

Academic honesty and collaboration (link)

We take academic honesty very seriously. Cheating not only deprives you of practice and understanding, but is also unfair to the rest of your class. Any assignments that has copied or paraphrased content will receive a zero.

You are still, however, encouraged to discuss assignments and concepts on a high level with your classmates so long as you:

  1. Make a serious attempt on each and every problem or coding project before discussing it with others.
  2. Limit cooperation to just group discussion and brainstorming. A good rule of thumb is that you should not take away any written notes, photographs, or other records from your brainstorming session.
    • Do not show your code to another student, nor should you look at another student's code directly. This includes current and former students, tutors, friends, paid consultants, people on the internet etc...
    • Do not post your homework solution code publicly online for any reason.
  3. Write up each and every problem in your own writing, using your own words. (Similarly, you must write code on your own).
  4. List each person you collaborated with at the top of your written homework or in your project writeup.

Naturally, when working on a partner projects, you're free to share your code and collaborate in full detail with your partner. However, you should not share your code with other groups.

If you have a specific question about your code or written work, the only person you may show your work is a member of the course staff.

Cheating: If you do not follow these rules, you will be considered to have cheated. Cheating is a very serious offense. If you are caught cheating, you can expect a failing grade and initiation of a cheating case in the University system. Cheating is an insult to other students, to the instructor, and to yourself. If you feel that you are having a problem with the material, or do not have time to finish an assignment, or have any number of other reasons to cheat, we have many mechanisms for getting help. Copying the work of others is not the solution.

For more details, see this Academic Misconduct page. If you're not sure if something constitutes cheating, send the instructor an email describing the situation.

Getting help (link)

There are two main ways of getting help:

  • Google Discussion Board:

    We use Google Group as an online Q&A forum where you may ask questions. If you have a question, this should be the first place to check & it's often the case that other students may have had the same question.

    We also strongly recommend you monitor new questions asked on the Google Group semi-regularly: seeing questions other students ask can often be surprisingly enlightening.

  • Office hours:

    Please visit office hours! Answering questions during office hours is often one of the best parts of teaching, so please do us a favor and make use of them.

One additional resource to keep in mind is the resources page on the class website. This page contains links to a variety of guides, tips, and tricks on material we don't have time to fully cover during lecture or section. The resources there might not always be relevant, but they're checking from time to time.

Extra credit (link)

We will offer extra credit from time to time. Completing extra credit will NOT have a major impact on your grade: we will keep track of extra credit independently of your homework and use them to bump up borderline grades at the end of the quarter. This means completing extra credit will not be an effective way of making up for missed/incomplete assignments or boosting your grade.

Rather, the purpose of extra credit is to give you opportunities to engage more deeply in material you personally find interesting or to try implementing more challenging material. They're meant to be fun!

Software and textbooks (link)

We will use Java 8 on all programming assignments. (Our assignments should also theoretically be compatible with Java 9, but Java 9 is very new, so use it at your own risk).

Our officially supported IDE is Eclipse. You may use other IDEs like IntelliJ or Netbeans if you wish, though the course staff may not necessarily be able to help you with any setup-related questions you may have.

However, you MAY NOT USE jGrasp. (Well, you can try, but it's very likely that jGrasp will not be able to correctly load or run our class projects.)

The textbook for this course is Data Structures and Algorithm Analysis in Java (3rd edition) by Mark A. Weiss. This textbook is OPTIONAL: you should not need it to succeed in this course.

Acknowledgements (link)

Many of the materials posted here and used in this course have been shared and refined by many other instructors and TAs in previous offerings of CSE 373, CSE 332, and CSE 326. This version of the course was particularly influenced by previous offerings by Ben Jones, Kasey Champion, Michael Lee, Riley Porter, Ruth Anderson, Dan Grossman, Kevin Quinn, Hunter Zahn, Evan McCarty, and Adam Blank.