Students will work in groups of approximately 3-4 students on a semester-long project on a chosen algorithmic problem. Students must implement a solution to the problem, along with a report documenting their progress over the course of the semester. In particular, the report should include an analysis of the problem (including relevant algorithmic literature) and a summary of the group's solution. Teaching will consist of a mixture of lectures and group activities. Lectures will give students background information on associated topics. During group activities students will work on their projects, with instructors available for help. The majority of the lectures will take place closer to the beginning of the course to give students background, while the end of the course will focus much more on group sessions. Groups will have the opportunity to present their progress in class and receive peer and instructor feedback.

The exam will consist of three parts: the project code (if applicable), a written report, and an oral exam. The project itself (the code and report) will be graded as a group. The written report is expected to explain the solution ideas, and show mastery of the learning outcomes. The oral exam tests each student's knowledge of the project, and is graded individually. Students should have a mastery of their contributions to the project, and should be familiar with all other parts of the project. Size of groups: 3-4 students. Duration of oral exam: 30 minutes including a 10 minutes group presentation.