Алгоритмы и структуры данных

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

31 января 2024

5 месяцев

Онлайн

Пн/Ср 20:00 Мск

Для кого этот курс?

Для бэкенд-разработчиков и системных программистов, которые пишут софт и приложения, в т.ч. мобильные. В первую очередь курс призван помочь Junior-специалистам усилить свои фундаментальные навыки программирования.

Необходимые знания

  • Опыт программирования на любом языке программирования (начальный или средний уровень)
  • Знание элементарной математики в объёме средней школы
  • Минимальное знание алгоритмов и структур данных и желание развиваться в области их изучения

Что вам даст этот курс?

Вы расширите кругозор и получите опыт реализации классических алгоритмов, который поможет вам при создании собственных алгоритмов для решения бизнес-задач. Именно понимание принципов работы алгоритмов и структур данных позволяет повысить производительность программ и улучшить качество кода.

В программу входят самые известные прикладные алгоритмы, знание которых, как правило, требуется от претендентов на Middle и Senior-должности в крупных IT-компаниях. А также разбираются способы решения задач олимпиадного уровня.

Интерактивные вебинары

Каждое занятие — это заряд алгоритмической энергии, который поможет вам в интенсивном обучении и выполнении самостоятельной работы, а разнообразие тем позволит сохранить запал до конца курса.

Процесс обучения

Обучение проходит онлайн: вебинары, общение с преподавателями и вашей группой в телеграме курса, сдача домашних работ и получение обратной связи от преподавателя. Вебинары проводятся 2 раза в неделю по 2 академ. часа и сохраняются в записи в личном кабинете. Вы можете посмотреть их в любое удобное для вас время. В ходе обучения вы будете выполнять домашние задания. Каждое из них посвящено одному из компонентов вашего выпускного проекта. После выполнения всех домашних заданий вы получите готовый выпускной проект.

Можно проходить курс на любом языке программирования

 

На вебинарах преподаватели интерактивно рисуют и демонстрируют, как работает каждый алгоритм, некоторые из них пишем с нуля прямо на уроке, используя C#, Java или Python.

Свое приложение для автопроверки

 

Вы напишете свою простую систему тестирования, с помощью которой сможете проверять часть заданий по заготовленным преподавателями тестам.

Глубокое погружение в самые актуальные темы

 

Из тысячи алгоритмов мы отобрали самые интересные, популярные, важные. Каждый алгоритм вы изучите «на пальцах», на конкретных примерах, исследуете способы его реализации.

Трудоустройство

Многие студенты еще во время прохождения первой части программы находят или меняют работу, а к концу обучения могут претендовать на повышение в должности. Мы оказываем помощь в вопросах карьеры на протяжении всего обучения и спустя полгода после его завершения.

  • Получите помощь с оформлением резюме, портфолио и сопроводительного письма
  • Разместите свое резюме в базе OTUS и сможете получать приглашения на собеседования от партнеров

Работодатели курса

Формат обучения

Интерактивные вебинары


2 занятия по 2 ак.ч. в неделю. Доступ к записям и материалам остается у вас навсегда

Практика


Домашние задания + проектная работа, которая усилит ваше портфолио

Активное комьюнити


Общайтесь с преподавателями голосом на вебинарах и в Telegram-чате

Программа

Простые алгоритмы и базовые структуры данных

В первом модуле мы научимся решать комбинаторные задачи полным перебором с использованием вложенных циклов и рекурсии, сравним эффективности различных алгебраических алгоритмов, поработаем с битовой арифметикой на примере шахматной доски, а также напишем реализацию базовых структур данных, которые вы будете использовать при составлении программ в рамках этого курса.

Тема 1: Циклы и рекурсия

Тема 2: Как выполнять домашние задания

Тема 3: Алгебраические алгоритмы

Тема 4: Базовые структуры данных

Тема 5: Битовая арифметика

Алгоритмы сортировки

В этом модуле мы рассмотрим самые разные алгоритмы сортировки данных, начиная самыми медленными и заканчивая эффективными алгоритмами, которые работают за линейное время, также мы напишем алгоритм внешней сортировки, когда все данные не могут быть загружены в память программы. На последнем занятии мы рассмотрим алгоритм нахождения порядковых статистик за линейное время.

Тема 1: Простые сортировки

Тема 2: Пирамидальная сортировка

Тема 3: Быстрая и внешняя сортировка

Тема 4: Линейная сортировка

Деревья поиска

