Перейти к основному содержимому

Алгоритмы. Часть 1


firstdigital

Почему важно изучать алгоритмы?

170 тыс руб

Средняя зарплата старшего специалиста по мобильной разработке в России

Для звезд

Доля мобильного трафика в мире: люди все чаще выходят в интернет именно со смартфонов

Для масштаба

Приложений в App Store и Google Play: как крупные компании, так и стартапы все чаще считают что приложение является важным каналом взаимодействия с клиентом и организации своей работы

Почему этот курс?

Учитесь у лучших

Освойте web-разработку, пройдя курс от инструкторов Гарвардского университета, который стабильно признается в топ-3 в сфере компьютерных наук в мире

#1 в мире

Самый популярный в мире курс по алгоритмам - более 1 млн студентов по всему миру: курс основал на одной из самых популярных в мире книг по алгоритмам

Рейтинг

Средняя оценка курса - 4.9 из 5

Авторы оригинального курса

Роберт Седжвик

Профессор компьютерных наук

Принстонский университет

Кевин Уэйн

Старший лектор по компьютерным наукам

Принстонский университет

Как проходит обучение

Видеолекции

Смотрите видеоуроки в любое время, на любом устройстве, занятия разбиты на 10-30 минутные уроки чтобы встроится в Ваше расписание

Практика

Закрепите новый материал выполнением практического задания с автопроверкой кода

Сообщество

Присоединяйтесь к онлайн форуму и чату для студентов для обсуждения заданий и обмена опытом

Сертификат

Получите сертификат об окончании курса, составьте из отдельных курсов свою IT-профессию

Трудоустройство

Скоро!

Откликайтесь на вакансии на закрытом сайте по поиску работы и эксклюзивные карьерные мероприятия, получите консультацию с занимающим позицию, которую Вы хочетите получить

Программа курса

6 недель

9 часов в неделю

Средний уровень

Ожидаемый уровень знаний: знание основ HTML, CSS и JavaScript на уровне курса CS50x и желательно CS50W

Неделя
Описание

1

Система непересекающихся множеств и анализ алгоритмов

Система непересекающихся множеств (Union-Find)

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

Анализ алгоритмов

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

2

Стеки и очереди, элементарные методы сортировки

Стеки и очереди

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

Элементарные методы сортировки

Мы познакомим вас с проблемой сортировки и интерфейсом Comparable Java. Мы изучим два элементарных метода сортировки - сортировку выбором и сортировку вставкой - а также разновидность одного из них — сортировку методом Шелла. Также мы рассмотрим два алгоритма для равномерного перемешивания массива. В завершение мы продемонстрируем применение сортировки на практике для вычисления выпуклой оболочки множества точек с помощью алгоритма сканирования Грэма.

3

Сортировка с объединением, быстрая сортировка

Сортировка с объединением (Mergesort)

Мы рассмотрим алгоритм сортировки с объединением и покажем, что он позволяет отсортировать любой массив из n элементов с максимальным количество сравнений n lg n. Также будет рассмотрена нерекурсивная версия этого алгоритма («снизу вверх»). Мы докажем, что любой алгоритм сортировки, основанный на сравнении, в худшем случае должен выполнить не менее n*lg(n) сравнений. Мы обсудим применение различных схем упорядочения сортируемых объектов и связанную с этим концепцию устойчивости.

Быстрая сортировка

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

4

Приоритизированные очереди, таблицы элементарных символов

Приоритизированные очереди

Мы рассмотрим тип данных «приоритизированная очередь» и его эффективную реализацию с помощью структуры данных «бинарная куча». Эта реализация также является основой эффективного алгоритма пирамидальной сортировки. В завершение мы познакомимся с применением приоритизированных очередей. В частности, мы смоделируем движение объекта, состоящего из n частиц, по законам упругих столкновений.

Таблицы элементарных символов

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

5

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

Сбалансированные деревья поиска

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

Применение БДП в геометрии

Мы начнем с поиска в 1-мерных и 2-мерных диапазонах, цель которого — найти все точки в заданных диапазонах. Для выполнения данной задачи мы рассмотрим k-мерные деревья — естественное обобщение БДП, ключи которого — точки на плоскости (или в пространствах более высокого порядка). Мы также рассмотрим проблемы пересечений, когда требуется найти все пересечения среди множества отрезков или прямоугольников.

6

Хэш-таблицы, области применения таблиц символов

Хэш-таблицы

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

Области применения таблиц символов

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

Что вы освоите в результате прохождения курса

Освоите основы проектирования базы данных, масштабирования, обеспечения безопасности и удобства пользования вэб-приложением

Освоите на продвинутом уровне JavaScript и его библиотеки, а также фреймворк React Native:

Реализовав 5 проектов, позволяющих всесторонне закрепить знания, Вы научитесь писать и использовать API, создавать интерактивные пользовательские интерфейсы и использовать облачные сервисы, такие как GitHub и Heroku

Приобретете знания и опыт в области принципов, языков и инструментов, которые позволят вам разрабатывать и развертывать приложения в интернете

Сертификат об успешном окончании курса

Все материалы курса доступны БЕСПЛАТНО

В случае если вы хотите получить сертификат об успешном прохождении курса, необходимо будет оплатить 4900 р в любой момент учебы

Пример сертификата:

Сертификат может иметь самостоятельную ценность

А может использоваться для зачета курса как части профессии Web-разработчик first digital, являющихся сильным сигналом для работодателей.

Внести в список