CSI 4144: Competitive Learning, Fall 2016

Overview

This course is a topics course in problem solving and algorithms. It is modeled on the collaborative and competitive environments at the ACM International Collegiate Programming Contest. Each week we will discuss a topic, and the assignments will be programming-based problems related to that topic.

Practical information

Lectures are Tuesdays from 15:30 to 16:20 in Cashion C202.

My office location and office hours are listed on my home page. I am glad to talk to students during and outside of office hours. If you can't come to my office hour, please make an appointment for another time, or just stop by.

You will submit your solutions to Baylor's Kattis Judge. You may need to create an account, and will then register for the course.

Schedule

Here is a schedule of the material we will cover. Please visit Kattis to see the assignments for the week.

Week:

  1. Introduction to Problem Solving.
  2. Elementary Data Structures — The C++ Standard Template Library or Java Collections, including sequence containers, iterators and basic template algorithms.
  3. Sorted associative set and map data structures and their implementations in C++ STL or Java Collections. Problem ideas due for 2nd/3rd semester students.
  4. Input and output.
  5. Introduction to graphs — representation, elementary algorithms (DFS, BFS, loop detection, topological sort).
  6. Local contest (the week of this may change to fit the ICPC North American Qualifier).
  7. Intermediate graph algorithms, spanning trees, shortest paths.
  8. Introduction to computational geometry, basic representation, vector operations, proximity tests.
  9. Intermediate computational geometry, angle problems, convex polygons, intersection problems.
  10. Advanced computational geometry, convex hull, closest pair of points. Complete drafts of problem statements due for 2nd/3rd semester students.
  11. Local contest.
  12. Introduction to dynamic programming, elementary algorithms, memoization.
  13. Dynamic programming, additional algorithms, theory and algorithm development.
  14. No class meeting; catch up on previous problems.
  15. Final local contest.

Textbooks & resources

The textbook for this course is Competitive Programming by Steven Halim and Felix Halim (Edition 1 is free online, editions 2 and 3 are inexpensive).

The following books may also be useful:

Other online programming contest software:

Other online resources:

Course handouts

Grading

Grades will be assigned based on the following breakdown:

Final letter grades will be assigned at the discretion of the instructor, but here is a minimum guideline for letter grades:
A: 90-100, B+: 88-89, B: 80-87, C+: 78-79, C: 70-77, D: 60-69, F: 0-59

Solving problems

Each problem completed within 1 week of it being assigned earns 2 points. Each problem not completed within a week but completed by the end of the semester earns 1 point. Completing a program means passing the (hidden) tests on the judge.

For weeks designated as "contests", the problems will not be publicly posted to the web. You should choose a 3 hour window during which you plan to work on the problems. Send your professor an email about 24 hours in advance of this time, and he will send you the problems via email. Then work on the problems during your chosen time frame.

Writing problems

Students taking the course for the second (third) semester must develop one (two) problems of their own. Use the Kattis problem package and fill in the relevant parts. In particular, your writeup should have:

The reason we use Kattis problem package format is due to the set of tools that are available for verifying problem integrity. You should get and install them from github on the Kattis problemtools project page. (They are easiest to install on Ubuntu.) As the problemtools package uses a Git submodule, to get the full source you need to use the following command to get all the sources you'll need:

git clone --recursive git@github.com:Kattis/problemtools.git
After installing it, use this software to verify your problem package before submitting it to me. This means running "verifyproblem.py" to verify the entire problem package. You can also use "problem2pdf.py" to see how your problem writeup looks when rendered in PDF.

There are multiple deadlines for problem writeups, which are listed on the schedule above:

  1. The first deadline is a 1-2 paragraph description of the problem idea(s), including the motivation, type of problem (search, shortest path, dynamic programming, etc.), and the basic story outline for the problem.
  2. The second deadline ("Complete draft") means all parts of the problem package(s) should be written -- solution, writeup, input verifier, problem data, etc. The package should verify with Kattis problemtools "verifyproblem". I will evaluate these and send feedback for the final version.
  3. The deliverable of the final deadline is the same as that of the complete draft, except it should be highly polished and in final form. Even with a complete draft that is in good shape, getting a well-crafted problem can be a lot of work, so don't put off working on this.

Here are some additional thoughts and guidelines on how to write programming contest problems.

Policies

Academic honesty

I take academic honesty very seriously. Many studies, including one by Sheilah Maramark and Mindi Barth Maline have suggested that "some students cheat because of ignorance, uncertainty, or confusion regarding what behaviors constitute dishonesty" (Maramark and Maline, Issues in Education: Academic Dishonesty Among College Students, U.S. Department of Education, Office of Research, August 1993, page 5). In an effort to reduce misunderstandings, here is a minimal list of activities that will be considered cheating in this class:

Title IX Office

Baylor University does not discriminate on the basis of sex or gender in any of its education or employment programs and activities, and it does not tolerate discrimination or harassment on the basis of sex or gender. If you or someone you know would like help related to an experience involving sexual or gender-based harassment, sexual assault, sexual exploitation, stalking, intimate partner violence, or retaliation for reporting one of these type of prohibited conduct, please contact the Title IX Office at 1-254-710-8454 or report online at www.baylor.edu/titleix

The Title IX office understands the sensitive nature of these situations and can provide information about available on- and off-campus resources, such as counseling and psychological services, medical treatment, academic support, university housing, and other forms of assistance that may be available. Staff members at the office can also explain your rights and procedural options if you contact the Title IX Office. You will not be required to share your experience. If you or someone you know feels unsafe or may be in imminent danger, please call the Baylor Police Department (1-254-710-2222) or Waco Police Department (9-1-1) immediately. For more information on the Title IX Office, the Sexual and Gender-Based Harassment and Interpersonal Violence policy, reporting, and resources available, please visit the website provided above.


Copyright © 2016 Greg Hamerly, with some content taken from a syllabus by Jeff Donahoo.
Computer Science Department
Baylor University

valid html and css