Алгоритмы для разработчиков: разработка и использование разнообразных алгоритмов и структур данных
Новогодняя распродажа!
Все курсы со скидкой 30%. Торопитесь!
Подробнее

Курсы

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

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

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

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

5 месяцев

Начало

27 января 2020 года

Занятия

Пн 20:00, Пт 20:00

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

60 000 ₽ 42 000 ₽

В месяц

15 000 ₽

В кредит:

15000 ₽ в месяц

Хочу дешевле
Общая стоимость
60 000 ₽ 42 000 ₽
В месяц: 15 000 ₽
В кредит: 42000 ₽
в месяц
Продолжительность
5 месяцев, 4 академ. часа в неделю
Пн 20:00, Пт 20:00
Начало занятий
27 января 2020 года
Что даст вам этот курс

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

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

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

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


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

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

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

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

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

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

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

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

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

Опыт разработки программного обеспечения с 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 года - архитектор направления Equation на ibm i в одном из крупнейших банков страны.

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

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

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

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

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

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

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

Преподаватель
Профессиональный программист. Преподаватель языка 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 году по специальности «Учитель профессии»

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

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

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

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

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

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

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

Матвей Калинин
Опыт разработки программного обеспечения с 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 года - архитектор направления Equation на ibm i в одном из крупнейших банков страны.

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

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

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

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

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

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

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

Преподаватель
Евгений Волосатов
Профессиональный программист. Преподаватель языка 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 году по специальности «Учитель профессии»

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

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

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

Во время обучения слушатель может задавать преподавателю уточняющие вопросы по материалам лекций, домашних заданий и выпускного проекта.
Программа обучения
Модуль 1
Введение в алгоритмы и структуры данных
Модуль 2
Сортировки
Модуль 3
Деревья
Модуль 4
Хеш-таблицы
Модуль 5
Графы
Модуль 6
Алгоритмы на строках
Модуль 7
Динамическое программирование
Модуль 8
Вероятностные алгоритмы и структуры данных
Модуль 9
Численные методы оптимизации
Модуль 10
Проектная работа
Введение в алгоритмы и структуры данных
Тема 1: Математика для разработчиков
освежить основные разделы математики, использующиеся в курсе "алгоритмы для разработчиков"
27 января, 20:00 — 21:30
Тема 2: Введение в алгоритмы, RAM-модель. Порядок роста функций.
Студенты ознакомятся с эмулятором RAM-машины, поймут состав элементарных операций и научатся оценивать сложность алгоритмов.
31 января, 20:00 — 21:30
Домашние задания: 1
1 Реализация алгоритма сортировки на RAM
Цель: 1. Написать на RAM алгоритм умножения двух целых неотрицательных чисел через сложение 2. Написать на RAM алгоритм деления двух целых неотрицательных чисел через вычитание 3. Написать на RAM алгоритм простой сортировки
Тема 3: Базовые структуры данных: массив, динамический массив, список, стек, очередь, очередь с приоритетами
Студенты ознакомятся с реализацией базовых структур данных, и научатся правильно выбирать структуру данных под задачу
3 февраля, 20:00 — 21:30
Домашние задания: 1
1 Динамические массивы, неполный массив, очередь с приоритетом.
Цель: Создание разных алгоритмов для реализации Динамического массива и сравнение их производительности. Создание приоритетной очереди или неполного массива.
Тема 4: Алгебраические алгоритмы: алгоритм Евклида, быстрое возведение в степень, решето Эратосфена, быстрое вычисление чисел Фибоначчи
Студенты ознакомятся с использованием и реализацией некоторых популярных алгебраических алгоритмов.
7 февраля, 20:00 — 21:30
Домашние задания: 1
1 НОД, Степень, Простые числа, Числа Фибоначчи.
Цель: Написать и сравнить разные алгоритмы нахождения наибольшего общего делителя, возведения числа в целую степень, поиска простых чисел и вычисления чисел фибоначчи.
Тема 5: Шахматное программирование
Студенты повторят все правила игры в шахматы, получат техническое задание по их кодированию.
10 февраля, 20:00 — 21:30
Домашние задания: 1
1 Система тестирования, Работа с битами, Генерация ходов.
Цель: Подготовить систему тестирования. Работа с битами на примере Bitboard. Парсинг, генерация FEN и выполнение хода. * Написать алгоритм генерации допустимых ходов.
Сортировки
Тема 1: Сортировка вставками, сортировка Шелла, сортировка выбором, пузырьковая сортировка
Студенты освоят алгоритмы сортировки вставками, выбором, пузырьком, сортировку Шелла. По окончании занятия студенты смогут реализовывать и правильно применять данные алгоритмы.
14 февраля, 20:00 — 21:30
Домашние задания: 1
1 Эффективная Shell-сортировка.
Цель: Реализовать алгоритм Shell-сортировки и проанализировать его эффективность.
Тема 2: Пирамидальная сортировка (heap sort)
студенты смогут реализовывать и применять пирамидальную сортировку
17 февраля, 20:00 — 21:30
Домашние задания: 1
1 Алгоритм HeapSort
Цель: Реализовать алгоритм пирамидальной сортировки и сравнить его эффективность с ShellSort.
Тема 3: Сортировка слиянием, timsort. Быстрая сортировка
Студенты освоят и смогут реализовать алгоритмы быстрой сортировки, сортировки слиянием и timsort.
21 февраля, 20:00 — 21:30
Домашние задания: 1
1 Отсортировать Миллиард чисел
Цель: Программа для сортировки файла, в котором записано миллиард целых 16-битовых чисел.
Тема 4: Сортировка за линейное время. Поиск порядковых статистик за линейное время.
Студенты освоят и смогут реализовать сортировку подсчетом, поразрядную сортировку, блочную сортировку.

