На курсе начинают с асимптотической сложности алгоритмов. Здесь объясняют, почему обычное время выполнения - плохой критерий для оценки алгоритмов. Студенты учатся анализировать эффективность различных подходов. Затем переходят к основным структурам данных: массивам, спискам, стекам, очередям, хеш-таблицам и деревьям. Каждую структуру рассматривают с точки зрения практического применения.
Детально изучают алгоритмы сортировки. Особое внимание уделяют быстрой сортировке - от выбора опорного элемента до различных схем разбиения. Разбирают heap-sort и сортировку подсчетом. Далее переходят к основам теории чисел: делители, простые числа, факторизация. Практикуют алгоритм Евклида и решето Эратосфена для работы с простыми числами.
Курс охватывает две части работы с графами. Сначала студенты знакомятся со структурой данных графа и сферами применения. Учатся реализовывать поиск в глубину и ширину, находить компоненты связности. Во второй части переходят к более сложным алгоритмам: Дейкстры для поиска кратчайших путей и Прима для построения минимального остова. Также рассматривают нахождение мостов и точек сочленения.
Геометрический блок посвящен решению практических задач: нахождению площади многоугольников и построению выпуклых оболочек по алгоритму Грэхема. В модуле по поиску в тексте изучают полиномиальное хеширование строк. Детально разбирают алгоритмы Рабина-Карпа и Кнута-Морриса-Пратта для эффективного поиска подстрок.
В заключительной части курса рассматривают принципы балансировки AVL-деревьев. Студенты решают несколько популярных задач для закрепления материала. Знания проверяют через викторину, что помогает оценить усвоение пройденных тем.