You are hereTraining
- Cormen’s book “Introduction to Algorithms” is probably the most famous. It covers a huge list of topics. The only issue with this book is that the authors use pseudo code instead of an existing language and the readers have to “translate” the code themselves. http://mitpress.mit.edu/books/introduction-algorithms
- For Java programmers the best option is Sedgewick’s “Algorithms”. It covers a wide range of basic algorithms in pure Java. http://algs4.cs.princeton.edu/home/
- From the C++ perspective Skiena’s “The Algorithm Design Manual” is probably the most complete. http://www.algorist.com/
- Any other algorithms/data structures book may be enough to learn the basics. The three book above are just the most famous.
Steven Halim's book Competitive Programming is the thee book for aspiring IOI contestants. Readers must have some background knowledge in basic data structures, algorithms, and programming languages and it uses both C++ and Java code to illustrate the algorithmic concepts. The first edition is now free as a PDF but we would recommend purchasing the latest 3rd Edition:
- First Edition - CP1 (PDF): http://www.comp.nus.edu.sg/~stevenha/myteaching/competitive_programming/cp1.pdf
- Book Site: http://cpbook.net/
Also check out Steven's Visualgo site http://visualgo.net/ which visualising data structures and algorithms through animation. A brilliant site, which can help you understand how various data structures are built and the algoritm sequence to search them. We would encourage you to use the Training element to each section to test your knowledge of the subject.
- Algorithms by Sedgewick. In this course he follows very closely the content of his book although the book is not needed here. Sadly, this course only provides the lectures when the class is running but sessions start every few months
- Algorithms: Design and Analysis by Roughgarden. In the two parts of the course he covers a lot of important algorithms without being tied to any programming language.
- Other Algorithm Courses on Coursera:
- Udacity’s Intro to Algorithms Course
USACO Training Pages http://ace.delos.com/usacogate provides a set of problems in increasing difficulty with solution / topic explainations for each section you complete.
Codeforces is a great web for training too but sorting by number of people that solved each problem as suggested for juniors may be boring and time-consuming. For seniors I recommend going to the Contests section http://codeforces.com/contests. Pick a random (division 2) contest there and try to solve all the problems looking at the solutions if needed.
You can also sort problems on Codeforces by the problem type:
Other online Judges:
Project Euler https://projecteuler.net/
UVa Online Judge https://uva.onlinejudge.org/
Practice, Practice, Practice - Regular Online Competitions
Of course, besides learning the theory, the competitor should practice as much as possible solving problems.
Participating in online contests is a good way to measure our progress. USACO http://www.usaco.org/ organizes a contest almost every month. Codeforces http://codeforces.com/ rounds are held once or twice per week. USACO has 3 divisions (bronze, silver and gold) while Codeforces has 2 (div 2 and div 1). Doing well in one contest will usually move the student to the next division for the next contest. TopCoder has 2 competitions per month: https://www.topcoder.com/
COCI is the Croatian Open Competition in Informatics. They hold 3 hour online competitons periodically from October to the following April to selection their team for the IOI. The competitions are held in the afternoon on a Saturday and are open to any secondary level student to participate. Each competition has 6 tasks of varying difficulty and are fantastic practice for the AIPO Finals. They also have archive of almost 10 year's worth of COCI competitons with problems, test data and solutions available. http://hsin.hr/coci/
Google Code Jam https://code.google.com/codejam
Google Call to Code https://www.calltocode.ie/
Facebook Hacker Cup https://www.facebook.com/hackercup/
Even more important than participating is the follow-up of the contest. A few days after the contest they usually publish explanations on how to solve the problems. It is highly recommended to read all the solutions to learn new ideas or algorithms and to try to solve the problems that you couldn’t solve during the contest.