• A
  • A
  • A
  • АБВ
  • АБВ
  • АБВ
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

Содержание программы

1 курс

1 курс
  Осенний семестр Весенний семестр
Дисциплины математического цикла

Введение в математический анализ
(5 зачетных единиц)

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

Математический анализ
(5 зачетных единиц)

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

Основы алгебры
(5 зачетных единиц)

Алгебра - часть математики, исследующая математические объекты через заданные на них операции. В этом курсе внимание будет уделено базовым алгебраическим структурам - группам и кольцам. Будут разобраны ситуации, когда появляются такие структуры. Также будут рассмотрены применения этих понятий к решению различных алгоритмических задач, задач теории чисел и комбинаторики.

Линейная алгебра
(5 зачетных единиц)

Линейная алгебра - это один из наиболее востребованных и наиболее разработанных разделов алгебры. Он посвящён, прежде всего, вопросам, связанным с решением систем линейных уравнений и способам, которые позволяют свести различные задачи к решению таких систем. Центральными определениями курса будут определения векторного пространства и линейного отображения. Будут разобраны понятия ранга, собственного числа, собственного вектора и квадратичной формы, а также примеры задач, в решении которых помогают указанные понятия.

Дискретная математика
(2 зачетные единицы)

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

Основы математической логики
(2 зачетные единицы)

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

Алгоритмы и структуры данных - I
(4 зачетные единицы)

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

Алгоритмы и структуры данных - II
(4 зачетные единицы)

Этот курс продолжает изучение стандартных алгоритмов и структур данных. Изучаются и доказываются алгоритмы на графах, жадные алгоритмы (поиска кратчайшего пути, минимального остовного дерева, эйлерова/гамильтонова путей) и более мощные структуры данных (самобалансирующиеся деревья поиска, персистентные структуры данных, link-cut-tree). Все темы также требуют решения теоретических задач на разработку алгоритмов и сдачи реализованных программ через автоматическую систему проверки.

Парадигмы языков программирования
(4 зачетные единицы)

Разные подходы к написанию и проектированию программ (парадигмы) и разные языки программированию дают разные компромиссы между скоростью работы, скоростью написания кода, читаемостью и возможностью расширения. В некоторых задачах может быть разумно комбинировать разные парадигмы. Этот обзорный курс демонстрирует на практике отличия между процедурным, функциональным и объектно-ориентированным программированием. Слушатели знакомятся с языками Python, Haskell, Rust, SQL и базовыми техническими моментами: рецензирование кода (code review), автоматическое тестирование, системы контроля версий, состояние гонки, вычисления с вещественными числами.

Работа в UNIX
(3 зачетные единицы)

UNIX-подобные операционные системы очень популярны среди программистов и компаний. Курс на примере семейства систем GNU/Linux знакомит слушателей с командной строкой и стандартными утилитами, регулярными выражениями, интерпретатором Bash, структурой файловой системы, пользователей и разрешений в UNIX-подобных системах, а также процессом загрузки Linux. На практиках слушателям потребуется продемонстрировать умение работать в UNIX-подобной ОС и выполнять стандартные для программистов задачи из командной строки.

Язык программирования С++ - I
(4 зачетные единицы)

C++ — один из “классических” языков в промышленной разработке. Этот язык даёт программисту много свободы и ответственности, он стабильно применяется при разработке высокопроизводительных систем, системном программировании и в других областях. В курсе рассматриваются особенности ручного управления памятью в программах, а также основные возможности C++: const-correctness, умные указатели, объектно-ориентированное программирование, перегрузка операторов, виртуальные функции. На практиках требуется реализовать небольшие проекты и пройти рецензирование кода.

Язык программирования С++ - II
(4 зачетные единицы)

Этот курс продолжает изучение языка C++ и покрывает более глубокие и современные возможности: шаблоны, исключения и идиому RAII, стандартную библиотеку шаблонов (STL), внутреннюю реализацию итераторов, способы приведения типов, RTTI, move-семантику, а также появившийся в C++11 синтаксис и библиотечные функции. На практиках требуется написать свою реализацию нескольких нетривиальных библиотек и пройти рецензирование кода.
Проектная работа   Проект (C++)
(3 зачетные единицы)

2 курс

2 курс
  Осенний семестр Весенний семестр
Дисциплины математического цикла

Математический анализ - II
(3 зачетные единицы)

