Какие алгоритмы используют социальные сети, чтобы осуществлять поиск по графу друзей? Как телекомпании выбирают, какую рекламу показывать, чтобы максимизировать прибыль? Как собрать геном из миллионов фрагментов? Как вычислить кратчайший путь из Нью-Йорка в Маунтин Вью в тысячи раз быстрее, чем это делают классические алгоритмы?

На Coursera появилась еще одна полезная специализация, созданная при участии Яндекса, — «Алгоритмы и структуры данных». Среди преподавателей не только представители Яндекса, Вышки, петербургского Computer Science Center, но и лекторы Калифорнийского университета в Сан-Диего, поэтому на этот раз все курсы специализации англоязычные.



Всего их пять, в конце слушателей ждет финальный проект. Один из них связан с биоинформатикой, второй — с поиском кратчайших путей в настоящих дорожных сетях и графах. В формате специализации все материалы доступны бесплатно. Оплата понадобится только в том случае, если вы захотите отправлять домашние задания на проверку и получить сертификат. Тогда вам нужно будет запрограммировать и сдать около 100 задач в тестирующую систему. Сделать это можно на C, C++, C#, Haskell, Java, JavaScript, Python2, Python3, Ruby и Scala.

Сегодня начинается первый курс — Algorithmic Toolbox. Под катом — программа специализации, информация о преподавателях и их мнение о том, кому она будет полезна и почему.

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


imageМихаил Левин. Яндекс, факультет компьютерных наук ВШЭ. Руководитель службы анализа больших данных Yandex Data Factory. Ведет курс «Алгоритмы и структуры данных» в Школе анализа данных, участвует в создании программы обучения на факультете Computer Science Вышки и Яндекса. Дважды завоевывал медали на ACM ICPC в составе команды МГУ им. М.В. Ломоносова. Многие на Хабре помнят лекцию Миши о том, как математика помогает Яндексу зарабатывать на рекламе.

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

От курса в ШАДе наша специализация отличается существенно меньшим порогом входа, меньшим количеством доказательств (они есть, но многие опциональны), набором тем, более сильным упором на практические примеры и современные приложения, наличием Capstone Project.

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


imageДэниэл Кейн, Калифорнийский университет в Сан-Диего. Доцент кафедры CSE и кафедры математики. Дэниэл преподает введение в алгоритмы. Cреди его научных интересов различные области математики и теории компьютерных наук, а большая часть работ касается теории чисел, вычислительной сложности и комбинаторики. Дэниэл Кейн окончил Гарвард, получил степень PhD в MIT.

Алгоритмы сейчас применяются повсеместно: в разработке софта, анализе генома, предсказании пробок, рекомендательных системах. Вы сталкиваетесь с алгоритмами, просто пользуясь интернетом. Их используют в любой области Computer Science, поэтому курс по алгоритмам и структурам данных — базовая часть любой программы по CS.


imageПавел Певзнер, Калифорнийский университет в Сан-Диего, Лаборатория алгоритмической биологии СПбАУ. Павел окончил Физтех, сейчас является профессором кафедры CSE в Сан-Диего, где в течение 12 лет преподает алгоритмы в биоинформатике. В 2011 году участвовал в основании Лаборатории алгоритмической биологии в Санкт-Петербурге, которая разработала платформу Rosalind. В знак признания его научных работ Павел получил звание действительного члена ACM и ISCB.

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


imageНил Родс, Калифорнийский университет в Сан-Диего, Google. Окончил UCSD, изучал Computer Science. В то время, когда он уже получал Ph.D., решил покинуть университет и заняться развитием собственной компании Palomar Software. Более десяти лет Нил Родс ведет в Сан-Диего курсы по алгоритмам, машинному обучению, дискретной математике, теории вычислимости. Он разрабатывал программы обучения для сотрудников Apple и Palm. Последние семь лет был разработчиком в Google.

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


