Алгоритмы для разработчиков: разработка и использование разнообразных алгоритмов и структур данных

Курсы

Специализации Курсы в разработке Подготовительные курсы
+7 499 110-61-65
Специальная цена

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

Курс о разработке и использовании разнообразных алгоритмов и структур данных
Подойдет ли мне этот курс?

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

5 месяцев

Начало

29 апреля

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

60 000 ₽ 55 000 ₽

В месяц

12 500 ₽

В кредит:

12500 ₽ в месяц

Хочу дешевле
Общая стоимость
60 000 ₽ 55 000 ₽
В месяц: 12 500 ₽
В кредит: 55000 ₽
в месяц
Продолжительность
5 месяцев, 4 академ. часа в неделю
Начало занятий
В апреле
Что даст вам этот курс

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

Поэтому для вас мы разработали уникальную авторскую программу от инженера-программиста из Лаборатории Касперского, которая поможет на профессиональном уровне:

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

Для кого этот курс?
Программа создана для Junior/Middle разработчиков, владеющих разными языками программирования. Откроет огромные перспективы для развития тем, кто застоялся на месте, и тем, кто хочет вырасти профессионально, избежав многих ошибок. И, конечно, курс просто жизненно необходим всем, кто прогулял или недостаточно серьёзно относился к занятиям по алгоритмам в вузе.


50+ работодателей ждут наших выпускников

Большое количество практических заданий

Примеры не на псевдокоде, а на одном из языков: С++, Python, Java

Онлайн-интенсив «Архиватор Хаффмана», 11 марта в 20:00
На практическом вебинаре обсудим и напишем архиватор на основе кода Хаффмана:
• Способы сжатия информации.
• Префиксный код Хаффмана.
• Создание частотного словаря.
• Дерево кода Хаффмана.
• Алгоритм сжатия файла.
• Алгоритм распаковки архива.
• Тестирование программы на разных файлах.

Для активного участия в вебинаре вам понадобятся Microsoft Visual Studio и C# .NET.
Ведет
Евгений
Волосатов
Предыдущий открытый вебинар
Без алгоритмов и структур данных языки программирования мертвы. Это именно то, что вдыхает жизнь в Java, C++ и Python
Михаил Горшков
Преподаватель курса
Преподаватели
Михаил Горшков
Лаборатория Касперского
Матвей Калинин
Евгений Волосатов
Никита Овчинников
Андрей Иванов
Михаил Степанов
Jet Infosystems
Программирую на С++ и Python в течение 18 лет, как хобби — играю на фортепиано. Работаю в Лаборатории Касперского, окончил курс по С++ в Otus и занимаюсь на курсе DataScience. Сейчас являюсь наставником на курсе С++. Специально для проекта OTUS создал программу "Алгоритмы для разработчиков".

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

Присоединяйтесь, будет круто!

Преподаватель
Опыт разработки программного обеспечения с 1990 года. Работал и с привычными ныне dos, windows и linux системами, и с редко встречающимися специализированными вычислительными устройствами (системами реального времени, ibm i). Профессионально использую C++, С#, assembler, java, RPG.

Закончил МАИ, к.т.н., старший преподаватель, кафедра «Робототехнические и интеллектуальные системы».
Участвовал в проектах разработки программного обеспечения, связанного с навигацией. Решал задачи для процессоров цифровой обработки сигналов в операционных системах реального времени включая параллельную обработку данных.
Разработал и вёл курс вероятностных конечных автоматов.

В 2000-2002г самостоятельно разработал, используя C++ и Dephi, биллинговый комплекс АСР «ИнтБиллинг» (оборудование VocalTec). Сертификат № ОС/1-СТ-219 Министерства Российской Федерации по связи и информатизации. Биллинг выставлялся на СвязьЭкспоком, имел инсталляции заказчиков.

Долгое время работал с Java2EE (back-end и front-end). Сначала в первом агрегаторе контента для сотовых устройств "Никита-мобайл". Затем в компании "Микротест" занимался разработкой и реализацией систем информирования пользователя, основанных на web интерфейсе и являющихся частью больших распределённых систем, таких как биллинговые системы (Oracle BRM), CRM (Oracle Siebel), интеграционные шины (Tibco), SMS шлюзы.
С 2016 года - Главный разработчик на ibm i в одном из крупнейших банков страны

Люблю и умею преподавать. Более 20 лет помимо программирования изучаю и обучаю айкидо (5й дан Айкикай).

Подобно технике боевых искусств мы изучаем базис: языки, паттерны, платформы. Чтобы затем перевести это всё в зодчество ПО, его архитектуру. С другой стороны, программный продукт всегда есть отражение создателя. Любая система, согласно закону Конвея, есть отражение людей, создавших её. Программирование суть искусство в мире электронных форм. Взрослый ничем не отличается от маленького ребенка, играющего с кубиками. Только кубики другие. Творчество это основа всего. И свобода ошибаться и искать. Обучение это игра и освоение новых миров.

