Competitive programming has algorithms and data structure in its core. A book on competitive programming should explain algorithms and techniques to attempt problems and this should be explained through descriptive examples.
C++ Programming Language
First Book to study is “C++ Programming Language” by Bjarne Stroustrup. This book provides programming and design techniques useful for developing object oriented programs. This book projects techniques making C++ effective and raises fundamental concepts required to build complex programs. Examples of this book fall in the domain of system software and enable programmers to simulate real-world concepts. This book has a detailed implementation of standard library and C++ language features.
Data Structure Algorithms and Applications in C++
Second Book to study for competitive programming is “Data Structure Algorithms and Applications in C++” by Sartaj Sahni. Data structure and algorithms build the core functionality of computer science. Understanding of data structure and algorithms enable programmers to utilize computer resources efficiently and effectively. This book has three sections – the first section deals with C++ programming concepts and its analytics. Second section provides detailed study of data structures. This section works on C++ classes to implement linear list data structure and its implementation. Third section of this book deals with the implementation of algorithm-design. Algorithm design section has detailed study of Greedy method, Divide and Conquer method, Dynamic Programming, Backtracking and Branch and Bound. The Book also discusses real-world applications in lieu of data structure and algorithm-design.
Graph Theory with Application to Engineering and Computer Science
Third Book to study is “Graph Theory with Application to Engineering and Computer Science” by Narsigh Deo. First section of this book is an introduction to graph theory. This section has examples that deal with puzzles and games. Second section works on nontrivial, real-world, and complex problems. This book explains graphs in switching and coding theory, electrical network analysis and graph theory in operation research. Graphs can be applied to discrete objects and relationships among them makes this book a useful resource for Competitive Programming.
Software Engineering: A Practitioner’s Approach
Fourth Book to study is “Software Engineering: A Practitioner’s Approach” by Roger S. Pressman, Ph.D. This book has five sections. Section four of this book is critical to competitive programming as it deals with the Object Oriented Concepts. This section has the study of Object-Oriented Concepts and Principles, Object-Oriented Analysis, Object-Oriented Design and finally Technical Metrics for Object-Oriented Systems. This section develops understanding of classes, their relationships and their behaviors. It also gives technical metrics to evaluate object-oriented concepts being implemented. After study of this section students will be able to analyze, design, implement, and test object-oriented concepts in amore efficient and effective manner.
Introduction to Algorithms
Fifth Book is “Introduction to Algorithms” by Cormen. It is one of the best books on Competitive Programming. The book contains algorithms and data structures with mathematical proofs used in competitive programming. The author of this book has given explanation on correctness and run time complexity of the algorithm. Thus, this book develops a better understanding of the algorithm and data structure.
Competitive Programming 4: The Lower Bound of Programming Contests in the 2002s
Sixth Book to study is “Competitive Programming 4: The Lower Bound of Programming Contests in the 2002s” . This book develops competitive programming skills. It has online judge problems and uses VisuAlgo to explain data structure and algorithms. This book prepares students for competitive programming and for job interviews as well. This book has a chapter on Problem Solving Paradigms having explanations on Greedy problems. It also has a chapter on Mathematics that deals with Combinatorics, Floyd’s cycle-finding algorithm etc. Topics such as Square Root Decomposition, Heavy-light Decomposition, Egg Dropping Puzzle, Linear Programming and Gradient Descent are also covered in this book.