
In November, we launch the online course
Algorithms: Theory and Practice. Methods ” from the
Computer Science Center . The course is free, everyone is welcome. The course will be discussed in detail the basic algorithmic methods: greedy algorithms, the "divide and conquer" method, dynamic programming. For all algorithms, the correctness and estimates for run time will be mathematically rigorously proved. We have tried to present the material in such a way that the algorithms themselves are understandable, and the way one could guess their basic ideas. In addition to the theoretical foundations, the subtleties of the implementation of algorithms in the programming languages C ++, Java and Python will be explained. In particular, it will be described what are the common practices of writing code, allowing to minimize the probability of error, how to write and test code, where it is worth using standard methods, rather than reinventing the wheel.
We carefully picked up the task to secure the material. Most of the algorithms that you learn, you will need to program. This is the best way to make sure you understand all the details. By solving such problems, you will gain valuable experience in writing and debugging efficient and reliable programs. Programming tasks will help you to feel the difference between a bad (slow) and a good (fast) algorithm. You are also waiting for the tests (where you need to choose the correct answers from the proposed ones) and theoretical problems (they need to prove a mathematical statement). Finally, there are also advanced tasks in the course — less standard tasks that are not required to complete the course. Those who are already familiar with the basic algorithms will also be able to enjoy solving these problems.
A few examples (parts) of lessons:
')
Sergey Lebedev (a researcher in the field of bioinformatics and machine learning at JetBrains; a Python course teacher at the Computer Science Center)
Implementation of the Euclidean algorithm to calculate the greatest common divisor in Python
Alexey Levin (Telegram developer; for several years he has conducted a code review of the decisions of Computer Science Algorithms Center students; a gold medal (2011) and a silver medal (2010) at the final of the ACM ICPC World Programming Championship)
The implementation of the algorithm for the continuous backpack problem in C ++
Pavel Mavrin (teacher of the course “Algorithms and Data Structures” at the ITMO University and Computer Science Center; teacher of the ITMO Olympiad Informatics Circle; world champion ACM ICPC 2004)
The implementation of the algorithm for calculating the number of inversions in the array in Java