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

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

24 апреля

5 месяцев

Онлайн

Пн/Ср 20:00 Мск

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

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

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

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

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

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

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

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

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

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

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

Обучение на любом ЯП

 

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

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

 

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

Глубокое погружение

 

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

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

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

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

Программист со знанием алгоритмов

Перспективы направления
Средний уровень зарплат в Москве:
120 000Junior+ специалист
215 000Middle+ специалист
310 000Senior специалист
450
актуальных вакансий

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

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

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


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

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

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


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

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

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

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

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

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

разработчик

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

Олег Сафонов

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

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

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

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

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

Отзывы

Сергей Юлин

28.07.2023
Евгению Витольдовичу огромный респект, видно, что человек горит свои делом и работает на износ, очень увлеченно рассказывает про алгоритмы и тем самым увлекает и слушателя, показывая, что это не так уж и страшно, а даже интересно. Теперь про сам курс. Возможность писать на каком угодно языке это конечно хорошо, но минус у этого огромный – отсутствие тестов (так как на всех языках тесты не напишешь). На курсе все тесты на все алгоритмы приходится писать самим, и конечно же с лёгкостью на неправильный алгоритм, будут написаны неправильные тесты (под этот алгоритм). В итоге нет никакого способа до конца проверить правильно вы всё реализовали или нет. Моё предложение: 1. Или ограничиться одним двумя языками и написать на них хороший корпус тестов на все домашние задания, которые будут запускаться на CI. 2. Или максимально подбирать домашние задания приближенные к задачам leetcode и тогда можно будет пользоваться их корпусом тестов и их CI. То есть слушаем теорию на лекциях и идем решать домашки на leetcode. Про сами темы. Полностью отсутствует тема «Списки», на мой взгляд это одна из базовых тем алгоритмов и с неё должно начинаться введение в динамические структуры данных, а вопрос «рассказать отличие массива от списка» это самый частый вопрос на любом собеседовании. Моё предложение: включить тему «Списки» с решением задач до темы «Деревья», иначе сейчас получаем переход от массивов сразу к деревьям. Ради темы «Списки» можно пожертвовать темой «Графы».

Александр Пушкарев

26.07.2023
Всем привет! Если в вкратце, то курс стоит того чтобы его пройти. Я записывался на этот курс, чтобы расширить свои компетенции в программировании через алгоритмы и структуры данных. Хоть я и впервые столкнулся с алгоритмами, но с моей точки зрения, курс был наполнен нужными разделами и темами. За что огромное спасибо создателю курса Горшкову Михаилу, у него просто огромный багаж знаний. Его методички были наполнены нужной и полезной информацией с примерами кода. Основная нагрузка по преподаванию была на Евгении Витольдовиче, человеке, который умеет донести алгоритмы до любого. Хоть я и писал на питоне, а примеры были на С# или Java, мне ни сколько не мешало понять суть темы (слышать русскую речь, видеть код на С# или Java, в голове его транслировать на питон и уже реализовывать на питоне). Этот "взрыв мозга" стоит того. Отличная идея с планшетом и онлайн-доской. Все пояснения понятны и разжеваны. Также огромное спасибо Олегу Сафонову. Из неожиданного - было много домашних заданий, но это огромный плюс. Практика для закрепления всегда только на пользу. Рассчитывайте эту нагрузку. Это было увлекательное путешествие на 5 месяцев плюс месяц на проектную работу. Спасибо ОТУСу и преподавателям за такую возможность!

Александр Пономаренко

