Laaksonen A. Guide to Competitive Programming...3ed 2024
- Type:
- Other > E-books
- Files:
- 1
- Size:
- 26.83 MiB (28134414 Bytes)
- Uploaded:
- 2024-08-08 09:09 GMT
- By:
- andryold1
- Seeders:
- 52
- Leechers:
- 2
- Info Hash: 5D638E84F34ACBFD1608616597425F961C8D2B87
Textbook in PDF format This textbook features new material on advanced topics, such as calculating Fourier transforms, finding minimum cost flows in graphs, and using automata in string problems. Critically, the text accessibly describes and shows how competitive programming is a proven method of implementing and testing algorithms, as well as developing computational thinking and improving both programming and debugging skills. Competitive programming is still a popular and effective way to learn programming and problem solving. This third edition of the book has new chapters that discuss the use of Python in programming contests, how to prepare for the IOI contest, and the future of competitive programming. Competitive programming has its roots in the scientific study of algorithms. However, while a computer scientist writes a proof to show that their algorithm works, a competitive programmer implements their algorithm and submits it to a contest system. Then, the algorithm is tested using a set of test cases, and if it passes all of them, it is accepted. This is an essential element in competitive programming, because it provides a way to automatically get strong evidence that an algorithm works. In fact, competitive programming has proved to be an excellent way to learn algorithms, because it encourages to design algorithms that really work, instead of sketching ideas that may work or not. Another benefit of competitive programming is that contest problems require thinking. In particular, there are no spoilers in problem statements. This is actually a severe problem in many algorithms courses. You are given a nice problem to solve, but then the last sentence says, for example: “Hint: modify Dijkstra’s algorithm to solve the problem.” After reading this, there is not much thinking needed, because you already know how to solve the problem. This never happens in competitive programming. Instead, you have a full set of tools available, and you have to figure out yourself which of them to use. Solving competitive programming problems also improves one’s programming and debugging skills. Typically, a solution is awarded points only if it correctly solves all test cases, so a successful competitive programmer has to be able to implement programs that do not have bugs. This is a valuable skill in software engineering, and it is not a coincidence that IT companies are interested in people who have a background in competitive programming. It takes a long time to become a good competitive programmer, but it is also an opportunity to learn a lot. You can be sure that you will get a good general understanding of algorithms if you spend time reading the book, solving problems, and taking part in contests. Topics and features: Introduces dynamic programming and other fundamental algorithm design techniques, and investigates a wide selection of graph algorithms Compatible with the IOI Syllabus, yet also covering more advanced topics, such as maximum flows, Nim theory, and suffix structures Provides advice for students aiming for the IOI contest Surveys specialized algorithms for trees, and discusses the mathematical topics that are relevant in competitive programming Examines the use of the Python language in competitive programming Discusses sorting algorithms and binary search, and examines a selection of data structures of the C++ standard library Explores how GenAI will impact on the future of the field Covers such advanced algorithm design topics as bit-parallelism and amortized analysis, and presents a focus on efficiently processing array range queries Describes a selection of more advanced topics, including square-root algorithms and dynamic programming optimization Fully updated, expanded and easy to follow, this core textbook/guide is an ideal reference for all students needing to learn algorithms and to practice for programming contests. Knowledge of programming basics is assumed, but previous background in algorithm design or programming contests is not necessary. With its breadth of topics, examples and references, the book is eminently suitable for both beginners and more experienced readers alike. 1 Introduction 2 Programming Techniques 3 Efficiency 4 Sorting and Searching 5 Data Structures 6 Dynamic Programming 7 Graph Algorithms 8 Algorithm Design Topics 9 Range Queries 10 Tree Algorithms 11 Mathematics 12 Advanced Graph Algorithms 13 Geometry 14 String Algorithms 15 Additional Topics 16 Python in Competitive Programming 17 Preparing for IOI 18 Future of Competitive Programming Appendix: Mathematical Background