Профессиональный программист. Преподаватель языка Java в колледже.
Автор видеокурсов по C#, Java, PHP

20 лет опыта ведущим программистом в разных фирмах и опыта преподавания в университете, колледже. 6 лет опыта ведения вебинаров и создания видеокурсов

Три самых крупных завершенных проекта:
PHP. Служба знакомств в интернете - PHP, MySQL, FreeBSD, C/C++
C#. Программа расчёта заработной платы на АЭС - C#, MS-SQL Server
Java. Видеокурс создания игры Сапёр на Java: https://goo.gl/24DgBg

Статьи на Habrahabr:
Как я создавал методику изучения C# - habr.com/post/239825/
Об альтернативном образовании и про C# - habr.com/post/257957/
Изучение C# — Практический подход - habr.com/post/304142/

Участие в IT-конференциях в Литве, призовое место в конкурсе программирования InfoBalt, призовое место на республиканской олимпиаде по математике и информатике

С окончания школы в 1996 году постоянно преподавал информатику в университете, школе, на кружках, в ДДТ, на предприятиях, в колледже. С 2013 года ведет вебинары онлайн, записывает видеокурсы
https://www.VideoSharp.info/

В 2002 году закончил Вильнюсский государственный университет по специальности «Магистр математики и информатики», а в 2008 году по специальности «Учитель профессии»

«В детстве меня вдохновила "Занимательная ***" серия книг Я. И. Перельмана. Считаю своим призванием создать занимательную методику обучения программированию.»

Руководитель программы
Окончил Волгоградский государственный технический университет по специальности «Автоматизированные системы обработки информации и управления». Увлёкся программированием ещё в студенческие годы (в 2010 году) и остановиться так и не смог. В коммерческой разработке с 2012 года.

Работал с проектами разного масштаба, прошёл путь от Junior до Senior. С 2016 года — старший инженер-программист в EPAM Systems, с 2018 по май 2019 — технический руководитель по разработке софта в Skywind Group.

Участвовал в международном проекте компании Ericsson, занимался web-программированием и собственными проектами.

Является специалистом по архитектуре веб-приложений, хорошо знает JS, React, Node, Mongo, MySQL, фреймворки Express, Koa2, AngularJS. Уверен, что в программировании всё приходит с практикой.

Преподаватель
Один из разработчиков academy.cppstudio.com - бесплатного интерактивного сервиса по обучению С++. Свыше 5 лет опыта разработки приложений на C++ и C#.
Используемые технологии и фрэймворки:
WPF, WinForms, EF6, ASP.NET MVC5, ASP.NET Core 2.

Работаю в отделе машинного обучения компании Jet Infosystems.
Занимаюсь проектами по агрегации отзывов, по анализу и оптимизации производства крупных промышленных компаний.
В data science пришел из промышленного программирования на Python, где разрабатывал код для "толстого клиента" в проекте по созданию "умных окон".

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

Область интересов: data science, математика, космос и Python.
Мой взгляд на программирование: с великой силой приходит великая ответственность.

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

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

Присоединяйтесь, будет круто!

Преподаватель
Матвей Калинин
Опыт разработки программного обеспечения с 1990 года. Работал и с привычными ныне dos, windows и linux системами, и с редко встречающимися специализированными вычислительными устройствами (системами реального времени, ibm i). Профессионально использую C++, С#, assembler, java, RPG.

Закончил МАИ, к.т.н., старший преподаватель, кафедра «Робототехнические и интеллектуальные системы».
Участвовал в проектах разработки программного обеспечения, связанного с навигацией. Решал задачи для процессоров цифровой обработки сигналов в операционных системах реального времени включая параллельную обработку данных.
Разработал и вёл курс вероятностных конечных автоматов.

В 2000-2002г самостоятельно разработал, используя C++ и Dephi, биллинговый комплекс АСР «ИнтБиллинг» (оборудование VocalTec). Сертификат № ОС/1-СТ-219 Министерства Российской Федерации по связи и информатизации. Биллинг выставлялся на СвязьЭкспоком, имел инсталляции заказчиков.

Долгое время работал с Java2EE (back-end и front-end). Сначала в первом агрегаторе контента для сотовых устройств "Никита-мобайл". Затем в компании "Микротест" занимался разработкой и реализацией систем информирования пользователя, основанных на web интерфейсе и являющихся частью больших распределённых систем, таких как биллинговые системы (Oracle BRM), CRM (Oracle Siebel), интеграционные шины (Tibco), SMS шлюзы.
С 2016 года - Главный разработчик на ibm i в одном из крупнейших банков страны

Люблю и умею преподавать. Более 20 лет помимо программирования изучаю и обучаю айкидо (5й дан Айкикай).

