Compsci 149s, Spring 2012, Home

Course Information

Instructor: Michael Hewner (hewner@cs.duke.edu, or http://www.hewner.com)
TAs: Siyang Chen (siyang.chen@duke.edu), Kevin Kauffman (speedyguy17@gmail.com)
Time: Mondays, 6:15 PM (new section), 7:15 PM (old section)
Place: LSRC D106

Goals

The goals of 149s are to:

  1. Improve your problem-solving skills. While we will be focusing mainly on the theory and implementation of algorithms, the material covered in this class is applicable to many other types of problems.
  2. Have fun doing programming competitions. (See the section on TopCoder below)

Prerequisites

There are no hard prerequisites for this course, but usually it's good if students have the equivalent of CompSci 100 before taking this course. Some students have had success taking this course and CompSci 100 at the same time. You should be comfortable with mathematical/logical reasoning and be able to write simple programs in Java or C++. Please contact an instructor or TA if you're concerned about whether or not you should enroll.

Class Structure

The class is divided into two sections. Students who have participated in the class before will be placed in one section, while new students will be placed in the other. A highly experienced student may be able to move to the returning section with the permission of the professor. Returning students may attend the new student section if they want a refresher/are not familiar with a particular week's topic.

Problems

There will be weekly problem sets based on a specific topic or problem set. Sometimes we may ask you to do a particular problem on the next week's problem set to prepare for lecture. It is expected that every student in the class is capable of looking up and implementing a particular algorithm, possibly with help from a friend, instructor, TA, or other resource.

Class

The new student section will generally involve a lecture/discussion about a specific topic/algorithm, followed by walking through a problem related with the topic. The advanced student section will not be topic-focused; rather, problem sets will involve a large variety of techniques.

TopCoder

One of the main purposes of this class is to prepare you for the annual ACM International Collegiate Programming Competition (ACM-ICPC). Unfortunately, this occurs in November. In its place, we will focus on a different set of contests which require a similar skill set: TopCoder. TopCoder Single Round Matches (SRMs) are individual 1.5 to 2 hour contests which occur every 2 weeks. The format involves writing a method to solve a very specific algorithmic problem. There are two divisions divided at the user rating of 1200, and each division has its own set of 3 problems (easy, medium, and hard) for each contest. Unlike ICPC, the harder the problem, the greater its value. Our goal by the end of the semester is to improve the TopCoder performance of each member of the class.

Additional Discussion Sessions

If there is enough demand, we may hold additional weekend sessions to discuss particularly challenging or interesting problems. Attendance will, of course, be optional.

Requirements for an A-

1. Participate in 3 TopCoder SRMs

The competitions are held at varied times and days, so each of you should find several throughout the semester which fit your schedule. We will usually reserve a room in the link for the SRM and go over the problems afterwards. We cannot "add" extra SRMs at the end of the semester so be sure to start doing then early in the semester to ensure you get 3. The full schedule is listed below.

2. Submit Problems Every Week

You must submit at least 3 problems each week. Problems are due at 5PM on the day of class and can be submitted via Sakai.

Turning in problems late will reduce the amount credit for problems. If we notice you habitually turning in problems late, expect an email from us. Missing problem lots of problem sets can cause your grade to drop considerably.

3. Attend Class

If you miss more than four classes, you lose a letter grade in this course. If you feel like class is not working well for you, talk with me and we'll see if we can address your concerns, but don't just stop attending.

4. Work on the Project

We will be announcing a slightly larger programming challenge in the middle of the semester. You will work in groups of 2-3. Details (including exactly what you must do for an A-) will be announced at that time.

Getting an A/A+

With a minimal amount of work, you can get an A- in the course. To get an A or A+, you should:

  1. Frequently attend the SRMs (if have some circumstance that makes it difficult to attend SRM, talk to your instructor and we can work out a good accommodation)
  2. Do more than the required minimum number of problems

The criteria for an A or A+ will be determined by the instructor at the end of the course.

Getting Help

Get help! This course is about improving your coding skills, not banging your head against the wall. We highly recommend working with other students or asking instructors/TAs for help. While we would like you to submit your own solutions, do not get stressed if your code is similar to somebody else's.

Auditing

Anyone is welcome to audit the course. If you are sitting in on a class, we would like you to complete the relevant assigned problem due before that class --- otherwise you may not get much benefit from coming. Also, feel free to attend the scrimmages.