imageАлександр Куликов, Математический институт им. В.А. Стеклова, Computer Science Center, Яндекс. Окончил матмех СПбГУ, защитил степень кандидата физико-математических наук в Математическом институте Стеклова. Научные интересы — алгоритмы для NP-трудных задач и схемная сложность. Александр руководит Computer Science Center в Санкт-Петербурге, на базе которого работает филиал Школы анализа данных Яндекса. Организовывает в России конференции и студенческие школы, посвященные компьютерным наукам.

Алгоритмы нужны во всех разделах Computer Science, поэтому вопросы о них всегда есть в техническом интервью. На Курсере уже есть два отличных курса по алгоритмам: один от Тима Рафгардена из Стэнфорда, второй — от Роберта Сэджвика из Принстона. Наша специализация выгодно отличается от них тем, что
в ней большой акцент делается на практическую составляющую. Все
изученные алгоритмы слушателям нужно будет реализовать так, чтобы они работали очень быстро даже на больших объёмах данных. Это даст и более глубокое понимание алгоритмов, и ценный опыт написания и отладки быстрых и надёжных программ. Второе преимущество нашей специализации более банальное — в ней больше материала.

Чтобы к ней приступить, нужно иметь базовую математическую подготовку (доказательство по индукции, доказательство от противного), опыт программирования (C, C++, C#, Haskell, Java, JavaScript, Python2, Python3, Ruby или Scala), представлять, как работать со списками/массивами и как устроена рекурсия. Специализация будет полезна любому программисту, который хочет стать более востребованным и научиться решать более сложные задачи.


Программа


Специализация состоит из пяти курсов и финального проекта.

1. Algorithmic Toolbox


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

2. Data Structures


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

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

Наконец, в курсе будут рассмотрены структуры данных, которые позволяют выполнять запросы типа «извлечь минимальный элемент» или «проверить, принадлежат ли два элемента одному множеству».

3. Algorithms on Graphs


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

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

4. Algorithms on Strings


С точки зрения Computer Science, весь окружающий нас текст — это строки. Чтобы создать эффективный поиск по нему, разработчики активно используют алгоритмы на строках. Они же применяются в медицине: с их помощью исследователи находят мутации в человеческом геноме, вызывающие те или иные болезни. Алгоритмам на строках будет посвящен четвертый курс нашей специализации.

5. Advanced Algorithms and Complexity


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

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

Комментарии (24)


  1. semmaxim
    16.05.2016 13:49
    +2

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


    1. MarisR
      16.05.2016 14:03
      +4

      Выбрать отдельный курс и Audit only


      1. Barlog
        16.05.2016 18:54

        А где там на сайте это «Audit only»?


        1. MarisR
          16.05.2016 19:28
          +1

          Course (link from post) — Enroll Now — Audit Only


    1. simx2rav
      16.05.2016 14:03

      Algorithmic Toolbox
      Data Structures
      Algorithms on Graphs
      Algorithms on Strings
      Advanced Algorithms and Complexity
      Assembling Genomes and Finding Disease-Causing Mutations


      1. simx2rav
        16.05.2016 14:50

        Сорри, первый комментарий на хабре, не вставились ссылки, хотя отображались в предпросмотре


    1. Zalina
      16.05.2016 14:13
      +4

      Все так, как пишет MarisR. Проставила в программе ссылки на каждый курс.


    1. vvl
      17.05.2016 08:54
      -1

      А почему хороший образовательный курс должен быть бесплатным?

      Недавно у меня был опыт создания короткого курса по разработке на Ionic, и объём работы превзошёл мои первоначальные ожидания в разы. Сделать хороший качественный курс — это действительно непросто. Если результат работы будет бесплатным, то значит ли это, что создатели курсов должны работать без денег, на энтузиазме? А если разработку качественного курса всё-таки стоит адекватно оплачивать, то как это согласуется с бесплатностью обучения?


      1. semmaxim
        17.05.2016 09:05
        +3

        1. В статье было написано «В формате специализации все материалы доступны бесплатно. Оплата понадобится только в том случае, если вы захотите отправлять домашние задания на проверку и получить сертификат.». Но то ли я такой тупой, то ли на сайте это просто нельзя включить для пакета курсов, но я расписался в своём бессилии и попросил помощи своим комментарием.
        2. Избалован. То же функциональное программирование на Scala я прошёл бесплатно и с проверкой заданий.
        3. Это ОЧЕНЬ дорого. Ползарплаты провинциального программиста. Больше 20 000 рублей! Мне такое в принципе не по карману. За какие-то онлайн-курсы.


  1. Vit1
    16.05.2016 14:04

    Здравствуйте. Это очень интересная специализация для меня, но, если честно, 426$ для меня дороговато. Осюда пара вопросов (Еще не проходил специализаций на курсере).

    1) Можно ли как то получить скинку на специализацию? (Где-то читал, что некоторые специализации позволяют получать скидки)
    2) Если оплачивать курсы поотдельности я могу в конце не платить за проект и сертификат?


    1. myrov_vlad
      16.05.2016 14:08
      +2

      Вы можете запросить мат.помощь от платформы
      http://prnt.sc/b4naik


      1. Vit1
        16.05.2016 15:49

        Спасибо!


  1. myrov_vlad
    16.05.2016 14:04
    +3

    Хорошая специализация, понятно читают и преподаватели (по крайней мере проф. Левин точно) постоянно отвечают в дискуссиях.

    Единственные недостатки:
    1) Иногда мало примеров для задач, особенно сложных.
    2) Иногда даже корректная реализация алгоритма может не проходить по времени (замечал это только с питоном, при использовании c++ проблем не было).
    3) Большой перерыв между курсами (после алгоритмов и структур данных около месяца до графов).

    Хотя в первой волне иду и недостатки исправлялись в процессе.


  1. JIghtuse
    16.05.2016 20:51
    +4

    Огорчило отсутствие проверки заданий на бесплатном курсе. Слова о "практичности" курса тут же угасают. Хорошо, что старые курсы пока доступны без ограничений.


    К счастью, вспомнил о курсе Александра Куликова на Stepic — насколько понял, он во многом похож на Algorithmic Toolbox (автор и заголовки те же) и действительно бесплатен.


    1. madfly
      17.05.2016 16:26
      +2

      Очень огорчает увлечённость курсеры специализациями. Я понимаю, что кушать хочется всем, но привлекательность ресурса стремительно падает.


  1. arch87
    17.05.2016 09:39

    Может кто знает, почему при заходе на Algorithmic Toolbox в залогиненом состоянии отдается 404?


    1. Burnout171
      17.05.2016 12:05

      Хочу добавить, что также не получается подписаться на специализацию, так как по нажатию на кнопку Enroll ничего не происходит.


    1. BernadetteWolowitz
      17.05.2016 13:27

      Такая же проблема. 404.


    1. clannad
      17.05.2016 13:27

      Вроде заработало.
      Кстати, в Андроид версии все отлично работает.


  1. Milfgard
    17.05.2016 10:29

    Я прошёл первые несколько недель там. Если коротко — математика из серии «Как нарисовать сову» (но очень помогает в плане воспоминаний университетского курса, реально круто для тех, кто уже всё знает), первые 4 недели вам читают текст презентации с экрана голосом роботов, в коде учат выходить из цикла по break.


  1. dagot32167
    17.05.2016 13:27

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


  1. DFooz
    17.05.2016 13:27

    за что мы платим при написании дипломного проекта? за то, что препод будет отвечать на вопросы, возникающие при написании?
    Т.е. как происходит написание диплома?


  1. Truefiber
    17.05.2016 15:22

    Понравились пока первые два курса. Правда, на Set with Range Sum хотелось плюнуть и забить )


    1. Truefiber
      17.05.2016 15:31

      Кстати, не поделитесь ли статистикой какой процент начавших специализацию отсеялся после первого и после второго курсов?