CMPUT 403 (Practical Algorithmics)
Winter 2019,
Instructor: Michael
Buro
Irregular meetings: Fridays 14:0015:00 CSC 349 (first: Jan11)
Weekly Meetings: Fridays 15:0017: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 there are currently no seats
available. Please send me email to put you on the waiting list (see
prereqs below)
Prerequisites
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 then
News
 [Mar2] Presentation updates
 [Feb25] Presentation selection is coming up. Slots are assigned firstcomefirstserved
 [Jan23] You can use code in our code archive and code
found here
to solve problems
 [Jan10] Welcome to the course!
Tentative Schedule
CSC 349 CSC 349
Friday 14:00  15:00  15:00  17:00
Jan 11 Course Intro  Programming Club
Jan 18 %  ...
Jan 25 % M1 
Feb 1 % 
Feb 8 % M2 
Feb 15 % 
Feb 22  READING WEEK 
Mar 1 % M3 
Mar 8 % M4 
Mar 15 %  [P1: Petrich: strongly connected components] [P2: Hong: Quickhull]
Mar 22 %  [P3: Malynin: heavylight decomposition] [P4: Ligai: Manacher's algo]
Mar 29 %  [P5: Li: sweepline algos] [P6: Krishnan: sparse tables + sqrt decomposition]
Apr 5 %  [P7: Perez: Zalgo] [P8: Hreherchuk: Pollard's Rho] [P9: Gandhi: polygon triangulation]
% : no dedicated 403 meeting yet, announcements will be sent out in time
P : presentation slot. Earlier presentations are welcome!
Mi : milestone i due at 22:00 (see below)
Resources
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 resgister, please contact me
Course Work
Deliverables
 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
doubledipping. They may even be classified differently (e.g.,
simple on UVa and challenging on Kattis)
Please note, that solutions to problems discussed in the
programming club will not be accepted
 Attend weekly programming club meetings (3 absences are free)

In your 20 minute (strict!) presentation you describe an algorithm
and/or data structure that is relevant to contest problem solving
(but we haven't covered it in the meetings yet), motivate its
correctness and runtime/space characteristics, explain how it
works using a nontrivial example, show an actual implementation,
discuss implementation details, and one or two UVa/Kattis sample
problems that can be solved with it. Specialized algorithms such
as TD learning, MCTS, and neural networks don't qualify because
they are not used in contests. If you can't think of anything,
consult the competitive programming book, or the instructor
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
Submit all solutions and your presentation separately via eClass:
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
structure
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
 Jan. 25 22:00 (M1): ≥ 4 problems solved (≥ 1 challenging)
 Feb. 8 22:00 (M2): ≥ 10 problems solved (≥ 5 challenging)
 Mar. 1 22:00 (M3): presentation topic proposal
 Mar. 8 22:00 (M4): ≥ 24 problems solved (≥ 12 challenging)
 Apr. 10 22:00 : all course work has to be handed in
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
conventions
Evaluation
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)
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% + P * 20%  (M1+M2+M3+M4+AT) * 10%
 (#missingmandatoryproblems) * 0.5%
Letter Grades
Please visit
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
Topics
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]
Other 2+
 String (search, manipulation, matching)
Mandatory: [GATTACA uva_11512  use suffix array] [Musical Plagiarism uva_11837]
Other 2+
 Sorting
Mandatory: [Shoemaker's Problem uva_10026] [Flip Sort uva_10327]
Other 2+
 Arithmetic
Mandatory: [Repeating Decimals uva_202] [Binomial Theorem uva_11955]
Other 2+
 Combinatorics
Mandatory: [Andy's Shoes uva_11330] [Rubik Cycle uva_12492]
Other 2+
 Number Theory
Mandatory: [Big Mod uva_374] [Enumerating Rational Numbers uva_11327]
Other 2+
 Backtracking
Mandatory: [Another nQueen Problem uva_11195] [Sticks uva_307]
Other 2+
 Graph Traversal
Mandatory: [The Tower of Babylon uva_437] [Marbles on a tree uva_10672]
Other 2+
 Graph Algorithms
Mandatory: [Airline Comparison uva_869] [Freckles uva_10034]
Other 2+
 Dynamic Programming
Mandatory: [Coin Change uva_674] [Cutting Sticks uva_10003]
Other 2+
 Geometry
Mandatory: [The Fortified Forest uva_811] [Useless Tile Packers uva_10065]
Other 2+
 Other Topics
That is: 22 problems are mandatory, 22 more have to be chosen from the
topic list (2 each), and the remaining 16 can be freely chosen
(subject to the simple/challenging problem count constraints)
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 "realtime" 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
Books
 Programming contest books:
 General algorithms books:

Introduction to Algorithms (CLRS), free downloads of older editions available
 C, C++, STL, Java,...
Collaboration
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 #
since Aug/20/2018