The goal of this course is to build a tool kit to better solve a variety of computational problems, and to evaluate the quality of such solutions. In particular, we will cover:
At the conclusion of this course, a successful student will be able to:
You should take this course if and only if
This course will assume knowledge of several topics from discrete math (CS2102 at UVA), two semesters of programming experience (through CS2110 at UVA), and data structures (CS2150 at UVA)
In particular, we assume knowledge of (with recommended resources for review):
prose proofs(CS2102 Proof style guide)
For each of the Discrete Math topics, the Fall 2019 lectures are publicly available.
In the opinion of this instructor, an algorithms course should serve to:
Since developing a skill is a much more substantial undertaking than understanding prior work of others, the majority of your homework time will be spent on developing that skill. This will be at times uncomfortable, occasionally frustrating, but hopefully always fun and valuable in retrospect. I have a few guidelines/suggestions for how you can get the most out of this course:
A typical spring/fall semester at UVA is ~15 weeks long (including exams), whereas a summer course is 4 weeks long. This means that summer courses are accelerated roughly 4x compared to a course offered in the spring/fall. Considering that a full-time courseload at UVA is 12 credit hours, expect that a 3 credit-hour course offered during the summer (like this one) will require a full-time workload. Another way to think about it: the amount of time you spend per day on this one summer course should roughly match the aggregate amount of work you would spend per day on all your courses during a normal semester.
As a warning, with this 4x acceleration, it can be very difficult to catch up if you fall behind. Each lecture session this summer is 135 minutes. During a normal semester you have 150 minutes of instruction per week. This means that each summer lecture contains nearly a week’s worth of content. Keep this in mind if you need to take a day off due to illness, etc.
Now that I’ve sufficiently warned you, please take comfort that I have done my best in trying to make this course workable with a summer schedule. The structures have been designed based on extensive student feedback. The most successful students tend to approach this course like a full-time job, establishing a regular work schedule of 8-9 hours of work per day (amortized).
Officially, no. Unless specifically designated as an online course, all UVA courses are in-person. That being said, I will do my best to produce and share recordings of the in-person lectures, and will never take attendance. Assignments will be posted, submitted, and graded online. We will not have any graded in-class activities (including exams). However, most (but not all) office hours in person. Additionally, most homework assignments are open for collaboration, which will be harder to do virtually.
In summary, it’s hypothetically possible to participate exclusively virtually and succeed in the course, but I’m assuming that all students can appear in-person, and so you’ll have a better experience if you are physically present.