В этом модуле мы окажемся в заповеднике деревьев поиска, познакомимся с их разновидностями, особенностями, правилами добавления и удаления элементов, методами балансировки на больших и малых поворотах. Вы узнаете про АВЛ и красно-чёрные деревья, расширяющиеся и рандомизированные деревья, о сильноветвящихся В-деревьях и про дерево отрезков, которое помогает быстро и просто вычислять ассоциативную функцию на любом отрезке массива.

Тема 1: Двоичные деревья поиска АВЛ

Тема 2: Красно-чёрные деревья

Тема 3: Другие варианты деревьев поиска

Хеш-таблицы

В этом модуле мы познакомимся с хэшированием, научимся создавать хэш-функции, вычислять хэш-значения для разных ключей-объектов, добавлять и удалять элементы в хэш-таблицу, рассмотрим различные способы разрешения коллизий. Мы также узнаем, что такое универсальное хэширование и как сэкономить время и место, используя идеальное хэширование для статического набора ключей.

Тема 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: Подведение итогов курса

Также вы можете получить полную программу, чтобы убедиться, что обучение вам подходит

Проектные работы


К концу курса вы напишете свое приложение и сможете представлять его на собеседовании. Финальный проект предстоит защитить перед преподавателями и командой.

Вы можете выбрать одну из предложенных преподавателем тем или реализовать свою идею. Многие студенты придумывают и реализуют интересные проекты:

  • Распознавание рукописных цифр
  • Генерация прохождения лабиринтов
  • Решение заданий судоку

Преподаватели

Руководитель курса

Евгений Волосатов

Михаил Горшков

разработчик

Лаборатория Касперского

Олег Сафонов

Эксперты-практики делятся опытом, разбирают кейсы студентов и дают развернутый фидбэк на домашние задания

Ближайшие мероприятия

Открытый вебинар — это настоящее занятие в режиме онлайн с преподавателем курса, которое позволяет посмотреть, как проходит процесс обучения. В ходе занятия слушатели имеют возможность задать вопросы и получить знания по реальным практическим кейсам.

Теория графов
Евгений Волосатов
На этом открытом уроке мы познакомимся с основными терминами теории графов:
вершина, ребро, граф; петля, псевдограф; кратные рёбра, мультиграф; смежность, инцидентность; степень вершины, изолированная вершина; путь, цикл, цикл Эйлера и Гамильтона; дерево, лес, мост; полный граф, подграф, взвешенный граф; дуга, ориентированный граф, компоненты сильной/слабой связности. А также сделаем обзор первой половины программы курса «Алгоритмы и структуры данных».
...
26 декабря в 17:00
Открытый вебинар
Алгоритм Дейкстры
Евгений Волосатов
На этом открытом уроке мы рассмотрим самый оптимальный алгоритм поиска кратчайшего пути во взвешенном графе - алгоритм Дейкстра. Сначала покажем, как он работает «на пальцах», затем запрограммируем и продемонстрируем его работу на языке программирования. А также сделаем обзор второй половины программы курса «Алгоритмы и структуры данных»....
17 января в 17:00
Открытый вебинар

Прошедшие
мероприятия

Евгений Волосатов
Открытый вебинар
Создание ассоциативного массива различными способами
Евгений Волосатов
Открытый вебинар
Сравнение алгоритмов сортировок. Визуализация и анализ.
Для доступа ко всем прошедшим мероприятиям необходимо пройти входное тестирование
Возможность пройти вступительное тестирование повторно появится только через 3 дня
Результаты тестирования будут отправлены вам на email, указанный при регистрации.
Тест рассчитан на 30 минут, после начала тестирования отложить тестирование не получится!

Корпоративное обучение для ваших сотрудников

Отус помогает развивать высокотехнологичные Команды. Почему нам удаётся это делать успешно:
  • Курсы OTUS верифицированы крупными игроками ИТ-рынка и предлагают инструменты и практики, актуальные на данный момент
  • Студенты работают в группах, могут получить консультации не только преподавателей, но и профессионального сообщества
  • OTUS проверяет знания студентов перед стартом обучения и после его завершения
  • Простой и удобный личный кабинет компании, в котором можно видеть статистику по обучению сотрудников
  • Сертификат нашего выпускника за 5 лет стал гарантом качества знаний в обществе
  • OTUS создал в IT более 120 курсов по 7 направлениям, линейка которых расширяется по 40-50 курсов в год

Отзывы

Александр Зимин

