Алгоритмы для разработчиков

Курс о разработке и использовании разнообразных алгоритмов и структур данных
Зачем нужно тестирование?

Длительность

5 месяцев

Начало

24 декабря

Общая стоимость

50 000 ₽

В месяц

12 500 ₽

В кредит:

около 12500 ₽ в месяц

Хочу дешевле
Общая стоимость
50 000 ₽
В месяц: 12 500 ₽
В кредит: около 12500 ₽
в месяц
Продолжительность
5 месяцев
4 часа в неделю
Начало занятий
24 декабря
Что даст вам этот курс
<ul><li>Понимание принципов работы разнообразных алгоритмов, структур данных
<li>Умение использовать готовые алгоритмы и структуры данных и создавать свои под поставленную задачу
<li>Владение техникой вычисления сложности алгоритмов
<li>Освоение продвинутых структур данных: хэш-таблиц, графов, деревьев поиска и многих других
<li>Умение решать алгебраические задачи и задачи динамического программирования

Знание классических алгоритмов и структур данных — обязательное требование, которое предъявляют брендовые IT-компании к претендентам на вакансию Middle developer.

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

Курс предназначен для разработчиков, владеющих разными языками программирования. Он подходит и для Middle-специалистов, которые застоялись на месте, и для «джуниоров», которые хотят быстрее вырасти как профессионалы и избежать многих ошибок. И, конечно, курс по алгоритмам и структурам данных просто жизненно необходим всем тем, кто прогулял или недостаточно серьёзно отнёсся к занятиям по алгоритмизации в университете ;-)

И, конечно, разбираем примеры алгоритмов и делаем домашние задания не на псевдокоде, а на одном из языков: С++, Python, Java.

<div class="course-fact-2-col">
<div class="star">50+ работодателей ждут наших выпускников
<div class="flag" style="margin-bottom: 0;">Большое количество практических заданий
Без алгоритмов и структур данных языки программирования мертвы. Это именно то, что вдыхает жизнь в Java, C++ и Python
Михаил Горшков
Преподаватель курса
Без алгоритмов и структур данных языки программирования мертвы. Это именно то, что вдыхает жизнь в Java, C++ и Python
Михаил Горшков
Преподаватель курса
Преподаватель
Михаил Горшков
Программирую на С++ и Python в течение 18 лет, как хобби — играю на фортепиано. Работаю в Лаборатории Касперского, окончил курс по С++ в Otus и занимаюсь на курсе DataScience. Сейчас являюсь наставником на курсе С++. Специально для проекта OTUS создал программу "Алгоритмы для разработчиков".

Этот курс для тех, кто не проходил или пропустил алгоритмы в своем ВУЗе, а также для всех программистов, интересующихся данной темой: от любителей до профессионалов. Вы узнаете о популярных алгоритмах и структурах данных, научитесь их реализовывать и применять, сможете претендовать на вакансии в лучшие компании России и всего мира: Яндекс, Google, Facebook!

Присоединяйтесь, будет круто!
Преподаватель
Михаил Горшков
Программирую на С++ и Python в течение 18 лет, как хобби — играю на фортепиано. Работаю в Лаборатории Касперского, окончил курс по С++ в Otus и занимаюсь на курсе DataScience. Сейчас являюсь наставником на курсе С++. Специально для проекта OTUS создал программу "Алгоритмы для разработчиков".

Этот курс для тех, кто не проходил или пропустил алгоритмы в своем ВУЗе, а также для всех программистов, интересующихся данной темой: от любителей до профессионалов. Вы узнаете о популярных алгоритмах и структурах данных, научитесь их реализовывать и применять, сможете претендовать на вакансии в лучшие компании России и всего мира: Яндекс, Google, Facebook!

Присоединяйтесь, будет круто!
Минимальные знания
<ul><li>Опыт программирования на одном из следующих языков: С++, Python, Java (начальный или средний уровень) <li>Знание элементарной математики в объёме средней школы <li>Минимальное знание алгоритмов и структур данных и желание развиваться в области их изучения
Процесс обучения
Обучение проходит онлайн, в формате вебинаров. Длительность этого курса составляет 5 месяцев, финальный месяц отводится для выполнения проектной работы и оттачивания полученных навыков.