Подобно технике боевых искусств мы изучаем базис: языки, паттерны, платформы. Чтобы затем перевести это всё в зодчество ПО, его архитектуру. С другой стороны, программный продукт всегда есть отражение создателя. Любая система, согласно закону Конвея, есть отражение людей, создавших её. Программирование суть искусство в мире электронных форм. Взрослый ничем не отличается от маленького ребенка, играющего с кубиками. Только кубики другие. Творчество это основа всего. И свобода ошибаться и искать. Обучение это игра и освоение новых миров.

Евгений Волосатов
Профессиональный программист. Преподаватель языка Java в колледже.
Автор видеокурсов по C#, Java, PHP

20 лет опыта ведущим программистом в разных фирмах и опыта преподавания в университете, колледже. 6 лет опыта ведения вебинаров и создания видеокурсов

Три самых крупных завершенных проекта:
PHP. Служба знакомств в интернете - PHP, MySQL, FreeBSD, C/C++
C#. Программа расчёта заработной платы на АЭС - C#, MS-SQL Server
Java. Видеокурс создания игры Сапёр на Java: https://goo.gl/24DgBg

Статьи на Habrahabr:
Как я создавал методику изучения C# - habr.com/post/239825/
Об альтернативном образовании и про C# - habr.com/post/257957/
Изучение C# — Практический подход - habr.com/post/304142/

Участие в IT-конференциях в Литве, призовое место в конкурсе программирования InfoBalt, призовое место на республиканской олимпиаде по математике и информатике

С окончания школы в 1996 году постоянно преподавал информатику в университете, школе, на кружках, в ДДТ, на предприятиях, в колледже. С 2013 года ведет вебинары онлайн, записывает видеокурсы
https://www.VideoSharp.info/

В 2002 году закончил Вильнюсский государственный университет по специальности «Магистр математики и информатики», а в 2008 году по специальности «Учитель профессии»

«В детстве меня вдохновила "Занимательная ***" серия книг Я. И. Перельмана. Считаю своим призванием создать занимательную методику обучения программированию.»

Руководитель программы
Никита Овчинников
Окончил Волгоградский государственный технический университет по специальности «Автоматизированные системы обработки информации и управления». Увлёкся программированием ещё в студенческие годы (в 2010 году) и остановиться так и не смог. В коммерческой разработке с 2012 года.

Работал с проектами разного масштаба, прошёл путь от Junior до Senior. С 2016 года — старший инженер-программист в EPAM Systems, с 2018 по май 2019 — технический руководитель по разработке софта в Skywind Group.

Участвовал в международном проекте компании Ericsson, занимался web-программированием и собственными проектами.

Является специалистом по архитектуре веб-приложений, хорошо знает JS, React, Node, Mongo, MySQL, фреймворки Express, Koa2, AngularJS. Уверен, что в программировании всё приходит с практикой.

Преподаватель
Андрей Иванов
Один из разработчиков academy.cppstudio.com - бесплатного интерактивного сервиса по обучению С++. Свыше 5 лет опыта разработки приложений на C++ и C#.
Используемые технологии и фрэймворки:
WPF, WinForms, EF6, ASP.NET MVC5, ASP.NET Core 2.

Михаил Степанов
Jet Infosystems
Работаю в отделе машинного обучения компании Jet Infosystems.
Занимаюсь проектами по агрегации отзывов, по анализу и оптимизации производства крупных промышленных компаний.
В data science пришел из промышленного программирования на Python, где разрабатывал код для "толстого клиента" в проекте по созданию "умных окон".

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

Область интересов: data science, математика, космос и Python.
Мой взгляд на программирование: с великой силой приходит великая ответственность.

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

А ещё на курсе я был очень удивлён тем, насколько сильно отличается скорость работы сортировки Шелла от сортировки вставками.

В общем, всячески рекомендую, познавательно и интересно.
Читать целиком
Александр
Рыбаков
Очень полезный курс, рекомендую, уверен что поможет мне во многих моих проектах. Этот курс помог мне пересмотреть взгляд на многие на первый взгляд простые задачи, упростить и ускорить их выполнение.
Спасибо, OTUS
Читать целиком
Инна
ХХХ
Курс был полезен для приобретения новых навыков. Очень подробно рассмотрены темы сортировок, контейнеры, деревья и графы. Интересное и полезное занятие на тему memory allocation. Из всех преподавателей хочу выделить Евгения Волосатова - ему отдельное спасибо за очень хорошее взаимодействие с аудиторией.
Читать целиком
Андрей
Меньшенин
Очень насыщенная программа. Много материалов. Интересные и довольно сложные домашние задания, надо которыми надо подумать, поразмышлять, и реализовать.
Понравилось то, что все материалы представлены в личном кабинете, что можно зайти и повторить.
Понравилось то, что можно было подключить микрофон, и голосом спросить вопросы у преподавателя на вебинаре или даже пройти алгоритм шаг за шагом вместе с преподавателем.
Больше всего понравились преподаватели, которые старались как можно проще и понятнее объяснить тему вебинаров.
Читать целиком
Роман
Зотов
Так как не имею профильного образования, чувствовалась нехватка фундаментальных знаний в области основ программирования. На данном курсе рассмотрены основные алгоритмы и структуры данных, которые должен знать каждый разработчик. Преподаватели отлично знают материал и чаще всего могут его преподнести так что даже не подготовленному человеку можно разобраться. По сложности - да было сложно, но оно того стоит. Спасибо за полученные знания.
Читать целиком
Александр
Зимин
Хороший курс. Восстановил всё давно забытое с университета и узнал много нового. Брал его чтобы подготовится к собеседованиям, т.к. планировал менять работу, и полученные на нём знания не раз меня выручили.
Например, теперь ничего не стоит рассказать, как работает очередь с приоритетами построенная на куче.
До курса я бы, скорее всего, завалил этот вопрос)

