Today, Competitive Programming is more popular than ever. The Internet has played an important role in this progress. There is now an active online community of competitive programmers and there are many competitions that take place every week. At the same time, the difficulty of competitions increases. Techniques that only the best participants mastered a few years ago are now standard tools known to many people.
What is Competitive Programming?
While a computer scientist writes evidence to show that his algorithm works, a competitive programmer implements his algorithm and subjects it to a competitive system. Then the algorithm is tested using a set of test cases, and if it passes all, it is accepted.
The main advantage of Competitive Programming is that competition issues require deep thinking. In particular, there are no spoilers in the problem statements. This is actually a serious problem in many algorithmic courses.
Competitive programming combines two themes: algorithm design and implementation of algorithms.
Design of Algorithms
The heart of Competitive Programming is to invent effective algorithms that solve well-defined computational problems. Algorithm design requires problem-solving and math skills. Often a solution to a problem is a combination of well-known methods and new knowledge.
Mathematics plays an important role in Competitive Programming. In fact, there are no clear boundaries between algorithm design and mathematics.
Implementation of Algorithms
In competitive programming, solutions to problems are evaluated by testing an algorithm implemented using a set of test cases. So, after finding an algorithm that solves the problem, the next step is to implement it correctly, which requires good programming skills. Competitive Coding differs greatly from traditional software engineering: programs are short, they need to be written quickly, and it is not necessary to maintain them after the competition.
My Views on Competitive Programming
Learning competitive programming requires a great deal of work. When solving problems, it should be borne in mind that the number of problems solved is not so important as the quality of the problems. It’s tempting to pick out problems that seem easy and enjoyable, solve them, and skip issues that seem difficult and time-consuming. However, to really improve your skills, you have to focus on the latter type of problems.
Another important observation is that most programming contest problems can be solved using simple and short algorithms, but the most difficult is to invent the algorithm. Competitive programming is not about learning complex and obscure algorithms by heart, but rather about learning how to solve problems and tackle difficult problems with simple tools.
Finally, some people think that it’s fun to design algorithms but boring to implement them. However, the ability to quickly and correctly implement algorithms is an important asset, and this skill can be put into practice. It’s a bad idea to spend most of the contest time writing code and finding bugs, instead of thinking about how to fix the problems.
I hope you liked this article on What is Competitive Programming. Feel free to ask your valuable questions in the comments section below. You can also follow me on Medium to learn every topic of Machine Learning.