26.04.2023
Я прошел курс в составе потока 10.2022. Курс интересный: рассматриваются алгоритмы сортировки, поиска, алгоритмы на графах, алгоритмы сжатия и шифрования, вероятностные алгоритмы и другие. В программе курса предлагаются красивые и эффективные подходы к решению задач: например, решение шахматных задач при помощи битовых операций на 64-битных числах! Подсвечиваются сильные и слабые места алгоритмов. Хочу отметить несколько удачных моментов: 1) структура многих вебинаров: сначала объяснение принципов работы алгоритма с рисованием на виртуальной доске, а затем – live coding - мастер-класс программирования, на котором преподаватель в реальном масштабе времени программирует реализацию алгоритма. Такое многогранное описание позволяет лучше понять работу алгоритма и получить ответы на возникающие вопросы уже в процессе вебинара. 2) Существует возможность выбора сложности домашнего задания. Это позволяет, если понадобится, «срезать углы», закрепляя только основные моменты, а если позволяет время – углубиться в решение предлагаемой задачи. 3) Преподаватели являются опытными разработчиками, хорошо разбираются в материале и отвечают почти на все вопросы. Познавательно наблюдать за их образом мышления и аргументацией. 4) Для выполнения домашних заданий можно использовать свой любимый язык программирования. 5) отдельно хочу отметить интересный стиль преподавания Евгения Волосатова: витиеватое приветствие в начале вебинара, музыкальные паузы в изложении сложного материала с игрой девушек из дуэта “Just play” на скрипке и пианино - чем-то похожи на фехтование: филигранно, жестко и красиво. 6) некоторые вебинары восхитили меня четким исполнением тайминга вебинара (ровно 90 минут) – чувствуется высокий класс преподавания. Из того, что можно было бы улучшить – домашние задания проверяются с задержкой. На мой взгляд, курс будет полезен для любого разработчика независимо от используемого языка программирования. Спасибо Михаилу Горшкову, Евгению Волосатову, Олегу Сафонову и OTUS за интересный курс!

Георгий Бабаев

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

Вадим Столяров

25.04.2023
По завершению курса ощущается некая радость от выполненной работы. Значит пришлось потрудиться и стать немного лучше себя самого. Но это было бы невозможно без качественной и творческой работы всех кто причастен к созданию и проведению курса. Хочется поблагодарить преподавательский состав и сокурсников без которых бы не было интересного общения на лекциях!

Игорь Лазарев

25.04.2023
Отличный курс. Дает хороший обзор алгоритмов и структур данных. Полезен как для начинающих, так и для опытных разработчиков. Домашние задания удобно разделены по категориям сложности. Можно выполнять как в базовой версии, так и на довольно высоком уровне сложности. Курс расширяет кругозор и добавляет новые возможности для использования в рабочей жизни программиста. Курс хорошо структурирован. Сложность материала органично нарастает по мере продвижения по материалам курса. Все начинается с базовых алгоритмов и структур, а заканчивается нетривиальными и интересными задачами. Хороший состав преподавателей. Преподаватели освещают материал интересно и увлекательно. Особую благодарность хочется выразить Волосатову Евгению Витольдовичу за очень интересную и местами эффектную подачу материала!

Павел Бабиков

25.04.2023
Отличный курс! Охвачено очень много тем. Считаю обязательным прохождение данного курса для всех разработчиков. Ну и отдельное спасибо, Евгению Волосатову. Лучший преподаватель из всех на чьих лекциях я побывал за все 4 пройденных на отусе курса. Разбиение лекций на небольшие фрагменты 20-45 минут - идеально!

Герман Угля

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

Роман Серов

25.04.2023
Евгений Волосатов отлично преподаёт! А знанаия из курса уже применялись в работе.

Игорь Кретов

28.02.2023
До поступления на курс "Алгоритмы и структуры данных" я работал в МегаФоне, где и сейчас продолжаю трудиться. Данный курс я выбрал, чтобы освоить и начать понимать структуры данных, подходы и методы решения сложных алгоритмических задач и применять полученные знания на практике. На этапе выбора курса, Otus привлёк именно тем, что лекции ведет преподаватель. Курс качественный, структурированный, каждая тема разжёвывалась, объяснялась на псевдокоде и доносилась до нас таким образом, чтобы все понимали. Из тем наиболее понравилась теория графов и решение различных задач с их помощью. Из основных преимуществ курса - это живое общение с преподавателем, который всегда ответит на вопросы, подскажет или сумеет донести тему доступными словами. После прохождения курса я начал подходить к решению задач на работе более осмысленно, применять те или иные структуры данных, зная, как они работают "под капотом". Благодарю всю команду курса за проделанную работу, в отдельности - Евгения Волосатова за увлекательное погружение в мир алгоритмики.