А ещё на курсе я был очень удивлён тем, насколько сильно отличается скорость работы сортировки Шелла от сортировки вставками.

В общем, всячески рекомендую, познавательно и интересно.
Читать целиком
Александр
Рыбаков
Очень полезный курс, рекомендую, уверен что поможет мне во многих моих проектах. Этот курс помог мне пересмотреть взгляд на многие на первый взгляд простые задачи, упростить и ускорить их выполнение.
Спасибо, OTUS
Читать целиком
Инна
ХХХ
Курс был полезен для приобретения новых навыков. Очень подробно рассмотрены темы сортировок, контейнеры, деревья и графы. Интересное и полезное занятие на тему memory allocation. Из всех преподавателей хочу выделить Евгения Волосатова - ему отдельное спасибо за очень хорошее взаимодействие с аудиторией.
Читать целиком
Андрей
Меньшенин
Очень насыщенная программа. Много материалов. Интересные и довольно сложные домашние задания, надо которыми надо подумать, поразмышлять, и реализовать.
Понравилось то, что все материалы представлены в личном кабинете, что можно зайти и повторить.
Понравилось то, что можно было подключить микрофон, и голосом спросить вопросы у преподавателя на вебинаре или даже пройти алгоритм шаг за шагом вместе с преподавателем.
Больше всего понравились преподаватели, которые старались как можно проще и понятнее объяснить тему вебинаров.
Читать целиком
Роман
Зотов
Так как не имею профильного образования, чувствовалась нехватка фундаментальных знаний в области основ программирования. На данном курсе рассмотрены основные алгоритмы и структуры данных, которые должен знать каждый разработчик. Преподаватели отлично знают материал и чаще всего могут его преподнести так что даже не подготовленному человеку можно разобраться. По сложности - да было сложно, но оно того стоит. Спасибо за полученные знания.
Читать целиком
Необходимые знания
  • Опыт программирования на любом языке программирования (начальный или средний уровень)
  • Знание элементарной математики в объёме средней школы
  • Минимальное знание алгоритмов и структур данных и желание развиваться в области их изучения
Процесс обучения
Обучение проходит онлайн, в формате вебинаров. Длительность этого курса составляет 5 месяцев, финальный месяц отводится для выполнения проектной работы и оттачивания полученных навыков.

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