Этот курс продолжает изучение классического математического анализа: экстремумы функций нескольких переменных, теория меры, интеграл Лебега и его связь с интегралом Римана, интегралы с параметром, криволинейные интегралы, дифференциальные формы 1-го порядка, формула Грина. В части, посвященной рядам Фурье, рассматривается общая теория ортогональных рядов в гильбертовом пространстве, а также изучаются вопросы сходимости тригонометрических рядов Фурье и приближения с их помощью вещественных функций (в том числе и разрывных).

Теория функций комплексного переменного
(3 зачетные единицы)

В курсе рассматривается теория и свойства функций комплексной переменной, сильно отличающиеся от вещественного случая. Излагается теория вычетов и ее многочисленные применения (для вычисления несобственных интегралов, для работы с производящими функциями и нахождением асимптотики их коэффициентов). В части посвященной рядам Фурье рассматривается общая теория ортогональных рядов в гильбертовом пространстве, а также изучаются вопросы сходимости тригонометрических рядов Фурье и приближения с их помощью вещественных функций (в том числе и разрывных).

Алгебраические структуры
(3 зачетные единицы)

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

Теория вероятности
(3 зачетные единицы)

В курсе рассказывается о базовых понятиях и теоремах теории вероятностей. В нем сначала излагается классическая версия теории вероятностей, в которой в большинстве своем используются довольно элементарные методы и доказательства. Эта часть сопровождается приложениями к комбинаторике и теории чисел. Затем излагается более формальный аксиоматический подход к теории вероятностей. Обсуждаются случайные события и их независимость, дискретные и непрерывные случайные величины, их распределения и функции распределения, производящие и характеристические функции, а также их свойства, связанные с независимостью. Вводятся понятия математического ожидания, дисперсии и моментов случайной величины. Рассматриваются различные виды сходимости случайных величин и различные версии закона больших чисел и предельных теорем. Конец курса посвящен дискретным случайным процессам.

Теория графов
(3 зачетные единицы)

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

Комбинаторика
(2 зачетные единицы)

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

Алгоритмы и структуры данных - III
(3 зачетные единицы)

В этом курсе продолжается изучение алгоритмов: графовых (паросочетания, поток минимальной стоимости), строковых (полиномиальное хэширование, бор, z-функция, суффиксные структуры данных, алгоритм Укконена), а также основы теории игр (функция Шпрага-Гранди) и теории чисел (алгоритм Гаусса, арифметика произвольной точности с использованием быстрого преобразования Фурье). Все алгоритмы по-прежнему требуется применить в задачах, реализовать в виде программы и сдать в проверяющую систему.

Теория алгоритмов
(3 зачетные единицы)

Курс знакомит слушателей с такими основополагающими понятиями, как вычислимость, разрешимость, машина Тьюринга, базовыми классами вычислительной сложности. В курсе рассматриваются такие классы вычислительной сложности, как P, NP, BPP, RP, PSPACE и другие. Изучается структура и взаимосвязь данных классов, а также наличие полных задач (неформально говоря наиболее вычислительно сложных задач) в данных классах.

Архитектура компьютера
(1 зачетная единица)

Это вводный курс в то, как устроены компьютеры на низком уровне: логические схемы (логические гейты, ячейки памяти, мультиплексор) и язык Verilog для их описания, основные компоненты процессоров, язык ассемблера (регистры, стэк, прерывания, чтение документации), структура операционных систем, основные термины (процессы, потоки, межпроцессное взаимодействие). На практиках может встретиться создание схем на Verilog, программирование микроконтроллеров архитектуры AVR, использование спецификации multiboot для написания своего загрузчика.

Операционные системы
(2 зачетные единицы)

Детально разбираются основные механизмы операционных систем на процессорах Intel: прерывания, процесс загрузки, управление памятью (страничная адресация, buddy и SLAB аллокаторы), вытесняющая многозадачность и переключение контекста, низкоуровневые средства синхронизации потоков, реализация пространства пользователя (разделение ring 0 и ring 3, реализация системных вызовов, процессы). К концу курса студент напишет свою собственную операционную систему, начав всего лишь с загрузчика.

Язык программирования Java - I
(3 зачетные единицы)

Java — один из “классических” объектно-ориентированных языков с автоматическим управлением памяти, используемых в промышленной разработке. Для виртуальной машины Java существует огромное количество библиотек и дополнительных языков, которые несложно интегрировать друг с другом. Курс знакомит с объектно-ориентированным программированием в Java (классы, интерфейсы, абстрактные классы, модификаторы доступа), системой типов Java (примитивные/ссылочные типы, generics), исключениями, библиотеками ввода-вывода, коллекциями, потоками (streams), рефлексией и возможностями Java 8.

