Алгоритмы и эффективные вычисления

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

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

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

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

Для кого

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

Для успешного прохождения программы необходимы знакомство с одним из распространённых языков программирования (C++, Java, Python, Octave, Haskell) и базовые знания математики: доказательство от противного, доказательство по индукции, логарифм, экспонента.

Вступительный экзамен

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

Записаться на экзамен

Курсы программы

Алгоритмы: теория и практика. Методы
  • Жадные алгоритмы
  • «Разделяй и властвуй»
  • Динамическое программирование
Теоретическая информатика: сложность вычислений
  • Разрешающие деревья
  • Схемы из функциональных элементов
  • Пропозициональная логика
  • Переборные задачи и их сложность
  • Класс PSPACE
  • Ускорение перебора
Алгоритмы: теория и практика. Структуры данных
  • Базовые структуры данных
  • Очереди с приоритетом и системы непересекающихся множеств
  • Хеш-таблицы
  • Деревья поиска

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

Александр Куликов

Доктор физико-математических наук. Старший научный сотрудник ПОМИ РАН, координатор и преподаватель Computer Science центра и Computer Science клуба. Один из авторов специализаций по алгоритмам и дискретной математике на платформах Coursera и edX.

Александр Шень

Кандидат физико-математических наук. Научный сотрудник Лаборатории фундаментальной информатики в Монпелье. Автор учебника «Программирование: теоремы и задачи» и многих других популярных книг по математике и программированию.

Отзывы выпускников

Курс просто отличный. Две части, Александра Шеня и Александра Куликова, гармонично дополняют друг друга (и даже один раз пересекаются, когда оба лектора рассказывают в два голоса одну тему). Теоретический курс суперски прокачал мозги, а в практическом смысле — дал знания, как оценить сложность реализации придуманного алгоритма (время, память, количество логических элементов для схем), я начал НА САМОМ ДЕЛЕ понимать, что такое эквивалентность классов NP и P, что означает разрешимость (или нет) задачи, почему (и даже КАК) всегда можно написать квайн (программу, печатающую саму себя) и их "сонеты" для цепочек разных языков программирования. И далеко не только это. Практический курс разложил по полочкам мои прежние обрывочные сведения об алгоритмах. Теперь я могу осознанно подходить к их выбору, исходя из имеющейся задачи, а не вслепую пробовать один за другим. Благодаря тому, что многие из них я реализовал сам с нуля, я имею детальное представление об их внутреннем устройстве, а это сильно помогает правильно использовать готовые библиотечные реализации. Отдельно хочу сказать про Code Review. Советы и рекомендации, которые дают проверяющие, реально на вес золота. Это те знания, получить которые иначе можно только на собственном (зачастую отрицательном) опыте. Здесь же на примере твоего собственного кода проверяющий рассказывает, к каким нежелательным последствиям и почему может привести применённое тобою решение, и как можно исправить код, чтобы последствия были минимальны. А ещё более бесценны советы, как можно сделать код проще, понятнее, или более поддающимся повторному использованию. Спасибо

Андрей Белецкий

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

Дмитрий Минченко

Теоретическая информатика — большое удовольствие от решения задач. Алгоритмы — четкая и ясная база с практическими задачами для закрепления.

Валерий Байбурин

Два направления программы, теоретическая информатика и алгоритмы, пересекаются, дополняют друг друга и формируют целостную картину. Главные, на мой взгляд, достоинства программы — структура и подача материала по курсу алгоритмов и задачи на код ревью. Есть ощущение, что после этих курсов я «подрос», многое из программы уже пригодилось на работе. Большое спасибо создателям!

Андрей Рыжиков

Вступительный экзамен

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

Записаться на экзамен