29.12.2019
Хороший курс. Восстановил всё давно забытое с университета и узнал много нового. Брал его чтобы подготовится к собеседованиям, т.к. планировал менять работу, и полученные на нём знания не раз меня выручили. Например, теперь ничего не стоит рассказать, как работает очередь с приоритетами построенная на куче. До курса я бы, скорее всего, завалил этот вопрос) А ещё на курсе я был очень удивлён тем, насколько сильно отличается скорость работы сортировки Шелла от сортировки вставками. В общем, всячески рекомендую, познавательно и интересно.

Александр Рыбаков

24.01.2020
Очень полезный курс, рекомендую, уверен что поможет мне во многих моих проектах. Этот курс помог мне пересмотреть взгляд на многие на первый взгляд простые задачи, упростить и ускорить их выполнение. Спасибо, OTUS

Инна ХХХ

24.01.2020
Курс был полезен для приобретения новых навыков. Очень подробно рассмотрены темы сортировок, контейнеры, деревья и графы. Интересное и полезное занятие на тему memory allocation. Из всех преподавателей хочу выделить Евгения Волосатова - ему отдельное спасибо за очень хорошее взаимодействие с аудиторией.

Андрей Меньшенин

24.01.2020
Очень насыщенная программа. Много материалов. Интересные и довольно сложные домашние задания, надо которыми надо подумать, поразмышлять, и реализовать. Понравилось то, что все материалы представлены в личном кабинете, что можно зайти и повторить. Понравилось то, что можно было подключить микрофон, и голосом спросить вопросы у преподавателя на вебинаре или даже пройти алгоритм шаг за шагом вместе с преподавателем. Больше всего понравились преподаватели, которые старались как можно проще и понятнее объяснить тему вебинаров.

Роман Зотов

24.01.2020
Так как не имею профильного образования, чувствовалась нехватка фундаментальных знаний в области основ программирования. На данном курсе рассмотрены основные алгоритмы и структуры данных, которые должен знать каждый разработчик. Преподаватели отлично знают материал и чаще всего могут его преподнести так что даже не подготовленному человеку можно разобраться. По сложности - да было сложно, но оно того стоит. Спасибо за полученные знания.

Михаил Бедрицкий

30.04.2020
Очень толковый, достаточно сбалансированный курс. Получил удовольствие и пользу.

Арсений Черенков

30.04.2020
Курс очень хороший. Преподаватели Евгений Витольдович и Михаил (не знаю отчества) Горшков реально крутые в своем деле. Мне понравилось все. Все, кроме моей лени. У меня было много времени, но я еле смог досдать минимальные варианты ДЗ. Сейчас я чувствую, что я профессионально вырос и с удивлением обнаруживаю, что могу давать советы коллегам и даже консультировать по части алгоритмов. Спасибо, OTUS!

Андрей Филаткин

30.04.2020
Курс оказался очень полезен, чтобы систематизировать существующие разрозненные знания. А выполнение домашних заданий на практике помогло почувствовать разницу между близкими алгоритмами. Курс оказался хорошим мотиватором для всего этого, я даже прочитал таки Сэджвика, купленного лет 15 назад)

Дарья Шумихина

30.04.2020
Курс очень понравился. Особенно понравилась обратная связь, формат занятий, при котором можно, не стесняясь, тут же обсудить всё с преподавателем и другими ребятами, прям как настоящая команда:) Отдельно хотелось бы отметить крутого преподавателя - Волосатова Евгения Витольдовича, у него настоящий преподавательский дар, настолько интересно и легко он рассказывает и объясняет темы, а еще клёво рисует поясняющие картинки) Он по-настоящему заинтересовал нас и объединил. На другом моем курсе отуса все только пишут в чат, и то очень редко, хотя возможность говорить есть, но никто этого не делает, никто никого не знает, преподаватель никого не помнит, спросить что-то из-за этого становится неудобно, в плане стеснения, и прочее, короче, камандой это не назовешь, наверно, атмосфера какая-то другая. На данном курсе же наоборот, хочется именно онлайн присутствовать, а не смотреть в записи.

Иван Смирнов

07.05.2020
Интересный курс, хорошие преподаватели. Для себя нашел и что-то новое, и вспомнил что-то старое. Благодаря курсу смог более детально разобраться в некоторых вещах, которые ранее были непонятны.

Dmitry Moskalyov