Язык программирования Java - II
(2 зачетные единицы)

В этом курсе продолжается изучение языка программирования Java. Изучается многопоточное программирование (в том числе при помощи fork-join framework), модель памяти виртуальной машины Java, асинхронная работа с файлами и сетью при помощи NIO, а также механизм аннотаций. На практиках предлагается написать несколько проектов с используемых изученных технологий и пройти рецензирование кода.

Функциональное программирование
(3 зачетные единицы)

Функциональное программирование — отдельная парадигма, элементы которой всё чаще используются в современных языках программирования. Иногда оказывается, что написанные в функциональном стиле программы более точно выражают намерения программиста. Их корректность может быть легче доказывать и проверять, даже если они написаны на императивном языке. В рамках курса разбираются как теоретические основы функционального программирования (лямбда-исчисление, автоматический вывод типов Хиндли-Милнера), так и конкретные реализации этих идей в языке программирования Haskell (использование свёрток, иерархия классов типов от функторов до монад, трансформеры монад). Пример практического задания: реализация вывода типов Хиндли-Милнера на языке Haskell.

Теория формальных языков
(3 зачетные единицы)

Теория формальных языков, помимо прочего, позволяет описывать некоторые структурированные данные (например, исходные коды программ) с математической строгостью. Это необходимо обработки таких данных и создания своих собственных форматов и языков программирования. Курс рассказывает о способах описания формальных языков (конечные автоматы, регулярные выражения, грамматики, нормальная форма Хомского, иерархия Хомского) и теоретических результатах (теорема Клини, леммы о разрастании, эквивалентность неограниченных грамматик машинам Тьюринга). На практиках требуется решать теоретические задачи.
Проектная работа Проект (Android)
(2 зачетные единицы)
Проект (Android)
(1 зачетная единица)
Майнор Майнор (5 зачетных единиц) Майнор (5 зачетных единиц)

3 курс (осенний семестр)

  Дисциплины Количество зачетных единиц
Дисциплины математического цикла

Дифференциальные уравнения

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

Математическая статистика

Математическая статистика — раздел математики, изучающий методы обработки данных, и один из основных разделов науки о данных. В курсе будут рассмотрены следующие темы: оценивание параметров, проверка гипотез, регрессионный анализ. Результатом освоения дисциплины будет понимание принципов работы методов статистического анализа данных и умение использовать методы в анализе реальных данных.
3
Дисциплины проф. цикла

Разработка программного обеспечения

Промышленная (коммерческая) разработка программного обеспечения состоит из большого числа самых разных видов деятельности, и написание кода -- лишь одна из них. В курсе мы вкратце рассмотрим все составляющие успешного проекта от анализа требований и проектирования пользовательского интерфейса и до построения наиболее подходящего под проект и команду процесса разработки. Также будут рассмотрены и некоторые технические практики: непрерывная интеграция и непрывная поставкя ПО (CI/CD), рефакторинг, управление качеством ПО и некоторые другие.
3
Проектная работа НИР 2
Научно-исследовательские семинары 2
Майнор Майнор 5
Дисциплины по выбору
Дисциплины Количество зачетных единиц Машинное обучение и анализ данных Разработка программного обеспечения Языки программирования

Методы оптимизации

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

Компиляторы

Данный курс представляет собой начальное введение в область языков программирования, компиляторов и других языковых инструментов. Будут сформулированы некоторые основные понятия и подходы в данной области, такие, как операционная семантика языков программирования, промежуточное представление программ, интерпретация, преобразования программ и т.д., и показано, как эти понятия и подходы решают важные и интересные практические задачи. Предполагается, что слушатели в процессе выполнения заданий к концу курса реализуют полноценный компилятор в машинный код для простого, но вполне функционального языка императивного программирования, содержащего выражения, присваивания, конструкции управления, функции и динамические структуры данных. В качестве основного инструмента в рамках курса будет использована cреда программирования OCaml.
4     +

Базы данных

Реляционные базы данных были и остаются самым популярным средством хранения информации со сложной структурой, а принципы, лежащие в основе реляционных СУБД, широко применяются во многих областях информационных технологий. В этом курсе рассматриваются теоретические основы функционирования реляционных систем и даётся практическая подготовка по проектированию и использованию реляционных баз данных в прикладных приложениях.
4 + +  
Программирование в ядре Linux 4   Рекомендованный курс  

