Course Staff

  • Lecturer: Raveen de Silva (z3372617)
  • Tutors: Kevin Zhu (z5206576), Paula Tennent (z5255101), Angus Ritossa (z5311370)

Email me at r.desilva@unsw (complete the rest).

Thanks to Steven Fan, Tim Lambert, Greg Omelaenko and Ray Li for all their work in setting up this course and creating resources in previous years.

Class Details

Class Instructor Weeks Day and Time    
Lectures Raveen 1–10 Tue 13:00 - 16:00 Zoom link Recordings
Consultation Raveen 1–10 Tue 17:00 - 18:00 Zoom link Recordings
Tute/Lab W13A Kevin 1–5, 7–10 Wed 13:00 - 16:00 Zoom link Recordings
Tute/Lab W13B Paula 1–5, 7–10 Wed 13:00 - 16:00 Zoom link Recordings
Tute/Lab F10A Angus 1–5, 7–10 Fri 10:00 - 13:00 Zoom link Recordings

Additional consultations will be held during the exam period, schedule TBA

Course Summary

  1. Introduction
  2. Data Structures
  3. Dynamic Programming
  4. Graphs
  5. Data Structures II
  6. Shortest Paths
  7. Network Flow
  8. Mathematics
  9. Dynamic Programming II

There is a tentative course schedule below.

Course Aims

This is a course designed to introduce advanced problem solving techniques to those who have already mastered the fundamentals of programming. A particular emphasis will be made on modifying existing algorithms to solve new problems in a novel way. Students will not only develop theoretical approaches to challenging problems, but also implement them.

Learning Outcomes

Upon completing this course, students will have mastery in applying various algorithms and data structures to solve competition-style problems, including implementation in C++.

Assumed Knowledge

  • Students are assumed to have a thorough understanding of basic algorithms and data structures, as covered in COMP1511 and COMP2521.
  • Students will benefit from having some familiarity with more advanced algorithms and data structures, as covered in COMP3121 or COMP3821.
  • Students are expected to be proficient in C or C++, as all coding in this course will be in C++. A detailed understanding of C++ classes from an object-oriented perspective is not required, but we will make use of STL and structs with member functions.

Teaching Strategies

Lectures will introduce the theory behind the algorithms and data structures used in the course, as well as providing examples of applications to problems of varying difficulty.

Tute/labs will provide students further guided examples, and an opportunity to practice implementing these algorithms and receive guidance on how to solve problems using the concepts introduced in lectures.

Teaching Rationale

This course extends COMP3121/3821 to include applications of problem-solving techniques, in order to code solutions to problems, particularly in the style of programming contests. As such, the course trains students to solve problems in this field across a variety of topics, including under time constraints.

Assessment

Problem Sets 40%
Problem Diary 8%
Contests 18%
Final 34%

2 bonus marks will be provided for participation in the South Pacific Divisional contest.

Problem Sets

At the start of every week except weeks 6 and 10, a set of 5 problems will be released on vjudge, usually due two weeks later at midnight. The exact deadline will be listed in the problem set.

Each of the 8 sets will be worth 5% of the overall course mark, for a total of 40%.

Solutions must be implemented in C++.

Thanks to Jaehyun Park for advice on the problem sets.

Problem Diary

For each problem set, a diary entry should also be submitted, explaining the process by which the solution was arrived at, and reflecting on any challenges encountered. The diary should be submitted no later than 48 hours after the problem set deadline.

Each submission should be a PDF of no more than three pages, excluding code snippets. It may often be acceptable to submit a diary entry of much less than this limit!

You are encouraged to include any progress made on problems which you did not solve.

Each of the 8 diary entries will be worth 1% of the overall course mark, for a total of 8%. Any submission demonstrating sufficient effort will receive the mark.

Contests

A long contest (5 problems, 48 hours) will be held in week 1. This contest is intended to be comparable in difficulty to a COMP2521 practical exam.

Two short contests (3 problems, 3 hours) will be held in weeks 4 and 9.

Each contest will be worth 6% of the overall course mark, for a total of 18%.

Final Exam

The final exam will be a long contest (approx 8 problems, 6 hours).

If it is necessary to break ties within the same course mark to obtain rankings, e.g. for first place, ties will be broken based on ranks obtained from the final exam according to ACM-ICPC scoring rules.

Academic Honesty and Plagiarism

  • For problem sets, students are encouraged, but any code must be derived and written separately, and any collaboration must be acknowledged in a header comment.
  • The course materials should be sufficient to complete the problem sets. If you use external resources, they must be general in nature (i.e. not specific to the problem in question) and must also be acknowledged in a header comment.
  • Problem diaries must be completed individually.
  • The contests and final exam must be completed individually without any collaboration with other students or third parties.
  • Copying or purchasing code from external sources is unacceptable.
  • There are serious consequences for plagiarism. The university’s policy can be found here. The School policies are located here.

Student Equity and Accessibility

Please contact me (r.desilva at unsw) if you require provisions for disabilities, or if you encounter other challenges during the term, and we will do our best to accommodate your needs.

Course Schedule

Week Lecture Lab Assessments
1 Intro Intro Contest 1
2 Data Structures I Data Structures I  
3 Dynamic Programming Dynamic Programming  
4 Graphs Graphs Contest 2
5 Data Structures II Data Structures II  
6 Revision Lecture    
7 Shortest Paths Shortest Paths  
8 Network Flow Network Flow  
9 Mathematics Mathematics Contest 3
10 Dynamic Programming II Revision  

A problem set will be released at the start of every week except weeks 6 and 10 (TBC). Each will typically be due in 2 weeks.

Resources for Students

  • The course website will contain all relevant resources, and there are no textbooks required for the course.
  • The following textbooks are suitable for reference:
    • Any algorithms textbook, such as Introduction to Algorithms (Cormen, Leiserson, Rivest and Stein) or Algorithm Design (Kleinberg and Tardos)
    • Programming Challenges (Skiena and Revilla)
    • Competitive Programming 3 (Halim). A free copy of Competitive Programming 1 can be found at CPBook
  • Students may find the following online resources helpful:
  • Further practice problems can be found in many places, e.g:
  • Students are encouraged to ask the lecturer or tutors for further resources.

Course Evaluation and Development

This course is evaluated each session using the myExperience system.

In the previous offering of this course, students reported that they liked the inclusion of subtasks in Contest 3 and wanted this extended to Contest 2.

Based on their comments, we will offer subtasks in Contest 2.