Welcome to CSE 100: Advanced Data Structures!
This is a course in advanced data structure design, analysis, and implementation. You will use and implement of data structures like (un)balanced trees, graphs, priority queues, and hash tables. You will also learn how to make sophisticated use of memory management, pointers, and recursion in programs, and analyze them with theoretical and practical performance analysis.
By default, we will use the standard scale of 90%—100% = A, 80%—89.9% = B, 70%—79.9% = C, 60%—69.9% = D, and <60% = F. These cutoffs may be lowered if need be, but they will never be raised. In other words, we may make it easier to get a certain letter grade, but never harder. Pluses and minuses will be given at the instructor's discretion.
This course will be taught as a "flipped classroom," meaning you will learn the content before class via the assigned instructional materials, and during class, we will focus on addressing and correcting your misconceptions via problem solving and discussion. Generally, any given day of the course schedule (let's use November 25 as an example), you will be expected to complete the following tasks:
Content in the course will be delivered asynchronously in the form of short topic videos (~5–10 minutes each). Each day of the course schedule will have a few assigned topic videos, and you are expected to watch the topic videos before the class on the corresponding day.
For students in China who may not have access to the Topic Videos via YouTube, you can download them from the following Baidu Pan folder:
In addition to the topic videos, we will assign readings from this course's free online interactive textbook, Data Structures, to supplement your learning. This interactive textbook has embedded multiple choice, free response, and even coding challenges, so you may wish to refer to it for practice (though the challenges embedded throughout the textbook will not be factored into your course grade).
Prior to a given day of the course schedule, after you have finished the topic videos (and potentially the optional readings) assigned for that day, you will complete a short Reading Quiz (RQ), which will be due at 8:00 AM on that day. All RQs are automatically graded instantly upon submission and will provide you feedback, and you have unlimited attempts until the deadline. You are allowed to collaborate with your peers on the RQs.
RQ points cannot be made up, and late RQ submissions will not be accepted in this course.
Instead of holding traditional lecture-style sessions, we will be holding synchronous instructor-led Problem Solving Sessions (PSSs). We expect that all students have at least been exposed to the topics for a given PSS prior to attending (via the corresponding topic videos, assigned readings, and RQ). Thus, rather than regurgitating the exact same information, these PSSs will focus on the following:
PSS attendance will be completely optional, and recordings of the PSSs will be made available for you to follow along (or re-watch) asynchronously. However, we strongly encourage as much participation as possible, and all students will be expected to either attend or watch the recording of every PSS.
Each week, we will be holding synchronous TA-led Discussion sections, which will focus on the following:
Discussion attendance will be completely optional, and recordings of the Discussion sections will be made available for you to follow along (or re-watch) asynchronously. However, we strongly encourage as much participation as possible, and all students will be expected to either attend or watch the recording of every PSS.
The Programming Assignments (PAs) will be the core form of assessment in this course. Typically, we will release a PA each Wednesday, which will be due at 10:00 PM the following Tuesday.
Each PA will focus on the content covered in the 3 lectures during the week the PA was released. For example, if a PA is released on the Wednesday of Week 5, it will focus on content covered during the Monday, Wednesday, and Friday lectures of Week 5. All PAs are automatically graded instantly upon submission and will provide you feedback, and you have unlimited attempts until the deadline.
In addition to the PAs, which are generally split into smaller chunks, we will have two larger Projects towards the end of the course. These will combine data structures knowledge you acquire from class and homework with the pragmatics of writing a significant application that demands high performance.
For both, the grade you will receive is the grade of your highest-scoring on-time submission. PAs and Projects will only be graded based on correctness: we will not grade for programming style (e.g. comments, indentation, etc.). However, we strongly urge you to maintain good programming style as you work on the PAs and Projects, as clean code is easier to read, interpret, and ultimately debug. Also, tutors will skip your ticket in the labs if they are unable to read your code easily.
While we encourage discussing higher-level conceptual aspects of the PAs and Projects with your peers, all work must be yours alone. Sharing code (or anything easily translated into code) is a violation of UCSD's Academic Honesty policy and is not allowed.
Late PA and Project submissions will not be accepted in this course. Start early, start often.
You will have two exams in this course: a Midterm and a Final. The exams will be administered asynchronously: you will have a larger window of time within which you can choose to start the exam at any time, and from the moment you start the exam, you will have a limited amount of time to complete the exam (Midterm: 50 minutes; Final: 180 minutes). The time will be shown via a countdown. The dates of both exams can be found in the Course Calendar.
All students must submit the Academic Integrity Form at the start of the course. You will not receive any course credit until you submit the form. By submitting the form, you are agreeing to its terms, so be sure to read it carefully. We encourage you to study together and discuss concepts from this class, and you may work on the RQs collaboratively, but all PAs and Projects must be written completely independently. No sharing code or anything that can be trivially converted to code! If you are found to have violated the course's Academic Integrity Policy, you will receive an automatic F in the course, and you may face even stricter sanctions from the University. In short, do not cheat!
We expect that all students will need help at some point in this course. If you find yourself needing help, this is not cause for embarrassment: it is completely expected, and our goal is to ensure that you are able to receive the help you need. Please be sure to seek help early and often through any (or all!) of the following resources:
Thank you for reading the course syllabus! Niema's favorite video game is Final Fantasy VII.