CMPUT 403 (Practical Algorithmics)
Irregular meetings: Fridays 14:00-15:00 CSC 349 (first: Jan-11)
Weekly Meetings: Fridays 15:00-17:00 in CSC 349 (programming club)
If you are interested in efficient algorithms, problem solving, and
fast implementations this individual study course may be the right
course for you. It will also help you pass technical job interviews!
For W2019 a few seats are still available. Please send me email to enrol (see prereqs below)
Previous exposure to efficient algorithms (CMPUT 204 or 275) and
proficiency in either C++ or Java
I recommend attending programming club meetings
already in the Fall term because we will start the academic year with
introductions to various contest resources and cover many fundamental
algorithms and data structures in the Fall term.
CSC 349 CSC 349
Friday 14:00 - 15:00 | 15:00 - 17:00
Jan 11 Course Intro |
Jan 18 % |
Jan 25 % M1 |
Feb 1 % |
Feb 8 % M2 |
Feb 15 % |
Feb 22 ----- READING WEEK -----------------------------------
Mar 1 % M3 |
Mar 8 % M4 |
Mar 15 % |
Mar 22 % |
Mar 29 ----- GOOD FRIDAY ------------------------------------
Apr 5 % |
Apr 12 % |
% : no dedicated 403 meeting yet, announcements will be sent out in time
P : presentation slot. Earlier presentations are welcome!
C : problem championing slot
Mi : milestone i due at 22:00 (see below)
How it works
CMPUT 403 is an individual study course in which students solve ACM
programming competition style problems individually at their own pace
(some milestones and deadlines apply).
The main focus of this course is the preparation for ACM programming
contests. However, some students have successfully taken CMPUT 403
just for learning, without participating in any contests.
We cover a wide range of topics. For each, I ask students to solve at
least 4 problems, for a total of 60 problems (see below).
I only tally up scores for checking milestones and at the end of the
term. So, you can solve more problems in weeks when you have more
time, and fewer in a busy week. You can also fix up your solutions
later during the term, if you do not get them accepted on UVa or
Open Kattis right away.
I highly recommend trying to do some of these problems now, before you
decide to take this course. I can guarantee that this will be a lot
more work, but also more fun, than a normal undergrad course. This
course is meant only for students who are serious about learning about
algorithms and how to use them in problem solving, and who are willing
to invest the time and effort.
To sign up, please contact me.
Submit all solutions and your presentation separately via eClass:
- Get yourself an account at
the UVa Online Judge
and Kattis systems.
- Solving at least 5 problems a week on average (60 problems in
total, see topics list below, ≥ 30 of them challenging) will give
you 100% in this category. All problems you solve must have been
attempted by at least 100 people on UVa or Open Kattis ("Total
Users" column), and at least half of the problems you solve must
be challenging which in this course is defined
as: Solving % (last column) < 80% on UVa and Difficulty rating ≥
5 on Kattis. Each solution file must contain a description
of the solution (idea, data structures used) and the code must be
well documented (see format below). A problem is "solved" once
you submit a solution and get the
verdict ACCEPTED from the online
judge. Otherwise you get no credit for the problem, don't bother
handing it in. Some problems appear on both UVa and Kattis. No
double-dipping. They may even be classified differently (e.g.,
simple on UVa and challenging on Kattis).
- Attend weekly programming club meetings (3 absences are free)
- Champion 1 challenging problem in programming club meetings that
are not on the mandatory problem list: describe the problem and
present a working solution including code after our solution
attempts. To schedule championed problems you need to inform me by
Wednesday of the week you'd like to present.
As in each session at most 3 problems can be
championed, please plan ahead and try to champion a problem early
to avoid scheduling conflicts at the end. If the champion schedule
gets tight, I will assign remaining slots randomly.
- For your 15-20 minute (strict) presentation please select an
algorithm or data structure that is relevant to contest problem
solving (but we haven't covered it in the meetings yet) and then
describe how/why it works, its implementation, and one or two sample
problems that can be solved with it. Specialized algorithms such as TD
learning, MCTS, neural networks don't qualify because they are not
used in contests. If you can't think of anything, consult the
competitive programming book. Examples include tries,
sweep-line-algorithms, 3d convex hulls, simplex algorithm, matroids,
planarity testing, and range trees.
In your presentation you describe an algorithm and/or data
structure, motivate its correctness and runtime/space
characteristics, explain how it works using a nontrivial example,
show an actual implementation, discuss implementation details, and
Presentations can be given anytime during
the term in the Friday programming club meeting. Please let me
know if you want to present by Wednesday prior to the presentation
date. If the presentation schedule gets tight, I
will assign remaining presentation slots randomly. I
encourage students to present early.
solutions.tgz (containing your solution files - described below)
presentation.pdf (your presentation)
I suggest to submit regularly as you solve new problems. At the
milestone dates I will untar the current submission to check whether
you solved enough problems.
Your solutions.tgz file is a compressed tar file that contains ALL
solution files you have produced thus far. It has to have the
of solutions.tgz. Please refer
to the README file inside.
You need to complete this header and add it
to each of your solution files.
Milestones and Deadlines
Missing milestones will lower your score substantially (see
below). Make sure that all your submitted solutions are accepted and
that your tar file obeys the specified folder structure and file name
- Jan. 26 22:00 (M1): ≥ 4 problems solved (≥ 1 challenging)
- Feb. 9 22:00 (M2): ≥ 10 problems solved (≥ 5 challenging)
- Mar. 2 22:00 (M3): presentation topic proposal
- Mar. 9 22:00 (M4): ≥ 24 problems solved (≥ 12 challenging)
- Apr. 13: all course work has to be handed in
- by Wednesdays: propose a problem you'd like to champion in the
following Friday meeting
A = # of solved SIMPLE problems on UVa/OpenKattis
B = # of solved CHALLENGING problems on UVa/OpenKattis
S = min(A+B,B+B) (half of the problems should be challenging)
C = 1: one championed challenging problem in the programming club, 0 otherwise
P = presentation mark ∈ [0,1]
Mi = 1: Milestone i NOT achieved, 0 otherwise
AT = 1: Missed more than 3 PC Meetings, 0 otherwise
score = min(S, 60)/60 * 80% + C * 5% + P * 15% - (M1+M2+M3+M4+AT) * 10%
- (#missing-mandatory-problems) * 0.5%
this page to learn about our
interpretation of letter grades.
In this course grades will not be curved, they are absolute -
following these score cut points:
>= 95% A+ >= 90% A >= 85% A-
>= 80% B+ >= 75% B >= 70% B-
>= 65% C+ >= 60% C >= 55% C-
>= 50% D+ >= 45% D < 45% F
The following is a list of topics we will cover, corresponding to the
chapters of the text books and Howard Cheng's problem collection. The
easiest way to find more problems in those categories is to look at
Howard's collection or the text books.
- Data structures: heaps, priority queues, etc.
Mandatory: [Friends uva_10608] [Andy's First Dictionary uva_10815]
- String (search, manipulation, matching)
Mandatory: [GATTACA uva_11512 - use suffix array] [Musical Plagiarism uva_11837]
Mandatory: [Shoemaker's Problem uva_10026] [Flip Sort uva_10327]
Mandatory: [Repeating Decimals uva_202] [Binomial Theorem uva_11955]
Mandatory: [Andy's Shoes uva_11330] [Rubik Cycle uva_12492]
- Number Theory
Mandatory: [Big Mod uva_374] [Enumerating Rational Numbers uva_11327]
Mandatory: [Another n-Queen Problem uva_11195] [Sticks uva_307]
- Graph Traversal
Mandatory: [The Tower of Babylon uva_437] [Marbles on a tree uva_10672]
- Graph Algorithms
Mandatory: [Airline Comparison uva_869] [Freckles uva_10034]
- Dynamic Programming
Mandatory: [Coin Change uva_674] [Cutting Sticks uva_10003]
Mandatory: [The Fortified Forest uva_811] [Useless Tile Packers uva_10065]
Questions and Answers
- Q: I would like to learn the algorithms, but I do not like
competitions. Can I still take this course?
A: Absolutely, yes. There is no "real-time" component in the course evaluation.
Q: Can I "trade in" this course for another, required course?
A: Yes. Talk to our undergrad chair (currently Paul Lu).
Q: Does this course count as qualification for our programming team?
A: No. We will run separate qualifiers in the fall, before the
provincial and regional competitions. But the experience you gain here
will help you make the team.
- Programming contest books:
- General algorithms books:
Introduction to Algorithms (CLRS), free downloads of older editions available.
- C, C++, STL, Java,...
You can talk to anyone else in person about the problems, but you have
to write up your own solution. Do not work out code or even pseudocode
with anyone else, all collaboration should be verbal only. All
collaborations must be cited.
Do not consult internet resources for solving particular
problems. That is, do not look up code or even discussions about
particular problems online. You may use online resources to learn
about algorithms and programming challenges in general, but not for
solutions to specific problems. Again, cite any sources you consult.
Failure to give proper credit is considered plagiarism. In general,
academic dishonesty is a serious offence and can result in suspension
or expulsion from the University.
The instructor reserves the right to give you an oral and/or written
exam to determine the degree that you participated in the making of
the deliverable, and how well you understand what was submitted. This
may impact the mark you receive for the deliverable.
last modified on
; you are visitor #