29.10.2020
В целом понравилось. Из недостатков запомнилось только что некоторые презентации содержали ошибки, делающие представленные алгоритмы нерабочими, или приводились неверные расчёты. Но это возможно наследие предыдущих курсов, где-то поправили, где-то на заметили. Было-бы неплохо представить большее число примеров на реальном языке, питоне/c++/c#/java/etc, для упрощения поиска у себя ошибок и возможности сравнения с точно работающим кодом. Понравилась идея с тестовым окружением, когда есть набор исходных данных и набор данных которые нужно получить. Сильно упрощает тестирование. Как вариант такого подхода нам давался сайт на котором можно было положить свой код и сайт его прогонял через свои тесты. Там правда тоже не без проблем, но сама идея отличная. Больше пожалуй нечего сказать. Всегда можно было-бы дать больше направлений, но тогда это и заняло бы больше времени

Игорь Лопушко

29.10.2020
Однозначно курс понравился! Большое количество теории, детальный разбор алгоритмов и структур данных на лекциях, интерактивное общение во время занятий. Особенно хочется отметит отличную работу преподавателей, которые доступно все объясняют и отвечают на любой вопрос. Домашнее задание емкое и позволяет глубоко разобраться в конкретной теме. Дипломная работа позволяет детально погрузиться в выбранную тему, а при необходимости преподаватель скорректирует работу. Из того что можно улучшить, хотелось бы добавить немного больше примеров реализации того или иного алгоритма на любом языке программирования. Иногда этого не хватало, особенно для сложных алгоритмов. Но в целом курс дает возможность глубоко изучить или освежить знания по алгоритмам и структурам данных, а так же является хорошим подспорье для дальнейшего самостоятельного обучения и развития.

Сергей Голицын

05.11.2020
Что сказать о курсе? Это было круто. Это было сложно. Порой это было безумн тяжело, но приятно. Практически каждая тема разжовывалась, обьяснялась на псевдокоде и доносилась до нас так что все (надеюсь) сразу понимали. Отдельное спасибо за темы про графы и строки. Это было великолепно. Уверен что в будущем еще не раз пересмотрю эти лекции. Было много дз. Хотя не так ного как у прошлого курса, ноо это были реально обьемные задания. И я прекрасно понимаю тех кто не до конца выполнил их. Было приятно когда получал коментарии в гите по поводу того что можно улучшить и сделать лучше. Считаю что преподавателю нужно минимум 2 постоянных помошника для проверки домашних заданий, потому как порой приходилось ждать около месяца. Отдельное спасибо хочется сказать Евгению за его горящие глаза и энтузиазм с которым он все рассказывал. Это был не просто заученный текст, а чудестная импровизация по теме урока с примерами. Очень рекомендую данный курс для расширения кругозора и открытия новых профессиональных возможностей!

Николай Карастелев

09.02.2021
Понравилось интересная программа с разнообразием алгоритмов, включая как "академические", так и прикладные. Материал излагался доступно, плюс за хорошее качество видео/звука, пошаговое объяснение, проработка вопросов и наличие записей лекций, дополнительного материала и домашних заданий к пройденному материалу. Думаю, можно доработать систему ревью, добавить автоматизировать проверку домашних заданий или предложить набор тестовых данных, чтобы постараться сократить время на ожидание проверки (несколько моих ДЗ ожидали проверки более двух недель). Система оценок ДЗ вроде бы есть (байты за задание), но она мало мотивирует и её очень трудно использовать для отслеживания своих результатов и в целом не понятно для чего нужна. Тоже можно сказать и о ревью, оно скорей номинально, думаю при наличии автоматических тестов ревью можно было бы свести к минимуму, ограничившись консультациями в случае если решение зашло в тупик. Можно еще отметить комфортный график проведения лекций, наличие каникул и не сильно раздуют группу студентов на одного преподавателя. В целом остались положительные впечатления, понравилось качество материала, Евгению отдельное спасибо за старание и подачу материала.

Владимир Елхин

26.03.2021
Великолепный курс! Программист без этого курса не программист. Волосатов большой молодец

Алексей Шубников

29.04.2021
Курс полностью оправдал мои ожидания. По окончании я стал чувствовать себя уверенней в данной теме. Теперь у меня есть понимание как можно эффективно решать многие задачи с использованием определенных структур данных, применяя соответствующие алгоритмы. Отдельную благодарность хотел бы выразить преподавателям, в особенности Волосатову Евгению Витольдовичу. Его способность объяснять сложные вещи простыми словами, подкрепленная визуальной частью (на каждой лекции Евгений схематично изображал то, о чем рассказывал) очень сильно помогла усвоить материал. Без преувеличения скажу, что данный курс можно приравнять к полноценной дисциплине из университета. Всем рекмоендую!

Денис Терентьев

