EMBER_CLI_FASTBOOT_BODY

Алгоритмы: теория и практика. Методы

Play
To watch this video please visit https://stepik.org/lesson//step/

About the course

Алгоритмы — важнейший раздел computer science и программирования. Благодаря развитию информационных технологий и алгоритмам мы сегодня имеем возможность быстро находить информацию в интернете (в частности, искать по картинкам), находить кратчайшие пути, анализировать геномы и так далее. Алгоритмы используются практически во всех областях computer science — в анализе изображений, в интернет-поиске, в машинном обучении, в биоинформатике, в криптографии, в кодировании, в сетях, в распределённых системах, в компиляторах.

В курсе будут подробно разобраны базовые алгоритмические методы: жадные алгоритмы, метод «разделяй и властвуй», динамическое программирование. Для всех алгоритмов будут математически строго доказаны корректность и оценки на время работы. Мы постарались изложить материал так, чтобы были понятны и сами алгоритмы, и то, как можно было бы догадаться до их основных идей. Помимо теоретических основ, будут рассказаны тонкости реализации алгоритмов на языках программирования C++, Java и Python. В частности, будет рассказано, какие есть общие практики написания кода, позволяющие минимизировать вероятность ошибки, как писать и тестировать код, где стоит использовать стандартные методы, а не изобретать колесо.

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

Instructors

  1. User picture
    Александр Куликов
    ПОМИ РАН, Computer Science Center

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

    Домашняя страница: http://logic.pdmi.ras.ru/~kulikov/

  2. User picture
    Сергей Лебедев
    JetBrains, Computer Science Center
    Исследователь в области биоинформатики и машинного обучения в JetBrains. Преподаватель курса по Python в Computer Science центре.
  3. User picture
    Алексей Левин
    Telegram, Computer Science Center
    Разработчик Telegram. Ревьюирование C++-кода студентов курса алгоритмов в Computer Science Center. Золотая медаль (2011) и Серебряная медаль (2010) на финале чемпионата мира по программированию ACM ICPC
  4. User picture
    Павел Маврин
    Университет ИТМО, Computer Science Center
    Преподаватель курса «Алгоритмы и структуры данных» в Университете ИТМО и Computer Science Center. Преподаватель школьного кружка олимпиадной информатики ИТМО. Чемпион мира ACM ICPC 2004.

Reviews

Anuar Taskynov May 24, 2018 link
Rated:  5
Отличный курс!
Rated:  5
Прекрасный курс
Rated:  5
прекрасный курс
Play
To watch this video please visit https://stepik.org/lesson//step/
4.9 All reviews

В курсе будут разобраны основные алгоритмические методы: жадные алгоритмы, «разделяй и властвуй», динамическое программирование. Помимо теоретических основ, будут рассмотрены тонкости реализации рассмотренных алгоритмов на языках C++, Java и Python. Слушателям будет предложено реализовать большинство разобранных в курсе алгоритмов. Решения будут проверяться тестирующей системой на тщательно подобранных тестах.

Workload:
5-7 часов в неделю
Expected time to complete:
37 hours
Language:
Русский
Certificate:
Computer Science Center
Certificate details
Certificate condition: 20 points
With distinction: 24 points

About the course

Алгоритмы — важнейший раздел computer science и программирования. Благодаря развитию информационных технологий и алгоритмам мы сегодня имеем возможность быстро находить информацию в интернете (в частности, искать по картинкам), находить кратчайшие пути, анализировать геномы и так далее. Алгоритмы используются практически во всех областях computer science — в анализе изображений, в интернет-поиске, в машинном обучении, в биоинформатике, в криптографии, в кодировании, в сетях, в распределённых системах, в компиляторах.

В курсе будут подробно разобраны базовые алгоритмические методы: жадные алгоритмы, метод «разделяй и властвуй», динамическое программирование. Для всех алгоритмов будут математически строго доказаны корректность и оценки на время работы. Мы постарались изложить материал так, чтобы были понятны и сами алгоритмы, и то, как можно было бы догадаться до их основных идей. Помимо теоретических основ, будут рассказаны тонкости реализации алгоритмов на языках программирования C++, Java и Python. В частности, будет рассказано, какие есть общие практики написания кода, позволяющие минимизировать вероятность ошибки, как писать и тестировать код, где стоит использовать стандартные методы, а не изобретать колесо.

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

Requirements

Знание одного из распространённых языков программирования (C++, Java, Python, Octave, Haskell) на базовом уровне: циклы, массивы, списки, очереди. Базовые знания математики: доказательство от противного, доказательство по индукции, логарифм, экспонента. Для освежения математических знаний рекомендуется прочесть брошюры Александра Шеня: «Математическая индукция», «Логарифм и экспонента» (тексты которых легко находятся в интернете).

Target audience

Студенты младших курсов и школьники.

This course is entirely free. All content is available now.