Во время обучения слушатель может задавать преподавателю уточняющие вопросы по материалам лекций, домашних заданий и выпускного проекта.
Программа обучения
Модуль 1
Введение в алгоритмы и структуры данных
Модуль 2
Алгоритмы сортировки
Модуль 3
Деревья
Модуль 4
Хеш-таблицы
Модуль 5
Графы
Модуль 6
Алгоритмы на строках
Модуль 7
Динамическое программирование
Модуль 8
Вероятностные алгоритмы и структуры данных
Модуль 9
Численные методы оптимизации
Модуль 10
Проектная работа
Введение в алгоритмы и структуры данных
В первом модуле мы научимся решать комбинаторные задачи полным перебором с использованием вложенных циклов и рекурсии, сравним эффективности различных алгебраических алгоритмов, поработаем с битовой арифметикой на примере шахматной доски, а также напишем реализацию базовых структур данных, которые вы будете использовать при составлении программ в рамках этого курса.
Тема 1: Комбинаторика
тестировать программы, написанные на этом курсе:
решать комбинаторные задачи методом перебора;
использовать рекурсию для генерации вариантов.
Тема 2: Алгебраические алгоритмы
реализовать популярные алгебраические алгоритмы;
использовать изученный подход при решении других задач.
Домашние задания: 1
1 НОД, Степень, Простые числа, Числа Фибоначчи.
Цель: Создать систему тестирования на основе файлов с начальными данными и результатами. Написать и сравнить разные алгоритмы нахождения наибольшего общего делителя, возведения числа в целую степень, поиска простых чисел и вычисления чисел фибоначчи.
Тема 3: Битовая арифметика
работать с битовыми операциями;
генерировать битовые маски по заданным правилам.
Домашние задания: 1
1 Шахматные биты
Цель: Решить 4 задачи по условию.
Тема 4: Базовые структуры данных
написать свою реализацию различных структур данных;
сравнить эффективность различных подходов;
выбрать подходящую структуру данных под конкретную задачу.
Домашние задания: 1
1 Динамические массивы, неполный массив, очередь с приоритетом.
Цель: Создание разных алгоритмов для реализации Динамического массива и сравнение их производительности. Создание приоритетной очереди или неполного массива.
Алгоритмы сортировки
В этом модуле мы рассмотрим самые разные алгоритмы сортировки данных, начиная самыми медленными и заканчивая эффективными алгоритмами, которые работают за линейное время, также мы напишем алгоритм внешней сортировки, когда все данные не могут быть загружены в память программы. На последнем занятии мы рассмотрим алгоритм нахождения порядковых статистик за линейное время.
Тема 1: Простая сортировка
отсортировать массив разными способами;
вычислять и сравнивать сложности алгоритмов;
использовать рассмотренные идеи при решении других задач.
Тема 2: Пирамидальная сортировка
объяснить принцип работы пирамидальной сортировки;
сравнить её преимущества и недостатки;
реализовать алгоритм heap sort.
Домашние задания: 1
1 Алгоритм HeapSort
Цель: Реализовать алгоритмы Shell и пирамидальной сортировки и сравнить их эффективность.
Тема 3: Быстрая и внешняя сортировка
реализовать алгоритм быстрой сортировки quick sort;
реализовать алгоритм сортировки слиянием merge sort;
отсортировать миллиард чисел, не загружая их все в память.
Тема 4: Линейная сортировка
реализовать сортировку подсчетом;
написать алгоритм поразрядной сортировки;
объяснить принцип работы блочной сортировки;
составить алгоритм нахождения порядковой статистики за линейное время.
28 февраля, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Сортировка Миллиарда чисел
Цель: Отсортировать миллиард чисел двумя способами: внешней и линейной сортировкой.
Деревья
В этом модуле мы окажемся в заповеднике двоичных деревьев поиска, познакомимся с их разновидностями, особенностями, правилами добавления и удаления элементов, методами балансировки на больших и малых поворотах. Вы узнаете про АВЛ и красно-чёрные деревья, расширяющиеся и рандомизированные деревья, о сильноветвящихся В-деревьях и про дерево отрезков, которое помогает быстро и просто вычислять ассоциативную функцию на любом отрезке массива.
Тема 1: Двоичные деревья поиска
создавать двоичные деревья поиска;
выполнять балансировку АВЛ-деревьев;
объяснить принципы формирования декартова дерева.
2 марта, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Двоичное дерево поиска, АВЛ и Декартово дерево
Цель: Создать двоичное дерево поиска, реализовать один из вариантов балансировки. Сравнить эффективность алгоритмов на случайных и упорядоченных данных.
Тема 2: Красно-чёрные деревья
перечислить правила размещения элементов в красно-чёрном дереве;
выполнить балансировку красно-чёрного дерева;
объяснить принципы формирования расширяющихся и рандомизированных деревьев.
13 марта, 20:00 — 21:30
Лектор: Евгений Волосатов
Тема 3: В-деревья отрезков
создавать N-ричные В-деревья поиска;
объяснить причины их эффективности;
использовать деревья отрезков для быстрого нахождения суммы элементов на любом отрезке массива.
16 марта, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Реализовать оптимальное дерево поиска
Реализовать оптимальное дерево поиска
- Алгоритм 1
- Алгоритм 2

Сравнить
1) время построения, включая сортировку
2) время поиска

Тест провести на dataset из прошлого занятия. Включить в глобальный тест (только dataset)

Опционально 1:
Написать реализацию бинарного дерева поиска или расширяющегося дерева или рандомизированного дерева.
Включить в глобальный тест

Опционально 2:
У кого была реализация декартового дерева использовать его как оптимальное дерево поиска. Включить в тест на dataset

ВАЖНО! При размещении ответа укажите, на каком языке вы выполнили ДЗ. Это поможет нам ускорить его проверку.
Хеш-таблицы
Тема 1: Таблицы с прямой адресацией. Хэш-таблицы, хэш-функции. Метод цепочек (chaining).
Студенты смогут реализовывать хэш-таблицы с прямой адресацией, а также изучат работу хэш-функций и хэш-таблиц. Борьба с коллизиями будет разобрана на примере метода цепочек.
20 марта, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Хэш-таблицы, часть I
1. Реализовать хеш-таблицу, использующую метод цепочек
- дополнительно: для хранения внутри цепочек при достижении значительного числа элементов (~32) заменять их на BST

