16 онлайн-занятий
[по понедельникам и средам]
Комплексный онлайн-курс о том, как находить нестандартные решения в сложных рабочих задачах и оптимизировать строки программного кода, опираясь на знания по алгоритмике.
Вы ознакомитесь с классическими методами решения задач программирования с помощью алгоритмов. Научитесь не просто писать костыли, а разбираться в архитектурных подходах, придерживаться стиля, писать чистый читаемый код и минимизировать системные баги. В результате ― получите необходимую базу для карьерного роста.
Вы закроете пробелы в знаниях и будете более эффективно закрывать текущие задачи. Получите практический опыт решения задач по алгоритмике, будете адаптировать существующие классические методы под свои задачи, изобретать на их основе собственные решения и внедрять фичи, которые улучшат продукт.
Вы изучите структуру данных и сможете писать более совершенные алгоритмы для машинного обучения: например, для обучения с учителем примените структуру типа «дерево» или «граф», для обучения без учителя ― алгоритмы сортировки. По итогам курса – получите нужную базу для карьерного роста.
Быстро найти необходимую информацию, сжать данные без потерь или спроектировать систему, способную масштабироваться, разработчику помогают алгоритмы, то есть уже готовые последовательности операций. Разобраться в видах алгоритмов и структур данных вам поможет этот курс.
Сначала мы на реальных примерах ознакомимся с типами задач, которые можно решить с помощью алгоритмов. Затем научится работать с разными структурами данных и применять классические алгоритмы: от пузырьковой сортировки до динамического программирования. Будем адаптировать существующие алгоритмы и находить наиболее эффективные решения под потребности бизнеса.
Вначале лектор поделится личным опытом применения алгоритмов, ознакомит с классическими методами решения задач и научит структурировать данные для максимально эффективного использования. А затем поможет освоить динамическое программирование.
Вы научитесь решать рабочие задачи по классическим методам, освоите алгоритмы сортировки, бинарные и сбалансированные деревья, графы, хеш-функции и хеш-таблицы, одномерные и двумерные задачи динамического программирования.
На занятиях лектор будет разбирать решения задач на одном из языков программирования [Python, Java, JavaScript], решения для других языков будут в дополнительных материалах. Вы сможете выбирать любой язык и выполнять домашние задания в Replit.
Вы закроете пробелы в знаниях и подготовитесь к problem solving interview в крупной IT-компании. Для 3 лучших студентов лектор проведет тестовое техническое интервью или личную консультацию, если вопрос трудоустройства неактуален.

Разберитесь в том, что такое алгоритмы и структуры данных. Узнайте, в каких сферах используют алгоритмы и какие задачи они решают. На реальных примерах из жизни и технических примерах из практики лектора научитесь определять сложность алгоритмов.
Научитесь обрабатывать массивы и выполнять простые операции над ними [доступ, поиск, вставка, удаление]. Разберите несколько разных задач по работе с массивами. Научитесь определять временную сложность и сложность по памяти массивов.
Научитесь проводить разные операции над связными списками, стеками, очередями. Разберите и решите типичные задачи на связные списки, например, попробуйте удалить из него дубликаты. Научитесь преобразовывать стеки в очереди и наоборот.
Узнайте, когда и зачем применять рекурсию. Разберите типичные рекурсивные задачи и научитесь реализовывать алгоритмы с применением рекурсии. Рассчитайте n-й элемент для последовательности Фибоначчи с помощью рекурсии.
Разберитесь в видах алгоритмов по поиску и сортировке. Узнайте, что такое бинарный поиск и научитесь реализовывать задачи по применению бинарного алгоритма. Определите отличие временной сложности от сложности по памяти.
Ознакомьтесь с пузырьковой сортировкой, сортировкой вставками и сортировкой выбором. Примените эти алгоритмы на практике и решите по ним задачи. Научитесь сортировать массивы данных.
Реализуйте сортировку слиянием и быструю сортировку. Научитесь выбирать вид алгоритма под конкретную задачу и находить наиболее оптимальный способ решения.
Узнайте, как структура данных «дерево» помогает хранить иерархическую информацию. Разберитесь в видах древовидных структур данных. Научитесь находить общего предка, определять диаметр дерева и связи между узлами. Узнайте, какие подходы можно применить для решения типичных задач по бинарным деревьям поиска.
Детально изучите структуру AVL-дерева, красно-черных деревьев и другие виды сбалансированных деревьев. Ознакомьтесь с продвинутыми вариантами древовидных структур [дерево Фенвика, дерево отрезков]. Научитесь решать классические задачи с использованием сбалансированных деревьев.
Узнайте, какие бывают графы. Научитесь реализовывать матрицу смежности и основные алгоритмы обхода. Найдите минимальное остовное дерево в неориентированном нагруженном графе. Научитесь реализовывать алгоритмы нахождения кратчайшего пути и алгоритмы обхода [в ширину, в глубину].
Реализуйте задачи по изученным методам на графы, например, определите количество одноцикловых компонентов на графике или найдите узел с минимальной абсолютной разницей с заданным значением.
Узнайте, для каких задач применяют хеш-функции, и разберите реальные кейсы. Изучите структуру данных хеш-таблицы. Научитесь реализовывать схему для нахождения коллизий и предотвращения коллизий в хеш-таблицах и структурах данных. Проверьте, является ли один массив частью другого, и найдите первое повторение элемента массива.
Разберитесь в понятиях: динамический массив, двоичная куча и пирамидальная сортировка. Разберите на примерах одномерные и двумерные задачи динамического программирования. Научитесь определять простые задачи на динамику и находить решение к ним.
Научитесь решать задачи методом динамического программирования по подотрезкам и динамического программирования по подмножествам. Разберитесь в алгоритмах кеширования. Научитесь оптимизировать временную и вычислительную сложность [time and space complexity].
Узнайте, для чего применяют жадные алгоритмы. Научитесь оптимизировать алгоритмы по графам. Подберите лучший алгоритм для предложенной задачи, самостоятельно решите задачу, затем аргументируйте свой выбор и решение перед лектором.
Получите список типичных задач для технического интервью. Выберите наиболее подходящий алгоритм для решения каждой задачи. Реализуйте решения во время занятия с ограниченными временными рамками. Научитесь быстро принимать решения по оптимизации программного кода и аргументировать эти решения.