Альтернативные языки программирования для JVM

В результате освоения дисциплины студент должен: знать различные языки для JVM; уметь создавать программы на Scala, Groovy, Kotlin; владеть инструментальными средствами, для написания обобщеных программ на различных языках для JVM.
4   + +
Программирование в ROS 4   Рекомендованный курс  

Дополнительные главы алгоритмов и структур данных

Данная дисциплина направлена на овладение продвинутыми алгоритмами решения различных задач. Существенное внимание уделяется вопросам, связанным с вероятностными алгоритмами и алгоритмами для NP-трудных задач.
4 Рекомендованный курс    

Теория сложности

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

3 курс (весенний семестр)

  Дисциплины Количество зачетных единиц
Дисциплины профессионального цикла  

Software Design

Большая часть программ, за которые люди готовы платить деньги, весьма сложна. Их уже не получается создавать "как придётся", в ходе их создания требуется принимать множество решений, многие из которых могут вступать в противоречия друг с другом, сильно затягивая и усложняя процесс разработки. Данный курс посвящён проектированию и архитектуре программного обеспечения. Что такое вообще архитектура и как она себя проявляет на разных этапах жизненного цикла ПО? Какие есть подходы к моделированию различных аспектов программного обеспечения? Что такое архитектурный шаблон и стиль, какие они бывают и для чего могут быть полезны на практике? В курсе также разбираются примеры архитектуры существующих открытых проектов.
3

Введение в машинное обучение

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

Параллельные и распределенные вычисления

Высокопроизводительные вычисления (high performace computing) - область программной инженерии, позволяющая удовлетворять такие важные для многих классов систем требования, как скорость обработки данных, временя отклика и масштабируемость. В курсе делается акцент на комплексное умение с использованием различных технических и архитектурных решений уметь проектировать как системы обработки больших объёмов данных, так и системы, близкие к жёсткому реальному времени. Теоретическая подготовка в области неблокирующих алгоритмов, теории параллельного программирования и широкий спектр рассматриваемых технологий анализа и повышения производительности, от простого мнгопоточного кода до применения транзакционной памяти, позволяет студентам применять полученные знания в прикладных работах по другим дисциплинам. Практическая часть курса затрагивает наиболее применимые в современном программировании шаблоны и подходы к реализации высокопроизводительных приложений.
4
Проектная работа НИР 3
Научно-исследовательские семинары 2
Soft skills & minor Майнор 5

 

 

Дисциплины по выбору
Дисциплины Количество зачетных единиц Машинное обучение и анализ данных Разработка программного обеспечения Языки программирования

Численные методы

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

Технологии компьютерных сетей

Целью освоения дисциплины является получение представления об архитектуре компьютерных систем, вычислительных сетях, их устройстве и проектировании как самостоятельной инженерной дисциплины, а также их типичных применениях. Также в рамках этой дисциплины студенты получат представление об основных методологиях надежного и эффективного хранения данных с упором на хранение данных в IT инфраструктурах средних и крупных организаций. Слушатели курса знакомятся с основными применяемыми технологиями, процессами, программными и аппаратными средствами. Программа курса также включает в себя знакомство с технологиями виртуализации, облачными технологиями, принципами организации безопасного хранения и принципами управления хранением.
4   +  

Типы в языках программирования

Системы типов являются неотъемлемой частью большинства современных языков программирования. Они обеспечивают безопасное взаимодействие различных частей программ, позволяя задавать спецификации, выражать инварианты и контролировать их сохранение. В рамках курса мы познакомимся с алгоритмами вывода и проверки типов для широкого класса типовых формализмов, включающих полиморфизм, наследование (подтипизацию), операторы над типами, рекурсивные и зависимые типы. Для каждой из систем мы обсудим минимальное количество типовых аннотаций в программе, необходимых для того, чтобы задачи проверки и вывода типов были бы алгоритмически разрешимыми.
4     +

Семантики языков программирования

Язык программирования определяется его семантикой, которая по программе на этом языке определяет её значение, а именно что программа вычисляет. Формальное описание семантики языка нужно для возможности корректной реализации компилятора или интерпретатора, а также точных рассуждений о поведении программы. В курсе будут рассмотрены семантики большого и малого шагов, аксиоматическая семантика, и др., а также семантики реалистичной многопоточности (слабые модели памяти). На практических занятиях студенты курса выполнят формализации этих семантик и их свойств в системе интерактивного доказательства теорем Coq.
4     +