2. _Или_: реализовать хеш-таблицу с открытой адресацией
- дополнительно: реализовать "ленивое" удаление
- реализовать квадратичный пробинг

ВАЖНО! При размещении ответа укажите, на каком языке вы выполнили ДЗ. Это поможет нам ускорить его проверку.
Тема 2: Хеш-функции. Стратегии поиска. Универсальное хеширование
Студенты смогут реализовывать хэш-таблицы с открытой адресацией. Будут рассмотрены различные стратегии поиска, универсальное хеширование, различные хеш-функции.
23 марта, 20:00 — 21:30
Лектор: Евгений Волосатов
Тема 3: Универсальное и идеальное хэширование.
Будет рассмотрено универсальное и идеальное хеширование, области их применения.
27 марта, 20:00 — 21:30
Лектор: Евгений Волосатов
Графы
Тема 1: Поиск в ширину. Поиск в глубину, поиск компонент сильной связности. Алгоритм Косарайю.
Студенты освоят, смогут реализовывать и применять поиск в ширину и поиск в глубину. Будут разобраны алгоритмы поиска компонент сильной связности.
30 марта, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Реализовать алгоритм Косарайю
Реализовать алгоритм Косарайю

Входные данные:
Граф задан вектором смежности int A[N][Smax]. Это п.5 в структурах данных в лекции. Отличие только в том, что вершины нумеруются от 0 а не от 1, и номера самой вершины первым столбцом в матрице не будет, будут только номера смежных вершин

Задание:
Реализовать алгоритм Косарайю, рекурсивный вариант, как он был дан в лекции
Если понадобится использование стека/очереди обязательно применение собственных структур данных из предыдущих занятий

Выходные данные:
Результат должен быть представлен в виде массива int[] component где элемент с номером вершины содержит номер компонента

Дополнительное задание 1
Реализовать итеративный поиск в глубину с сохранением состояния, что бы уже пройденные уровни повторно не проходились

Дополнительное задание 2
Реализовать поиск по критерию стоимости

ВАЖНО! При размещении ответа укажите, на каком языке вы выполнили ДЗ. Это поможет нам ускорить его проверку.
Тема 2: Топологическая сортировка
Студенты освоят, смогут реализовывать и применять топологическую сортировку.
3 апреля, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Алгоритм Демукрона
Реализовать алгоритм Демукрона

Граф задан вектором смежности int A[N][Smax]. Это п.5 в структурах данных в лекции. Отличие только в том, что вершины нумеруются от 0 а не от 1, и номера самой вершины первым столбцом в матрице не будет, будут только номера смежных вершин

Задание:
Реализовать алгоритм Демукрона
Если понадобится использование стека/очереди обязательно применение собственных структур данных из предыдущих занятий
Можно использовать стандартный массив [] встроенный в язык

Выходные данные:
Результат должен быть представлен в виде массива int[][] level где первый индекс - номер уровня, на каждом уровне массив, с номерами вершин, принадлежащих этому уровню

Дополнительное задание 1
Реализовать алгоритм Тарьяна

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

ВАЖНО! При размещении ответа укажите, на каком языке вы выполнили ДЗ. Это поможет нам ускорить его проверку.
Тема 3: Минимальные остовные деревья. Алгоритмы Крускала и Прима
Студенты освоят, смогут реализовывать и применять алгоритмы нахождения минимальных остовных деревьев.
6 апреля, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Реализовать алгоритм нахождения минимального остовного дерева
Реализовать алгоритм Краскала

Граф задан вектором смежности int A[N][Smax]. Это п.5 в структурах данных в лекции. Отличие только в том, что вершины нумеруются от 0 а не от 1, и номера самой вершины первым столбцом в матрице не будет, будут только номера смежных вершин

Задание:
Реализовать алгоритм Краскала
Структура Union-Find собственной реализации.
Если понадобится использование стека/очереди обязательно применение собственных структур данных из предыдущих занятий
Можно использовать стандартный массив [] встроенный в язык

Выходные данные:
Результат должен быть представлен в виде массива Edge[] edges где Edge - класс, содержащий пару вершин, которые соединяет это ребро
Edge
{
int v1;
int v2;
}
Для любителей компактного хранения можно упаковать в long два int-а :)
Тогда результат будет long[] edges

Дополнительное задание 1
Реализовать алгоритм Прима

Дополнительное задание 2
Реализовать алгоритм Борувки

ВАЖНО! При размещении ответа укажите, на каком языке вы выполнили ДЗ. Это поможет нам ускорить его проверку.
Тема 4: Heap manager, Garbage collector
реализовывать с нуля аллокатор и garbage collector
10 апреля, 20:00 — 21:30
Лектор: Михаил Горшков
Тема 5: Поиск кратчайшего пути в графе. Алгоритмы Дейкстры, Беллмана-Форда, Флойда-Уоршалла
Студенты освоят, смогут реализовывать и применять алгоритмы поиска кратчайшего пути в графе.
20 апреля, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Реализовать алгоритм Дейкстры
Реализовать классику всех времен и народов, алгоритм Дейкстры :)