Александр Левченко

03.02.2023
Работаю (и работал на начало обучения) в компании производящей рентгеновское медицинское оборудование. В последнее время появилась необходимость разобраться (и возможно, их оптимизировать) в нескольких алгоритмах обработки синтеза изображений, которые были реализованы нашими предшественниками в компании. Появилась необходимость поднять свой общий уровень в теме. Курс не дал решений моих задач, однако помог мне в общем развитии, в проектировании и реализации алгоритмов. Понравилось: хороший выбор различных областей, классов, задач, очень обстоятельная, доходчивая проработка тем, хороший баланс теории и самостоятельной работы, которая помогает закрепить материал и развивает творческий подход в изучении (иногда и в развитии) алгоритмов. И вообще было очень интересно. Надеюсь, новые знания, методы помогут мне в реализации алгоритмов наших задач в компании.

Павел Проводин

29.01.2023
Хотелось бы выразить большую благодарность команде курса за проделанную работу. Евгений Волосатов замечательный преподаватель, который, как мне кажется, может объяснить любой материал самым доступным образом для всей аудитории. До приобретения курса были сомнения, а стоит ли тратить деньги на курс, если весь материал можно найти в интернете. Подкупило именно то, что лекции ведет преподаватель, с которым можно обсудить все вопросы прям на занятии. После прохождения пары уроков сомнений не осталось - однозначно стоит, если направление интересно. Качество и подача материала замечательные. Плюс, грамотно составленная программа помогает поддерживать мотивацию (сохранять интригу) на протяжении всего обучения. У меня остались только положительные эмоции после прохождения курса. Еще раз большое спасибо.

Вадим Семенов

25.01.2023
Очень хороший курс. Хорош как для тех кто знаком с алгоритмами, так и для тех у кого в ВУЗе их не было(как у меня). Теория изложена структурированно и ясно. Особенно хочется отметить вебинары проходившие c Евгением Витольдовичем Волосатовым. Его занятия увлекательно и без воды доносят суть. После курса стал глубоко понимать алгоритмы сортировки, определение сложности алгоритмов, битовую арифметику, деревья, графы, алгоритмы сжатия данных и многое другое.

Михаил Елисеев

25.07.2022
Курс понравился. Он не был простым, но был полезным и позволил взглянуть на некоторые рутинные вещи под другим углом. Мне показалось, что теме динамического программирования нужно уделить чуть больше времени, для меня она осталась не совсем понятной. Еще было бы здорово ввести систему уровней во все без исключения домашние задания, чтобы студентам было проще сдавать домашние работы. Чувствуется, что Евгений Витольдович любит то, чем занимается и отдает делу всю свою душу, поэтому лично в моем сердце этот курс нашел свое местечко :)

Павел Карев

25.07.2022
Большое спасибо за такой продуманный и сбалансированный курс. Нельзя сказать, что было просто, было сложно. Подача материала проста и понятна, но, когда решаешь задачи самостоятельно, сталкиваешься с тем, что необходимо буквально "прочувстсвовать" реализацию. По личному мнению, если упустили алгоритмические знания ранее, обязательно пройдите этот курс, вы будете в восторге!

Nik Nikitin

25.07.2022
В общем то все получилось отлично. Преподаватель донес все темы максимально профессионально. Единственное что хотелось бы побольше реальных примеров и реализаций

Сергей Симонов

27.04.2022
Отличный и методически продуманный курс. Лекторы Евгений Волосатов и Михаил Горшков - на редкость талантливые преподаватели. Вместе с ними даже сложные алгоритмы быстро становятся понятными. Домашние задания полезны и корректны. Лекции проходят увлекательно.

Руслан Карымов

26.04.2022
Must have курс для разработчика независимо от языка программирования. Увеличились возможности по оптимизации кода, о которых раньше даже не задумывался. Отдельный респект Евгению Витольдовичу - даже спустя несколько месяцев помню процесс построения алгоритмов по изображениям с планшета.

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

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

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

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

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

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