Криптографические протоколы

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

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

Курс будет посвящен одному из направлений построения эффективных алгоритмов для NP-трудных задач, а именно, построению FPT-алгоритмов (fixed paramater tractable). Неформально говоря, NP-трудные задачи, это те задачи, для которых неизвестны алгоритмы, работающие ''быстро'' на любых входных данных. К сожалению, огромное количество задач, возникающих в приложениях, являются NP-трудными. Поэтому и было разработано несколько подходов, что же делать, если поставленная задача оказалась NP-трудной. По сравнению с другими направлениями, такими как построение приближенных алгоритмов, эвристик и точных алгоритмов, построение FPT алгоритмов - достаточно новое направление, но при этом уже завоевавшее достаточную популярность. В курсе будет дан обзор идей и методов, использующихся при построении и анализе FPT алгоритмов, а также связь FPT алгоритмов с эвристическими, приближенными и точными алгоритмами.
4   +  

Обучение с подкреплением

Обучение с подкреплением - это комплекс методов обучения различных агентных систем. Успехи обучения с подкреплением можно наблюдать во многих областях науки и индустрии: робототехнике, беспилотном транспорте, игровых системах. В курсе будут рассмотрены основные типы алгоритмов обучения с подкреплением, их принципы работы. Помимо этого студенты получат практические навыки по вышеупомянутым областям применения.
4 +    
Контейнерная виртуализация 4   Рекомендованный курс  

Тестирование ПО

Тестирование ПО является неотъемлемой частью процесса разработки программного обеспечения. Чем больше и сложении система, чем выше "цена" ошибки и тем сложнее её испраление в готовом продукте. В курсе будут рассмотрены основные техники тестирования и основные его виды. Студенты так же получат практические навыки по проектированию тестов и их автоматизации.
4   + Рекомендованный курс

Теория информации

Курс посвящен изучению различных подходов к определению понятия „количество информации“. В курсе рассматриваются три подхода: комбинаторный (информация по Хартли), вероятностный (энтропия Шеннона) и алгоритмический (Колмогоровская сложность). Кроме этого, в курсе рассказывается про применения аппарата теории информации в различных областях компьютерных наук: в криптографии, в коммуникационной сложности, в теории кодирования, в теории конечных автоматов, в теории сложности вычислений и некоторых других.
4 +   +

4 курс (осенний семестр)

  Дисциплины Количество зачетных единиц
Дисциплины проф. цикла

Web-поиск и ранжирование

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

 

 

Курсы по выбору
Дисциплины Количество зачетных единиц Машинное обучение и анализ данных Разработка программного обеспечения Языки программирования

Метавычисления

Метавычисления — это раздел программирования, посвященный разработке методов анализа и преобразования программ за счет реализации конструктивных метасистем (метапрограмм) над программами. В метавычисления в первую очередь включают теорию суперкомпиляции и близкие методы и средства. Студенты получат представление об основных принципах метавычислений и суперкомпиляции, научатся применять их для реализации частичных вычислителей и суперкомпиляторов.
4     +

Deep Learning

Глубинное обучение - популярная область, в которой используются нейронные сети сложной архитектуры. Такие системы дают лучшие результаты в таких областях как обработка изображений и видео, звука и текста. В курсе будут рассмотрены основные типы архитектур, принципы работы и обучения глубоких нейронных сетей. Помимо этого студенты получат практические навыки по вышеупомянутым областям применения.
4 +    

Вычислительная геометрия - 1

Вычислительная геометрия -- это алгоритмы и структуры данных, "работающие" в геометрическом пространстве. Вычислительная геометрия является одной из базовых дисциплин для компьютерных игр, CAD, картографии, робототехники и т.д. Во вводном курсе вычислительной геометрии будут рассмотрены базовые алгоритмы и структуры данных. Практическая самостоятельная работа организована на платформе проведения соревнований по программированию (Яндекс.Контест).
4   Рекомендованный курс  

Построение баз данных

В данном курсе изучается устройство различных типов СУБД, использующих различные модели данных. На занятиях мы рассмотрим архитектуры, компоненты и алгоритмы, применяющиеся в этих СУБД. Особое внимание будет уделено обработке запросов. В курсе будут затронуты реляционные системы (как централизованные, так и распределенные), колоночные СУБД, системы для обработки слабоструктурированных данных (на примере XML СУБД), объектные СУБД, многомерное индексирование и настройка физического уровня. На практических занятиях мы будем строить исполнитель запросов реляционной СУБД. Слушателям курса будет выдан базовый прототип и дан доступ в систему автоматического тестирования. От студентов ожидается знакомство с базами данных, умение программировать на языке C++ и опыт работы в unix-подобных системах.
4 Рекомендованный курс +  