Граф задан вектором смежности int A[N][Smax]. Это п.5 в структурах данных в лекции. Отличие только в том, что вершины нумеруются от 0 а не от 1, и номера самой вершины первым столбцом в матрице не будет, будут только номера смежных вершин

Задание:
Реализовать алгоритм Дейкстры
Если понадобится использование дерева/кучи обязательно применение собственных структур данных из предыдущих занятий
Можно использовать стандартный массив [] встроенный в язык

Выходные данные:
Результат должен быть представлен в виде массива Edge[] edges где Edge - класс, содержащий пару вершин, которые соединяет это ребро
Edge
{
int v1;
int v2;
}
Для любителей компактного хранения можно упаковать в long два int-а :)
Тогда результат будет long[] edges

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

Дополнительное задание 2
Реализовать алгоритм Флойда-Уоршалла или Беллама-Форда на выбор

ВАЖНО! При размещении ответа укажите, на каком языке вы выполнили ДЗ. Это поможет нам ускорить его проверку.
Тема 6: Алгоритмы Джонсона, А*, и способы решения задачи коммивояжера
Студенты освоят, смогут реализовывать и применять алгоритмы Джонсона, А* и ознакомятся со способами решения задачи коммивояжера.
24 апреля, 20:00 — 21:30
Лектор: Евгений Волосатов
Алгоритмы на строках
Тема 1: Алгоритм Бойера-Мура
написать медленный алгоритм поиска подстроки
использовать префиксы шаблона и суффиксы текста для оптимизации алгоритма
реализовать алгоритм Бойера-Мура
27 апреля, 20:00 — 21:30
Лектор: Евгений Волосатов
Тема 2: Алгоритм Кнута-Морриса-Пратта
работать по схеме конечного автомата;
составлять конечный автомат для шаблона поиска
вычислять значение префикс-функции
реализовать алгоритм КМП
8 мая, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Реализовать алгоритмы Бойера-Мура и Кнута-Морриса-Пратта
Цель: ВАЖНО! При размещении ответа укажите, на каком языке вы выполнили ДЗ. Это поможет нам ускорить его проверку.
Тема 3: Алгоритм Ахо-Корасика
Студенты освоят, смогут реализовывать и применять алгоритм Ахо-Корасика.
15 мая, 20:00 — 21:30
Лектор: Евгений Волосатов
Тема 4: Код Хаффмана, алгоритм Лемпела-Зива. Run-length encoding.
Будет разобран run-length encoding (RLE). Студенты освоят кодирование Хаффмана, алгоритм Лемпела-Зива.
18 мая, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Создать программу сжатия файлов на основе алгоритма RLE
Цель: 1. Написать функцию сжатия массива по алгоритму RLE - 2 байта 2. Написать программу для сжатия файлов - 2 байта 3. Написать программу для распаковки файлов - 2 байта При запуске программы без параметров она должна выводить краткую инструкцию, как её запускать для сжатие/распаковки файлов. 4. Реализовать улучшенный алгоритм RLE: сжатие и распаковку - 2 байта 5. Сравнить работу программы с разными типами файлов: текст, фото, аудио, zip-архив. 1 байт 6. Составить отчёт сравнения результата работы двух версий алгоритма с разными файлами. 1 байт
Тема 5: Шифрование данных, базовые принципы и алгоритмы.
Будут разобраны основные алгоритмы шифрования данных.
22 мая, 20:00 — 21:30
Лектор: Евгений Волосатов
Динамическое программирование
Тема 1: Кэширование
студенты смогут реализовывать с нуля различные алгоритмы кэширования
25 мая, 20:00 — 21:30
Лектор: Михаил Горшков
Тема 2: Динамическое программирование: задачи динамического программирования
Студенты освоят и смогут применять метод динамического программирования для решения практических задач.
29 мая, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Задачи на динамическое программирование
Цель: Четыре маленькие задачи. +4 балла Одна большая задача про сарай +6 баллов
Вероятностные алгоритмы и структуры данных
Рассматриваем и решаем задачи из области больших данных вероятностными методами
Тема 1: Фильтр Блума
Студенты освоят, смогут реализовывать и применять фильтр Блума.
1 июня, 20:00 — 21:30
Лектор: Михаил Горшков
Тема 2: Алгоритмы MinHash, SimHash
Студенты освоят, смогут реализовывать и применять алгоритмы MinHash, SimHash.
5 июня, 20:00 — 21:30
Лектор: Михаил Горшков
Тема 3: Алгоритмы HyperLogLog, Count-Min Sketch
Студенты освоят, смогут применять и реализовывать алгоритмы HyperLogLog и Count-Min Sketch.
8 июня, 20:00 — 21:30
Лектор: Михаил Горшков
Домашние задания: 1
1 Реализация вероятностного алгоритма
Цель: Результатом домашнего задания будет исследование либо реализация вероятностного алгоритма. Это тренирует навык применения и разработки вероятностных алгоритмов для решения рабочих задач.
Численные методы оптимизации
Тема 1: Поиск экстремума функции
Потск эстремума функции, основные методы. Многокритериальные задачи, область Поретто, свертка критериев.
15 июня, 20:00 — 21:30
Лектор: Евгений Волосатов
Тема 2: Нейронные сети. Алгоритм обратного распространения ошибки (backpropagation)
Будет рассмотрено устройство нейросетей, алгоритм backpropagation и подходы к созданию современных фреймворков для работы с нейросетями.
19 июня, 20:00 — 21:30
Лектор: Евгений Волосатов
Проектная работа
Заключительный месяц курса посвящен проектной работе. Свой проект — это то, что интересно писать слушателю. То, что можно создать на основе знаний, полученных на курсе. При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.
Тема 1: Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
22 июня, 20:00 — 21:30
Лектор: Евгений Волосатов
Домашние задания: 1
1 Проектная работа
Тема 2: Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
26 июня, 20:00 — 21:30
Лектор: Евгений Волосатов
Тема 3: Защита проектных работ
защитить проект и получить рекомендации экспертов.
29 июня, 20:00 — 21:30
Лектор: Евгений Волосатов
Тема 4: Подведение итогов курса
узнать, как получить сертификат об окончании курса, как взаимодействовать после окончания курса с OTUS и преподавателями, какие вакансии и позиции есть для выпускников (опционально - в России и за рубежом) и на какие компании стоит обратить внимание.
3 июля, 20:00 — 21:30
Лектор: Евгений Волосатов
Выпускной проект
В рамках курса предусмотрена защита проекта. Это отдельная работа, на выполнение которой отводится последний месяц обучения. Проект включает в себя имплементацию сложного алгоритма и/или сложной структуры данных. При подготовке проектной работы студент может рассчитывать на консультации преподавателя и его экспертные советы. Примеры тем выпускного проекта:


  • написать кастомную хэш-таблицу

  • реализовать свой менеджер памяти с garbage collector

  • реализовать B-tree индекс для СУБД

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

