CS 2501: Data Structures and Algorithms I

Main Logistics Page

Fall 2019

Instructors

Course Info

Course Description: A second course in computing with an emphasis on foundational data structures and program analysis. The course provides a comprehensive look at the Java programming language including object oriented programming, concurrency, inheritance / polymorphism. Additionally, foundational data structures and related algorithms / analysis are studied. These include Lists, Stacks, Queues, Trees, Hash Tables, and Priority Queues.

Availability: It is important to me to be available to my students, and to address their concerns. If you cannot meet with me during office hours, e-mail and I will try to find the time to meet. That being said, like everybody else I am quite busy, so it may take a day or more to find a time to meet. And if you have any comments on the course - what is working, what is not working, what can be done better, etc. - I am very interested in hearing about them. You can send me an e-mail (please do NOT email the TAs directly). I tend to get bogged down by e-mail as the semester progresses, so seeing me in person (right after lecture, during office hours, etc.) is often a good way to get a more immediate response.

Prerequisites: CS 111x with a grade of C- or above.

Course objectives: The course objectives are:

Grades: Grades are calculated using a module system. The course has 14 modules. Each module has three completion levels: Incomplete, Competence, and Mastery. Each letter grade is associated with competence and mastery in some subset of the 14 modules. A summary of the specific grade mappings can be found on the course grading page

Special Circumstances: Students with special circumstances (athletics, extra time required on exams, final exam conflicts, SDAC considerations, etc.) need to let me know during the first week of class.

Textbooks: Due to the high cost of textbooks, and their relative low quality, there will be no recommended nor required textbooks this semester.

Exams: There will be no traditional exams in this course. Instead, each module is associated with one quiz. These quizzes are comparable to one page of questions on a traditional exam. In order to complete a module, you must complete the quiz for that module at some point during the semester. Every week in lab, you will have 30 minutes to complete up to two quizzes for the course (if you fail you can try again another week). Every week each quiz that has been covered in lecture will be available to retake if necessary. Once you pass a quiz for a module, there is zero benefit to taking it a second time.

Final Exam: Our final exam will be a 2-hour (note the shortened time span) for you to finish up any quizzes you have yet to complete. For example, if you have completed every quiz already, you will not need to take the final exam.

Homeworks: Each of the fourteen modules in the course contains 1 or 2 homework assignments. To master a module, you must complete all of the homework assignments associated with that module. Homeworks are pass/fail. A grader will either assess that the work is sufficient, or is not sufficient. If the latter, you may fix the errors and resubmit. All homeworks must be completed before the last Wednesday class period (i.e., the second to last lecture for the semester).

All assignments will be submitted through Collab under the assignments tool.

Computing resources: There are two specific computer resources needed for this course:

Attendance: Attendance in labs is mandatory if you intend to pass the class (because the quizzes are taken each week in lab); attendance in lecture is not mandatory.

Recording Lectures: You may NOT record my lectures. University policy states that this is not allowed without my consent.

Professionalism: We are all adults, and should act like such. Acting in an unprofessional manner that disrupts the class will first incur a stern talking-to. After that, a grade penalty may be assessed. Examples include: disrupting class, trolling people on Piazza, etc. This is meant to keep people from repeatedly disrupting class; we aren't trying to be super strict on this. And yes, a warning will first be given prior to any other action.

Honor Policy: There have been a large number of honor violations in this class and other low-level CS courses recently. Outside the normal UVa honor policy rules, we have these additional rules:

  1. If you are looking at another student's source code for ANY reason (including code from a student from a previous semester), you are in violation of the honor policy. You may look at another student's source code after the program has been submitted by BOTH parties.
  2. There are multiple midterm periods where students take exams, with a break between the the individual section times. Discussing the exam with a student who has not taken it is a violation of the honor policy.
  3. Releasing your homework online, including a public github repository, is an honor violation

Any honor violation or cheating will be referred to the honor committee, and will result in an immediate failure for the course, regardless of the outcome of the honor trial or your other grades. No exceptions! I am very strict on this, and one have successfully raised honor charges against students in the past due to violations of this policy.