NUS HomeCompetitive Programming
Home


Last updated on: 20 January 2009 07:59:56 PM

Preface

These web pages are being re-written for CS3233 - Competitive Programming course that I teach in Semester 2, 2008/09. Many sections are still missing... To see the older version (which contains too much materials from USACO training gateway), click this.

These web pages contain a collection of relevant data structures, algorithms, and programming tips specially written for University students who want to be more competitive in ACM International Collegiate Programming Contest (ICPC). Although written with ICPC format in mind, these web pages can also be used by high school students who want to be competitive in International Olympiad in Informatics (IOI) or other relevant programming competitions. These web pages do not contain detailed theories why certain data structures or algorithms are correct (I will simply cite other references).

My objective in writing these web pages is similar with ICPC vision: to further improve humanity by training students to be more competitive in programming contests. The possible long term effect is future Computer Science researchers who are well versed in problem solving skills.

Target Audience (Intermediate Programmers)

The reader should have some background knowledge in basic data structures, algorithms, and programming languages. Typically, a 2nd year Computer Science students in a University (who have passed a kind of "programming methodology" and "basic data structures and algorithms" module) or students who have participated in National or International Olympiad in Informatics should have the necessary background. I use C++ codes to illustrate some concepts.

The contents in these web pages are not targeted for expert programmers who aim to win an ICPC regional contest or even world final contest. To gain access to newer and more sophisticated data structures or algorithms - which may be required to be very good in problem solving, browse the Internet for other sources.

Table of Contents (will only be uploaded probably in May 2009, when the course is over)

01. Introduction
02. Basic Data Structures and Algorithms
03. Sorting and Searching

04. Greedy
05. Dynamic Programming
06. Graph
07. Mathematics-Related
08. String Processing
09. Computational Geometry
10. Competition Strategy

11. Links to Computer Science Research: NP-hardness, exact/complete algorithm versus inexact/stochastic local search

Acknowledgements

I thanks Jesus Christ (JC), for giving me some talents in this field. Without that, these web pages do not exist. I also want to thanks my parents, who forced me to learn something with my new PC (it was, back in 1995). Eventually, I picked some programming books, became interested with them, and never look back since then.

Very Important Note

If you want to copy anything from this website and distribute it either for profit or non profit, you need to ask my permission first and must cite this website. Thanks for your understanding :)

In case you do not know, parts of the (older) content of this website are already published in Ahmed Shamsul Arefin's book: Art of Programming Contest. Please take a look.

If you need to have a printed version of the (older version) of this website, buy/print this book.

Steven Halim
PhD candidate, Instructor
Department of Computer Science
National University of Singapore

References

Most of these books should be available in your University libraries.
If not, you can buy it online, e.g. through amazon.com.
 

1

Introduction to Algorithms, 2nd edition, 2001
by: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein
MIT Press
ISBN:
0262032937
(website)

2

USA Computing Olympiad (USACO) Training Gateway
by Rob Kolstad and team
(website)

3

Algorithm Design, 2005
by Jon Kleinberg and Eva Tardos
Addison Wesley
ISBN:
0321358287

4

Programming Challenges, 2003
by Miguel A. Revilla and Steven S. Skiena
Springer
ISBN: 0387001638
(website)

5

Introduction to the Design and Analysis of Algorithms, 2nd edition, 2006
by Anany Levitin
Addison Wesley
ISBN:
0321358287

6

cover

The Algorithm Design Manual, 2nd edition, 2008
by Steven S. Skiena
Springer
ISBN:
1848000693
(website)

7

Algorithms in C++, 2002
by Robert Sedgewick
Addison Wesley
ISBN:
020172684X

8

Programming Pearls, 1999
by Jon Bentley
Addison Wesley
ISBN: 0201657880

9

Art of Programming Contest, 2007
by Ahmed Shamsul Arefin (and me)


This document, index.html, has been accessed 3871 times since 05-Jan-09 15:29:06 SGT. This is the 3rd time it has been accessed today.

A total of 2195 different hosts have accessed this document in the last 308 days; your host, 38.107.191.105, has accessed it 2 times.

If you're interested, complete statistics for this document are also available, including breakdowns by top-level domain, host name, and date.