Прошедшие открытые вебинары по курсу
Открытый вебинар — это настоящее занятие в режиме он-лайн с преподавателем курса, которое позволяет посмотреть, как проходит процесс обучения. В ходе занятия слушатели имеют возможность задать вопросы и получить знания по реальным практическим кейсам.
Дерево отрезков: просто и быстро
Евгений Волосатов
День открытых дверей
22 января в 20:00
Для доступа к прошедшим мероприятиям необходимо пройти входное тестирование
Возможность пройти вступительное тестирование повторно появится только через 2 недели
Результаты тестирования будут отправлены вам на e-mail, указанный при регистрации.
Тест рассчитан на 30 минут, после начала тестирования отложить тестирование не получится!
Пройти вступительное тестирование
После обучения вы

  • получите материалы по всем пройденным занятиям (видеозаписи вебинаров, выполненные домашние задания, выпускной проект)

  • сможете писать рациональный и хорошо структурированный код

  • получите сертификат об окончании курса

  • приобретёте навыки работы с алгоритмами и структурами данных, которые необходимы при реализации сложных проектов в крупных компаниях

  • получите приглашение пройти собеседование в компаниях-партнёрах (в случае успешного обучения)

Дата выдачи сертификата: 3 ноября 2020 года
Ваш сертификат

онлайн-образование

Сертификат №0001

Константин Константинопольский

Успешно закончил курс «Алгоритмы для разработчиков»
Выполнено практических заданий: 16 из 16

Общество с ограниченной ответственностью “Отус Онлайн-Образование”

Город:
Москва

Генеральный директор ООО “Отус Онлайн-Образование”
Виталий Чибриков

Лицензия на осуществление образовательной деятельности
№ 039825 от 28 декабря 2018 года.

онлайн-образование

Сертификат №0001

Константин Константинопольский

Успешно закончил курс «Алгоритмы для разработчиков»
Выполнено практических заданий: 16 из 16

Общество с ограниченной ответственностью “Отус Онлайн-Образование”

Город:
Москва

Генеральный директор ООО “Отус Онлайн-Образование”
Виталий Чибриков

Лицензия на осуществление образовательной деятельности
№ 039825 от 28 декабря 2018 года.
Общая стоимость
60 000 ₽ 55 000 ₽
В месяц: 12 500 ₽
В кредит: ₽ в месяц
Продолжительность
5 месяцев
Начало занятий
29 апреля