Competitive programming is a mind sport usually held over the Internet or a local network, involving participants trying to program according to provided specifications. Contestants are referred to as sport programmers. Competitive Programming mainly focuses on our ability to find efficient solutions to well-defined problems.
Usually, a question arises - Why Competitive Programming?
Many of the top tech companies like Google, Facebook hire people through a test which includes competitive programming. Also, participation in the ACM International Collegiate Programming Contest (ACM-ICPC) is a great opportunity to be seen by Apple, Facebook, Google, IBM and many other authorities in the IT sphere. These major companies are constantly keeping track of the participants to find talented employees.
Having experience in competitive programming shows employers you can work in a team, solve complicated problems, work in stressful situations, manage time and deadlines and minimize errors. It also shows you are a disciplined, focused and fast, which are all indispensable skills.
It is also useful in College Intern/Placement test, which includes a few questions on Basic Data Structures and Algorithms
If you are interested in Competitive Programming and confused about how to start and how to proceed, you can have a look here.
Prerequisites
- Be very comfortable with any one of the programming languages (preferably C, CPP, Java or Python). However CPP is more preferred for competitive programming due to its faster execution time and many inbuilt data structures.
- Understand the concept of Algorithmic Complexity and study Bit Manipulation Techniques.
How to begin??
Register on some programming websites like HackerEarth, HackerRank, Codeforces, SPOJ, TopCoder etc.., start with basic programming questions to get a hang of competitive programming environment and then proceed to various data structures and algorithms.
Competitive programming is basically divided into three main categories:
- Data Structures
- Algorithms
- Mathematics
Basic Data Structures:
1. Arrays
|
6. Hash tables
|
2. Stacks
|
7. Heaps
|
3. Queue
|
8. Priority Queue
|
4. Linked Lists
|
9. Graphs
|
5. Trees
|
10. Disjoint Data Structure
|
Resources:
- GeeksforGeeks-DS - Basic Data Structures Implementation
- HackerEarth-Tutorials
- STL - C++ Standard Template Library
Basic Algorithms:
1. Searching
|
5. Divide and Conquer
|
2. Sorting Algorithms
|
6. Backtracking
|
3. Greedy Algorithms
|
7. Dynamic Programming
|
4.Graph Algorithms (DFS,BFS,Dijkstra)
|
Resources:
- GeeksforGeeks-Algo - Basic Algorithms Implementation
- HackerEarth-Tutorials
Basic Mathematics:
1. Modular Arithmetic
|
5. Sieve of Eratosthenes
|
2. Modular Exponentiation
|
6. Extended Euclidean Algorithm
|
3. Modular Multiplicative Inverse
|
7. Prime factorisation in O(sqrt(N))
|
4. GCD/LCM in O(LogN)
|
8.Bases
|
Resources:
- TopCoder-Mathematics - Basic Math for CP
- GeeksforGeeks-NumberTheory
- Primes and Euler function - Topcoder
- Basics of Combinatorics-Topcoder
Practice Websites
- SPOJ - It contains standard questions for all topics
- A2OJ - Choose a ladder and practice
- Codeforces
- Topcoder
- HackerRank
- Codechef
- HackerEarth
Apart from these, Codeforces conducts frequent contests, HackerEarth conducts 3 monthly contests namely Easy, HourStorm and Circuits and Codechef also conducts 3 monthly challenges namely Long, Cook-Off and Lunchtime. Try competing in those contests and upsolve the unsolved problems at the end of contest.
The resources listed below contains books, courses, blogs for all the advanced algorithms, data structures and math concepts.
Some Common Advanced Data Structure and Algorithms include
|
Comments
Post a Comment