29.04.2021
Я QA automation engineer, в начале этого курса работал в компании НТЦ «Протей» . Мне хотелось развиваться, и я решил восполнить недостаток фундаментальных знаний алгоритмизации. Именно их тяжелее всего изучать самому, без опытного наставника. Повседневная практика также не позволяет овладеть ими. А именно знание фундаментальной теории, как мне кажется, отличает хорошего специалиста. Такие знания позволяют эффективнее подбирать инструменты и существующие алгоритмы для решения практических задач, улучшая качество конечного продукта. На курсе в процессе практических занятий с опытными преподавателями было разобрано огромное количество подходов и алгоритмов, так что все мои ожидания были оправданы. После прохождения курса навыки программирования значительно выросли, и изменился подход к решаемым проблемам. В процессе обучения я получил предложение от компании Arrival. Новое место работы открывало для меня большие перспективы, и я принял его. Сейчас могу сказать , что работаю в «компании своей мечты».

Алексей Дьяконов

27.07.2021
Очень качественный, структурированный курс. Отличная подача материала. Интересные, наглядные лекции и полезные домашние задания. Было сложно, но увлекательно!

Сертификат о прохождении курса

OTUS осуществляет лицензированную образовательную деятельность. В конце обучения вы получите сертификат OTUS о прохождении курса

После обучение вы:

  • приобретёте навыки работы с алгоритмами и структурами данных, которые необходимы при реализации сложных проектов в крупных компаниях
  • сможете писать рациональный и хорошо структурированный код
  • получите материалы по всем пройденным занятиям (видеозаписи вебинаров, выполненные домашние задания, выпускной проект)
  • получите сертификат об окончании курса

Частые вопросы

Что, если в середине курса я не смогу продолжать обучение?
У вас есть право одного бесплатного трансфера в другую группу.
Обязательно ли защищать выпускной проект?
Для получения сертификата OTUS сдавать проект необязательно (в сертификате будет отражено кол-во выполненныз домашних работ). Для получения Удостоверения о повышении квалификации необходимо выполнить итоговый проект. Кроме того, проект необязательно защищать перед аудиторией, а можно сдать в чате с преподавателем.
Я могу вернуть деньги?
Да, вы можете сделать возврат средств пропорционально оставшимся месяцам обучения.
Что, если в середине курса я не смогу продолжать обучение?
У вас есть право одного бесплатного трансфера в другую группу.
Обязательно ли защищать выпускной проект?
Для получения сертификата OTUS сдавать проект необязательно (в сертификате будет отражено кол-во выполненныз домашних работ). Для получения Удостоверения о повышении квалификации необходимо выполнить итоговый проект. Кроме того, проект необязательно защищать перед аудиторией, а можно сдать в чате с преподавателем.
Я могу вернуть деньги?
Да, вы можете сделать возврат средств пропорционально оставшимся месяцам обучения.
Что, если в середине курса я не смогу продолжать обучение?
У вас есть право одного бесплатного трансфера в другую группу.
Обязательно ли защищать выпускной проект?
Для получения сертификата OTUS сдавать проект необязательно (в сертификате будет отражено кол-во выполненныз домашних работ). Для получения Удостоверения о повышении квалификации необходимо выполнить итоговый проект. Кроме того, проект необязательно защищать перед аудиторией, а можно сдать в чате с преподавателем.
Я могу вернуть деньги?
Да, вы можете сделать возврат средств пропорционально оставшимся месяцам обучения.
Что, если в середине курса я не смогу продолжать обучение?
У вас есть право одного бесплатного трансфера в другую группу.
Обязательно ли защищать выпускной проект?
Для получения сертификата OTUS сдавать проект необязательно (в сертификате будет отражено кол-во выполненныз домашних работ). Для получения Удостоверения о повышении квалификации необходимо выполнить итоговый проект. Кроме того, проект необязательно защищать перед аудиторией, а можно сдать в чате с преподавателем.
Я могу вернуть деньги?
Да, вы можете сделать возврат средств пропорционально оставшимся месяцам обучения.
Что, если в середине курса я не смогу продолжать обучение?
У вас есть право одного бесплатного трансфера в другую группу.
Обязательно ли защищать выпускной проект?
Для получения сертификата OTUS сдавать проект необязательно (в сертификате будет отражено кол-во выполненныз домашних работ). Для получения Удостоверения о повышении квалификации необходимо выполнить итоговый проект. Кроме того, проект необязательно защищать перед аудиторией, а можно сдать в чате с преподавателем.
Я могу вернуть деньги?
Да, вы можете сделать возврат средств пропорционально оставшимся месяцам обучения.