This webpage contains online self-study material for students preparing for the Indian Computing Olympiad. The Computing Olympiad is a test of knowledge and skill in algorithms and programming. Teaching programming is beyond the scope of this training material. The focus is on presenting some basic ideas about algorithms and data structures, primarily through representative problems.
Some of the problems discussed in these notes, and many others that require similar techniques, can be found at the the The IARCS Problems Archive. This is an online resource where you can submit your code and have it automatically evaluated on representative test cases. Other, similar, sites are listed on the left under Online judges.
The best place to learn the background material is a good textbook on algorithms.
A good book that combines detailed presentations with many interesting examples is the following.
Algorithm Design, by Jon Kleinberg and Evá Tardos
This next book is probably the most comprehensive textbook available on algorithms, but it can also be a bit heavy to read.
Introduction to Algorithms, by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
An easy-to-read and accessible book is the following one. It used to be freely available online, but longer is, unfortunately.
Algorithms, by S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani
There are also books specifically aimed at algorithms and data structures for competitive programming.
The oldest one, closely connected to the UVa archive of ACM ICPC problems is the following.
Programming Challenges: The Programming Contest Training Manual, by Steven Skiena and Miguel A. Revilla
A more recent book, aimed at both IOI and ICPC, is by Steven Halim.
Competitive Programming, by Steven Halim
A new book by Antti Laaksonen is available online for free download.
Competitive Programmer's Handbook, by Antti Laaksonen
Here are some other recent books on the topic.
Start Competitive Programming!: Ace the USACO Bronze Competition, by Zach Baharev and Daniel Zingaro
Algorithmic Thinking: A Problem-Based Introduction, by Daniel Zingaro
©IARCS 2012–2020