Анализ программ

Данный курс познакомит вас с такой областью, как статический анализ программ --- группой подходов, позволяющих извлекать из программ определенные знания об их поведении без необходимости непосредственного запуска. Анализы подобного рода являются одними из ключевых компонентов таких инструментов, как компиляторы и IDE. Кроме базовых теоретических знаний об анализе программ, студенты получат практический опыт разработки статических анализов.
4     +

Графические интерфейсы

Проектирование систем с графическим интерфейсом –– это исследование, планирование и разработка взаимодействия между человеком и машиной. Для программного обеспечения большинство интерфейсов имеют графическое представление, непосредственно с которым взаимодействует пользователь. Чтобы создавать такие системы, нужно четко понимать методологии проектирования и природу процесса, уметь подстраивать разработку под требуемую задачу. В курсе рассказываются основные подходы к исследованию предметной области и оценке интерфейсов, методологии проектирования и способы прототипирования, а также принципы и гайдлайны для современных платформ. На практике студенты выполняют собственный проект, цель которого пройти весь процесс проектирования системы от поиска проблемы до работающего прототипа.
4   +  

Обработка естественного языка

Методы обработки естественного языка (ОЕЯ) находят сегодня применение во многих областях. В курсе рассматриваются базовые инструменты ОЕЯ -- морфологический и синтаксический анализ, языковые модели и лексическая семантика, а также популярные приложения — информационный и вопросно-ответный поиск, автоматическое реферирование, анализ тональности, извлечение информации и машинный перевод. Домашние задания позволяют получить практические навыки работы с текстовыми данными.
4 +   Рекомендованный курс

Анализ изображений

4 +    

4 курс (весенний семестр)

  Дисциплины Количество зачетных единиц
Проектная работа Бакалаврская дипломная работа 9
Научно-исследовательские семинары 2

 

Дисциплины по выбору
Дисциплины Количество зачетных единиц Машинное обучение и анализ данных Разработка программного обеспечения Языки программирования

Логическое и реляционное программирование

Логическое и реляционное программирование реализуют подход, при котором задача описывается в декларативных терминах, а решение получается автоматизированно с примением специфических алгоритмов поиска. В рамках курса будут рассмотрены различные методы поиска решений, начиная с пропозиционального случая, метод резолюций, унификация, языки Пролог и миниКанрен, а также применение этих языков для решения различных задач.
4     +

Компьютерная графика

Компьютерное графика — дисциплина, которая объединяет в себе различные задачи построения и извлечения информации из изображений и видео, возникающие во множестве областей: от промышленности до кино. В курсе рассматриваются идеи и классические алгоритмы компьютерного зрения. Порядок изложения построен вокруг емкого примера — проблемы извлечения позиций камеры и 3D-структуры сцены из видео. Домашние задания представляют собой поэтапную реализацию приложения, решающего эту задачу.
4   +  

Мобильная разработка

Разработка мобильных приложений представляет собой одновременно интересную и сложную задачу из-за ограниченности ресурсов мобильных устройств, а также специфичности взаимодействия с пользователем. В рамках курса будут рассмотрены основные этапы проектирования, программирования, публикации и поддержки мобильных приложений. На практических занятиях студенты получат навыки разработки Android-приложений на языке Kotlin.
4   +  

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

Данная дисциплина направлена на овладение навыками создания программ на языках с зависимыми типами. Курс посвящён различным аспектам программирования на языке Idris: типы как сущности первого класса, функции на типах; зависимые типы и зависимое сопоставление с образцом; приёмы доказательства равенств, разрешимости и тотальности; выражение отношений средствами зависимых типов; вычисление эффектов
4     +

Криптография

Курс посвящён изучению теоретических оснований, на которые базируется надёжность криптографических протоколов. В курсе рассказывается, как построить надёжные криптографические системы на основе базовых криптографических примитивов таких, как односторонние функции или семейства односторонних перестановок с секретом, и как доказать их надёжность в предположении надёжности примитивов, на которых они построены.
4 Рекомендованный курс Рекомендованный курс Рекомендованный курс

Глубокое обучение с подкреплением

4 +