Рассрочка
Развивайте алгоритмическое мышление, увеличивайте производительность программ

В программу курса «Алгоритмы и структуры данных» входят самые известные прикладные алгоритмы (например, жадные алгоритмы и бинарный поиск): их должны знать все претенденты на позиции middle и senior в крупных IT-компаниях. Также мы разберём способы решения задач по программированию олимпиадного уровня.
Вы изучите:
После обучения
Мы используем новейшие методики педагогического дизайна, чтобы студенты быстро и с интересом усваивали знания. Вы сохраните энтузиазм до конца курса
У нас нет предзаписанных уроков.
Занятия в OTUS – это онлайн-вебинары. Преподаватели-практики помогут погрузиться в теорию, обучат на реальных примерах, расскажут о необходимых в работе инструментах. Вы всегда сможете задать вопрос и получить обратную связь.
И самое главное – сможете практиковаться!
Преподаватели показывают работу алгоритмов с помощью C#, Java и Python
Разработайте приложение для автопроверки и проверяйте задания
Узнайте на конкретных примерах, как реализуются и работают алгоритмы
Итоговая проектная работа усилит знания, а её успешная защита – откроет новые карьерные возможности
Общайтесь с преподавателями на вебинарах, в закрытом чате, при проверке домашних заданий
В первом модуле мы научимся решать комбинаторные задачи полным перебором с использованием вложенных циклов и рекурсии, сравним эффективности различных алгебраических алгоритмов, поработаем с битовой арифметикой на примере шахматной доски, а также напишем реализацию базовых структур данных, которые вы будете использовать при составлении программ в рамках этого курса.
Тема 1: Циклы и рекурсия / ДЗ
Тема 2: Как выполнять домашние задания / ДЗ
Тема 3: Алгебраические алгоритмы / ДЗ
Тема 4: Базовые структуры данных / ДЗ
Тема 5: Битовая арифметика / ДЗ
В этом модуле мы рассмотрим самые разные алгоритмы сортировки данных, начиная самыми медленными и заканчивая эффективными алгоритмами, которые работают за линейное время, также мы напишем алгоритм внешней сортировки, когда все данные не могут быть загружены в память программы. На последнем занятии мы рассмотрим алгоритм нахождения порядковых статистик за линейное время.
Тема 1: Простые сортировки / ДЗ
Тема 2: Пирамидальная сортировка / ДЗ
Тема 3: Быстрая и внешняя сортировка / ДЗ
Тема 4: Линейная сортировка / ДЗ
В этом модуле мы окажемся в заповеднике деревьев поиска, познакомимся с их разновидностями, особенностями, правилами добавления и удаления элементов, методами балансировки на больших и малых поворотах. Вы узнаете про АВЛ и красно-чёрные деревья, расширяющиеся и рандомизированные деревья, о сильноветвящихся В-деревьях и про дерево отрезков, которое помогает быстро и просто вычислять ассоциативную функцию на любом отрезке массива.
Тема 1: Двоичные деревья поиска / ДЗ
Тема 2: Сбалансированные двоичные деревья поиска / ДЗ
Тема 3: N-ричные B и В+ деревья поиска
Тема 4: Красно-чёрные деревья
В этом модуле мы познакомимся с хэшированием, научимся создавать хэш-функции, вычислять хэш-значения для разных ключей-объектов, добавлять и удалять элементы в хэш-таблицу, рассмотрим различные способы разрешения коллизий. Мы также узнаем, что такое универсальное хэширование и как сэкономить время и место, используя идеальное хэширование для статического набора ключей.
Тема 1: Хэш-функции и хэш-таблицы / ДЗ
Тема 2: Разрешение коллизий
Тема 3: Универсальное и идеальное хэширование
Тема 4: Префиксное дерево / ДЗ
Тема 5: Зачётный англо-русский словарь
В этом модуле мы повторим основные понятия и принципы теории графов, разберём алгоритмы поиска вширь и вглубь, топологической сортировки вершин и поиска минимального скелета, изучим несколько алгоритмов поиска кратчайшего пути и решения задачи коммивояжера. На отдельном занятии мы рассмотрим алгоритмы работы с виртуальной памятью.
Тема 1: Определения и представления / ДЗ
Тема 2: Поиск и сортировка / ДЗ
Тема 3: Минимальный скелет / ДЗ
Тема 4: Кратчайший путь / ДЗ
Тема 5: Задача коммивояжёра
Тема 6: Управление памятью
В этом модуле мы рассмотрим разные алгоритмы поиска шаблона в тексте, от самых примитивных до более сложных с построением бора для конечного недетерминированного автомата с возможностью поиска нескольких шаблонов за один подход. В конце модуля мы рассмотрим три алгоритма сжатия данных, а также введение в теорию криптоанализа на конкретных примерах де/шифрования, обмена ключами, подбора паролей.
Тема 1: Алгоритм Бойера-Мура / ДЗ
Тема 2: Алгоритм Ахо-Корасик
Тема 3: Алгоритм Кнута-Морриса-Пратта / ДЗ
Тема 4: Алгоритмы сжатия / ДЗ
Тема 5: Шифрование данных
В этом модуле мы рассмотрим различные способы кэширования в некоторых языках программирования, познакомимся с методом динамического программирования и решим несколько задач.
Тема 1: Алгоритмы кэширования
Тема 2: Динамическое программирование / ДЗ
В этом модуле мы решим несколько задач различной сложности на сайте leetcode.com. Задачи решаем разными способами, на нескольких языках программирования.
Тема 1: Сложная задача
Тема 2: Dancing Links
Рассматриваем и решаем задачи из области больших данных вероятностными методами с использованием различных структур данных.
Тема 1: Фильтр Блума
Тема 2: Алгоритмы MinHash, SimHash
Тема 3: Алгоритмы HyperLogLog, Count-Min Sketch / ДЗ
Заключительный месяц курса посвящен проектной работе. Свой проект — это то, что интересно писать слушателю. То, что можно создать на основе знаний, полученных на курсе. При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.
Тема 1: Выбор темы и организация проектной работы
Тема 2: Консультация по проектам и домашним заданиям
Тема 3: Защита проектных работ
Тема 4: Подведение итогов курса
В конце курса вы напишете своё приложение. Выберите одну из предложенных преподавателем тем, воплотите собственную идею или возьмите настоящий проект, которым занимаетесь на работе
Примеры тем:
Выпускной проект предстоит защитить перед руководителем и преподавателями курса.
Виктор Василенко Более 10 лет опыта в разработке программного обеспечения. Работал в Яндексе, X5 Group и Palta. В настоящее время — Tech Lead платформы Registratura.ru. Специализируюсь на проектировании backend-платформ, распределённых систем и высоконагруженных сервисов. Руководил кроссфункциональными командами до 15 человек, занимался развитием инженерных процессов, проектированием архитектуры и техническим лидерством. Более 6 лет занимаюсь преподаванием и менторством. За это время помог более чем 400 студентам освоить программирование, подготовиться к техническим собеседованиям и сделать следующий шаг в карьере. Для меня преподавание — это возможность передавать не только знания, но и инженерный образ мышления. Курс по алгоритмам и структурам данных я считаю одним из базовых навыков высококвалифицированного программиста. Независимо от специализации, именно алгоритмическое мышление помогает понимать ограничения систем и находить эффективные решения. Мне до сих пор интересно разбирать сложные задачи, исследовать разные подходы и находить алгоритмы, которые позволяют решать их красиво и эффективно. Отдельно нравится показывать, что алгоритмы — это не абстрактная теория, а инструменты, которые ежедневно используются в поисковых системах, базах данных, распределённых системах и других продуктах, которыми пользуются миллионы людей.
Лаборатория Касперского
Разработчик
Работаю в Лаборатории Касперского, окончил курс по С++ в Otus и осваиваю область Data Science. Сейчас являюсь наставником на курсе С++. Специально для проекта OTUS создал программу «Алгоритмы для разработчиков». Программирую на С++ и Python в течение 18 лет, как хобби — играю на фортепиано. Этот курс для тех, кто не проходил или пропустил алгоритмы в своем ВУЗе, а также для всех программистов, интересующихся данной темой: от любителей до профессионалов. Вы узнаете о популярных алгоритмах и структурах данных, научитесь их реализовывать и применять, сможете претендовать на вакансии в лучшие компании России и всего мира: Яндекс, Google, Facebook! Присоединяйтесь, будет круто!
Эксперты-практики делятся опытом, разбирают кейсы студентов и дают развернутый фидбэк на домашние задания
OTUS осуществляет лицензированную образовательную деятельность. В конце обучения вы получите сертификат OTUS о прохождении курса, а при выполнении проектной работы – удостоверение о повышении квалификации