Расписание занятий включает 2 вебинара в неделю по 2 академических часа и от 2 до 4 часов на домашнюю работу.


Во время обучения слушатель может задавать преподавателю уточняющие вопросы по материалам лекций, домашних заданий и выпускного проекта.
Программа обучения
Модуль 1
Введение в алгоритмы и структуры данных
Модуль 2
Сортировки
Модуль 3
Хэш-таблицы
Модуль 4
Деревья
Модуль 5
Графы
Модуль 6
Алгоритмы на строках
Модуль 7
Динамическое программирование
Модуль 8
Вероятностные алгоритмы и структуры данных
Модуль 9
Проектная работа
Введение в алгоритмы и структуры данных
Введение в алгоритмы, RAM-модель
Студенты смогут оценивать сложность алгоритмов, ознакомятся с эмулятором RAM-машины.
24 декабря, 20:00 — 21:30
Домашние задания: 1
1 Оценка вычислительной сложности алгоритма Евклида.
Запрограммировать алгоритм Евклида при помощи эмулятора RAM.
Дать детальную оценку сложности алгоритма Евклида при помощи эмулятора и опубликовать ее в слаке.
Дать обратную связь в слаке на 2 (два) выполненных задания других участников.
Опционально. Пройти 1 сontest на hackerrank. Прислать ссылку на submission.
Порядок роста функций, нотации для обозначения порядка роста
Студенты освоят нотации о малое, о большое, омега малое, омега большое, тета, научатся применять полученные знания на практике при оценке сложности реальных алгоритмов.
26 декабря, 20:00 — 21:30
Простейшие структуры данных: массив, динамический массив, стек, очередь, очередь с приоритетами, списки, кучи
Студенты ознакомятся с использованием и реализацией простейших структур данных.
31 декабря, 20:00 — 21:30
Домашние задания: 1
1 Реализация простой структуры данных, алгоритма на ней и оценка его сложности
Написать реализацию односвязного списка в jupyter notebook
Сделать два варианта алгоритма его разворота (рекурсия и цикл)
Оценить сложность алгоритмов при помощи нотаций о малое, о большое, омега малое, омега большое, тета
Опубликовать ссылку в слаке
Оценить работу другого студента
Опционально. Пройти 1 сontest на hackerrank. Прислать ссылку на submission.
Алгебраические алгоритмы: алгоритм Евклида, быстрое возведение в степень, решето Эратосфена, быстрое вычисление чисел Фибоначчи
Студенты ознакомятся с использованием и реализацией некоторых популярных алгебраических алгоритмов.
2 января, 20:00 — 21:30
Сортировки
Сортировка вставками, сортировка Шелла, сортировка выбором, пузырьковая сортировка
Студенты освоят алгоритмы сортировки вставками, выбором, пузырьком, сортировку Шелла. По окончании занятия студенты смогут реализовывать и правильно применять данные алгоритмы.
7 января, 20:00 — 21:30
Домашние задания: 1
1 Реализовать указанные алгоритмы сортировки и сделать их анализ
Реализовать алгоритмы сортировки вставками, выбором, пузырьком, merge sort, timsort.
Опционально - сравнить со стандартной реализацией по времени работы
Опционально - доказать корректность алгоритмов
Выложить ссылки в слак
Сделать ревью на работу других студентов
Опционально. Пройти 1 сontest на hackerrank. Прислать ссылку на submission.
Сортировка слиянием, timsort
Студенты освоят и смогут реализовать алгоритмы сортировки слиянием и timsort.
9 января, 20:00 — 21:30
Пирамидальная сортировка (heap sort), tree sort
Студенты смогут реализовывать и применять пирамидальную сортировку, tree sort.
14 января, 20:00 — 21:30
Быстрая сортировка
Студенты освоят алгоритм быстрой сортировки.
16 января, 20:00 — 21:30
Домашние задания: 1
1 Реализовать указанные алгоритмы и сделать их анализ
Реализовать алгоритмы heap sort, tree sort, быстрой сортировки.
Опционально - доказать корректность алгоритмов.
Выложить ссылку на реализацию в слак.
Сделать ревью на работу другого студента.
Опционально. Пройти 1 сontest на hackerrank. Прислать ссылку на submission.
Сортировка подсчетом, поразрядная сортировка, блочная сортировка (bucket sort)
Студенты освоят и смогут реализовать сортировку подсчетом, поразрядную сортировку, блочную сортировку.
21 января, 20:00 — 21:30
Медианы и порядковые статистики
Студенты научатся реализовывать алгоритмы для нахождения медианы и порядковых статистик.
23 января, 20:00 — 21:30
Домашние задания: 1
1 Реализовать указанные алгоритмы и сделать их анализ
Реализовать алгоритмы сортировки подсчетом, поразрядной сортировки, нахождения медиан и порядковых статистик
Опционально доказать корректность
Выложить в слак
Сделать ревью на работу другого студента
Опционально. Пройти 1 сontest на hackerrank. Прислать ссылку на submission.
Хэш-таблицы
Хэш-таблицы, хэш-функции
Студенты изучат работу хэш-функций и хэш-таблиц.
28 января, 20:00 — 21:30
Таблицы с прямой адресацией
Студенты смогут реализовывать хэш-таблицы с прямой адресацией.
30 января, 20:00 — 21:30
Открытая адресация в хэш-таблицах
Студенты изучат метод открытой адресации и смогут реализовать хэш-таблицу с открытой адресацией.
4 февраля, 20:00 — 21:30
Домашние задания: 1
1 Реализация хэш-таблицы с открытой адресацией, анализ реализации
Реализовать хэш-таблицу с открытой адресацией, вычислить время работы при вставке-поиске
Выложить в слак
Сделать ревью работы другого студента
Опционально. Пройти 1 сontest на hackerrank. Прислать ссылку на submission.
Деревья
Двоичные деревья поиска, декартовы деревья
Студенты освоят и смогут применять двоичные деревья поиска и декартовы деревья.
6 февраля, 20:00 — 21:30
Красно-черные деревья, расширяющиеся деревья, АВЛ-деревья
Студенты освоят и смогут применять красно-черные деревья, расширяющиеся деревья, АВЛ-деревья.
11 февраля, 20:00 — 21:30
Домашние задания: 1
1 Реализация красно-чёрного дерева, вставки и поиска
Реализовать самостоятельно красно-черное дерево, вставку и поиск на нём, замерить время вставки-поиска
Выложить в слак
Опционально. Сделать ревью работы другого студента
Опционально. Пройти 1 сontest на hackerrank. Прислать ссылку на submission.
B-деревья, B+-деревья. Деревья отрезков
Студенты освоят и смогут применять B-деревья и В+-деревья. Ознакомятся с деревьями отрезков.
13 февраля, 20:00 — 21:30
Суффиксные деревья. Алгоритмы МакКрейта и Укконена
Студенты освоят суффиксные деревья и алгоритмы их построения.
20 марта, 20:00 — 21:30
Домашние задания: 1
1 Реализовать суффиксное дерево
Графы
Поиск в ширину
Студенты освоят, смогут реализовывать и применять поиск в ширину.
18 февраля, 20:00 — 21:30
Поиск в глубину, поиск компонент сильной связности. Алгоритм Косарайю.
Студенты освоят, смогут реализовывать и применять поиск в глубину и алгоритмы поиска компонент сильной связности.
20 февраля, 20:00 — 21:30
Домашние задания: 1
1 Решить задачу на поиски в ширину и глубину
Топологическая сортировка
Студенты освоят, смогут реализовывать и применять топологическую сортировку.
25 февраля, 20:00 — 21:30
Минимальные остовные деревья. Алгоритмы Крускала и Прима
Студенты освоят, смогут реализовывать и применять алгоритмы нахождения минимальных остовных деревьев.
27 февраля, 20:00 — 21:30
Домашние задания: 1
1 Реализовать алгоритмы топологической сортировки и нахождения минимального остовного дерева
Поиск кратчайшего пути в графе. Алгоритм Беллмана-Форда
Студенты освоят, смогут реализовывать и применять алгоритмы поиска кратчайшего пути в графе.
4 марта, 20:00 — 21:30
Алгоритмы Дейкстры, Флойда-Варшалла, Джонсона
Студенты освоят, смогут реализовывать и применять алгоритмы Дейкстры, Флойда-Варшалла, Джонсона.
6 марта, 20:00 — 21:30
Домашние задания: 1
1 Реализовать алгоритм Дейкстры
Алгоритмы на строках
Алгоритм Бойера-Мура
Студенты освоят, смогут реализовывать и применять алгоритм Бойера-Мура.
11 марта, 20:00 — 21:30
Алгоритм Кнута-Морриса-Пратта
Студенты освоят, смогут реализовывать и применять алгоритм Кнута-Морриса-Пратта.
13 марта, 20:00 — 21:30
Домашние задания: 1
1 Реализовать алгоритмы Бойера-Мура и Кнута-Морриса-Пратта
Алгоритм Ахо-Корасика
Студенты освоят, смогут реализовывать и применять алгоритм Ахо-Корасика.
18 марта, 20:00 — 21:30
Код Хаффмана, алгоритм Лемпела-Зива
Студенты освоят кодирование Хаффмана, алгоритм Лемпела-Зива.
25 марта, 20:00 — 21:30
Динамическое программирование
Динамическое программирование: вычисление чисел фибоначчи, наибольшая возрастающая подпоследовательность и др.
Студенты освоят и смогут применять метод динамического программирования для решения практических задач.
27 марта, 20:00 — 21:30
Домашние задания: 1
1 Решить задачу на динамическое программирование
Вероятностные алгоритмы и структуры данных
Фильтр Блума
Студенты освоят, смогут реализовывать и применять фильтр Блума.
1 апреля, 20:00 — 21:30
Алгоритмы MinHash, SimHash
Студенты освоят, смогут реализовывать и применять алгоритмы MinHash, SimHash.
3 апреля, 20:00 — 21:30
Домашние задания: 1
1 Реализовать фильтр Блума, вероятностные алгоритмы
Алгоритмы HyperLogLog, Count-Min Sketch
Студенты освоят, смогут применять и реализовывать алгоритмы HyperLogLog и Count-Min Sketch.
8 апреля, 20:00 — 21:30
Проектная работа
Урок о проекте
Урок о проекте - какие могут быть проекты, что для этого надо сделать + вопросы по несделанным домашкам.
Промежуточная встреча
Обзор состояния дел по проекту, текущие вопросы студентов по их проектам.
Презентация проектов
Презентация проектов, рефлексия.
Заключительное занятие
Обзор пройденных тем. Студенты вспомнят пройденный материал.
10 апреля, 20:00 — 21:30
Выпускной проект
В рамках курса предусмотрена защита проекта. Это отдельная работа, на выполнение которой отводится последний месяц обучения. Проект включает в себя имплементацию сложного алгоритма и/или сложной структуры данных. При подготовке проектной работы студент может рассчитывать на консультации преподавателя и его экспертные советы.