Будет разобран научатся алгоритм для нахождения порядковых статистик за линейное время.
24 февраля, 20:00 — 21:30
Домашние задания: 1
1 Сортировка Миллиарда чисел за линейное время
Цель: Студенты смогут значительно быстрее отсортировать файл из прошлого занятия выбранным алгоритмом сортировки за линейное время.
Деревья
Тема 1: Двоичные деревья поиска, декартовы деревья, АВЛ-деревья
Студенты узнают, что такое дерево, двоичные дерево поиска и декартово дерево. Изучат структуры данных и алгоритмы, реализующие операции над ними.
28 февраля, 20:00 — 21:30
Домашние задания: 1
1 Двоичное дерево поиска, АВЛ и Декартово дерево
Цель: Создать двоичное дерево поиска, реализовать один из вариантов балансировки. Сравнить эффективность алгоритмов на случайных и упорядоченных данных.
Тема 2: Красно-черные деревья, расширяющиеся деревья, рандомизированные деревья
Студенты освоят и смогут применять красно-черные деревья, расширяющиеся деревья и рандомизированные деревья
2 марта, 20:00 — 21:30
Домашние задания: 1
1 Реализация красно-чёрного дерева, вставки и поиска
Цель: Рандомизированное, расширяющиеся и красно-чёрное дерево. Вставка, поиск и удаление элементов. Сравнение производительности.
Тема 3: B-деревья, B+-деревья. Деревья отрезков
Студенты освоят и смогут применять B-деревья и В+-деревья. Ознакомятся с деревьями отрезков.
6 марта, 20:00 — 21:30
Домашние задания: 1
1 Реализовать оптимальное дерево поиска
Реализовать оптимальное дерево поиска
- Алгоритм 1
- Алгоритм 2

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

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

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

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

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

1. Реализовать хеш-таблицу, использующую метод цепочек
- дополнительно: для хранения внутри цепочек при достижении значительного числа элементов (~32) заменять их на BST

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

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

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

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

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

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

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

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

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

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

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

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

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

ВАЖНО! При размещении ответа укажите, на каком языке вы выполнили ДЗ. Это поможет нам ускорить его проверку.
Тема 3: Минимальные остовные деревья. Алгоритмы Крускала и Прима
Студенты освоят, смогут реализовывать и применять алгоритмы нахождения минимальных остовных деревьев.
27 марта, 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'a на примере современных языков программирования.
30 марта, 20:00 — 21:30
Тема 5: Алгоритмы Джонсона, А*, и способы решения задачи коммивояжера
Студенты освоят, смогут реализовывать и применять алгоритмы Джонсона, А* и ознакомятся со способами решения задачи коммивояжера.
3 апреля, 20:00 — 21:30
Домашние задания: 1
1 Предложить вариант алгоритма для решения задачи
Задача: Нужно быстро строить кратчайший маршрут на большие расстояния по реальной дорожной сети, например от Лиссабона до Владивостока. Можно взять данные OSM.

Предложить вариант решения задачи, работающий быстрее, чем применение A* влоб.

Идею и описание алгоритма прислать в виде небольшой записки.

Дополнительное задание 1: Закодить алгоритм A*
Дополнительное задание 2: Закодить алгоритм Джонсона

ВАЖНО! При размещении ответа укажите, на каком языке вы выполнили ДЗ. Это поможет нам ускорить его проверку.
Тема 6: Поиск кратчайшего пути в графе. Алгоритмы Дейкстры, Беллмана-Форда, Флойда-Уоршалла
Студенты освоят, смогут реализовывать и применять алгоритмы поиска кратчайшего пути в графе.
6 апреля, 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
Реализовать алгоритм Флойда-Уоршалла или Беллама-Форда на выбор

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


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

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

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

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

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

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

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

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

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

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

Дата выдачи сертификата: 1 августа 2020 года
Ваш сертификат

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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