<ul>
<li>написать кастомную хэш-таблицу
<li>реализовать свой менеджер памяти с garbage collector
<li>реализовать B-tree индекс для СУБД
<li>любая тема на выбор студента, связанная с продвинутыми алгоритмами и структурами данных
Расписание занятий
Ваша группа
(cтарт 24 декабря)
Понедельник и среда
20:00—21:30
Группа: Algo-2018-12
После обучения вы
<ul>
<li>получите материалы по всем пройденным занятиям (видеозаписи вебинаров, выполненные домашние задания, выпускной проект)
<li>сможете писать рациональный и хорошо структурированный код
<li>получите сертификат об окончании курса
<li>приобретёте навыки работы с алгоритмами и структурами данных, которые необходимы при реализации сложных проектов в крупных компаниях
<li>получите приглашение пройти собеседование в компаниях-партнёрах (в случае успешного обучения)
Ваш сертификат
otus.ru
Константин Константинопольский
успешно закончил курс
«Алгоритмы для разработчиков»
Успешных заданий:
16 из 16
Проектная работа:
Распределённая система сетевого мониторинга
Виталий Чибриков
Генеральный директор
№ 0001
otus.ru
Константин Константинопольский
успешно закончил курс
«Алгоритмы для разработчиков»
Успешных заданий:
16 из 16
Проектная работа:
Распределённая система сетевого мониторинга
Виталий Чибриков
Генеральный директор
№ 0001
Общая стоимость
50 000 ₽
В месяц: 12 500 ₽
В кредит: около ₽ в месяц
Продолжительность
5 месяцев
Начало занятий
24 декабря