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

Алгоритмы, часть I

Алгоритмы, часть I


Instructors: Robert Sedgewick
Instructors
Instructor ratings
We asked all learners to give feedback on our instructors based on the quality of their teaching style.


Access provided by Pontificia Universidad Católica del Perú
13,618 already enrolled
84 reviews
84 reviews
Details to know
10 assignments
See how employees at top companies are mastering in-demand skills

There are 13 modules in this course
Введение в алгоритмы, часть I.
What's included
1 video2 readings
1 video• Total 9 minutes
- Введение в курс• 9 minutes
2 readings• Total 1 minute
- Введение в алгоритмы, часть I• 1 minute
- Слайды к лекциям• 0 minutes
Мы демонстрируем наш базовый подход к разработке и анализу алгоритмов через рассмотрение проблемы динамической связности. Мы представляем тип данных непересекающихся множеств и рассматриваем несколько вариантов его реализации (быстрый поиск, быстрое объединение, взвешенное быстрое объединение и взвешенное быстрое объединение со сжатием пути). Наконец, мы применяем тип данных непересекающихся множеств для решения проблемы перколяции из физической химии.
What's included
5 videos2 readings1 assignment1 programming assignment
5 videos• Total 51 minutes
- Динамическая связность• 10 minutes
- Быстрый поиск• 10 minutes
- Быстрое объединение• 8 minutes
- Улучшения для быстрого объединения• 13 minutes
- Применение систем непересекающихся множеств• 9 minutes
2 readings• Total 1 minute
- Обзор• 1 minute
- Слайды к лекциям• 0 minutes
1 assignment
- Вопросы в формате собеседования: «Система непересекающихся множеств» (без оценивания)• 0 minutes
1 programming assignment• Total 480 minutes
- перколяция• 480 minutes
В основе нашего подхода к анализу эффективности алгоритмов лежит научный метод. Начнем с вычислительных экспериментов для измерения времени выполнения наших программ. Мы применяем эти измерения для формирования гипотез об эффективности. Затем мы составляем математические модели, объясняющие поведение алгоритмов. Наконец, мы рассмотрим анализ использования памяти нашими программами на Java.
What's included
6 videos1 reading1 assignment
6 videos• Total 66 minutes
- Введение в анализ алгоритмов• 8 minutes
- Наблюдения• 10 minutes
- Математические модели• 13 minutes
- Классификации порядка роста• 15 minutes
- Теория алгоритмов• 12 minutes
- Память• 8 minutes
1 reading
- Слайды к лекциям• 0 minutes
1 assignment
- Вопросы в формате собеседования: «Анализ алгоритмов» (без оценивания)• 0 minutes
Мы рассмотрим два фундаментальных типа данных для хранения коллекций объектов: стек и очередь. Каждый из них реализуется с помощью односвязного списка или массива изменяющегося размера. Мы представим две продвинутые функции Java, упрощающие клиентский код: обобщенные коллекции и итераторы. Наконец, будут рассмотрены различные применения стеков и очередей, начиная от разбора арифметических выражений и заканчивая моделированием систем массового обслуживания.
What's included
6 videos2 readings1 assignment1 programming assignment
6 videos• Total 61 minutes
- Стеки• 16 minutes
- Массивы изменяющегося размера• 10 minutes
- Очереди• 5 minutes
- Обобщенные коллекции• 9 minutes
- Итераторы• 7 minutes
- Области применения стеков и очередей (дополнительно)• 13 minutes
2 readings• Total 1 minute
- Обзор• 1 minute
- Слайды к лекциям• 0 minutes
1 assignment
- Вопросы в формате собеседования: «Стеки и очереди» (без оценивания)• 0 minutes
1 programming assignment• Total 480 minutes
- двусторонние и рандомизированные очереди• 480 minutes
Мы познакомим вас с проблемой сортировки и интерфейсом Comparable Java. Мы изучим два элементарных метода сортировки (сортировку выбором и сортировку вставкой), а также разновидность одного из них — сортировку методом Шелла. Также мы рассмотрим два алгоритма для равномерного перемешивания массива. В завершение мы продемонстрируем применение сортировки на практике для вычисления выпуклой оболочки множества точек с помощью алгоритма сканирования Грэма.
What's included
6 videos1 reading1 assignment
6 videos• Total 63 minutes
- Введение в сортировку• 15 minutes
- Сортировка выбором• 7 minutes
- Сортировка вставкой• 9 minutes
- Сортировка методом Шелла• 11 minutes
- Перемешивание• 8 minutes
- Выпуклая оболочка множества точек• 14 minutes
1 reading
- Слайды к лекциям• 0 minutes
1 assignment
- Вопросы в формате собеседования: «Элементарные методы сортировки» (без оценивания)• 0 minutes
Мы изучим алгоритм сортировки с объединением и покажем, что он позволяет отсортировать любой массив из n элементов с максимальным количество сравнений n lg n. Также будет рассмотрена нерекурсивная версия этого алгоритма («снизу вверх»). Мы докажем, что любой алгоритм сортировки, основанный на сравнении, в худшем случае должен выполнить не менее n lg n сравнений. Мы обсудим применение различных схем упорядочения сортируемых объектов и связанную с этим концепцию устойчивости.
What's included
5 videos2 readings1 assignment1 programming assignment
5 videos• Total 49 minutes
- Сортировка с объединением• 24 minutes
- Сортировка «снизу вверх» с объединением• 3 minutes
- Сложность сортировки• 9 minutes
- Компараторы• 7 minutes
- Устойчивость• 6 minutes
2 readings
- Обзор• 0 minutes
- Слайды к лекциям• 0 minutes
1 assignment
- Вопросы в формате собеседования: «Сортировка с объединением» (без оценивания)• 0 minutes
1 programming assignment• Total 480 minutes
- коллинеарные точки• 480 minutes
Мы изучим и реализуем алгоритм рандомизированной быстрой сортировки и проанализируем его эффективность. Кроме того, рассмотрим рандомизированный быстрый выбор — вариант быстрой сортировки, находящий k-й наименьший элемент за линейное время. В завершение мы рассмотрим 3-направленную быструю сортировку — вариант быстрой сортировки, особенно хорошо работающий при наличии дублирующихся ключей.
What's included
4 videos1 reading1 assignment
4 videos• Total 50 minutes
- Быстрая сортировка• 20 minutes
- Выбор• 7 minutes
- Дублирующиеся ключи• 11 minutes
- Системные сортировки• 12 minutes
1 reading
- Слайды к лекциям• 0 minutes
1 assignment
- Вопросы в формате собеседования: «Быстрая сортировка» (без оценивания)• 0 minutes
Мы представляем тип данных «приоритизированная очередь» и его эффективную реализацию с помощью структуры данных «бинарная куча». Эта реализация также является основой эффективного алгоритма кучевой сортировки. В завершение мы познакомимся с применением приоритизированных очередей. В частности, мы смоделируем движение объекта, состоящего из n частичек, по законам упругих столкновений.
What's included
4 videos2 readings1 assignment1 programming assignment
4 videos• Total 74 minutes
- API и элементарные реализации• 13 minutes
- Бинарные кучи• 24 minutes
- Кучевая сортировка• 14 minutes
- Событийное моделирование (дополнительно)• 23 minutes
2 readings• Total 10 minutes
- Обзор• 10 minutes
- Слайды к лекциям• 0 minutes
1 assignment
- Вопросы в формате собеседования: «Приоритизированные очереди» (без оценивания)• 0 minutes
1 programming assignment• Total 480 minutes
- головоломка «восьмерка»• 480 minutes
Мы зададим API для таблиц символов (также известных как ассоциативные массивы, карты или словари) и опишем две элементарные реализации с использованием отсортированного массива (бинарный поиск) и неупорядоченного списка (последовательный поиск). Если ключи имеют тип Comparable, мы зададим расширенный API, включающий дополнительные методы минимума и максимума, нижнего и верхнего предела, ранжирования и выбора. Для разработки эффективной реализации этого API мы изучим структуру данных «бинарное дерево поиска» и проанализируем ее эффективность.
What's included
6 videos1 reading1 assignment
6 videos• Total 77 minutes
- API таблицы символов• 22 minutes
- Элементарные реализации• 9 minutes
- Упорядоченные операции• 6 minutes
- Бинарные деревья поиска• 20 minutes
- Упорядоченные операции в БДП• 11 minutes
- Удаление из БДП• 10 minutes
1 reading
- Слайды к лекциям• 0 minutes
1 assignment• Total 30 minutes
- Вопросы в формате собеседования: «Таблицы элементарных символов» (без оценивания)• 30 minutes
В этой лекции наша цель состоит в создании таблицы символов с гарантированной логарифмической эффективностью поиска и вставки (а также множества других операций). Мы начнем с рассмотрения 2-3-деревьев, которые легко анализировать, но сложно реализовать. Затем рассмотрим красно-черные бинарные деревья поиска, которые послужат новым способом реализации 2-3-деревьев в виде бинарных деревьев поиска. Наконец мы представим B-деревья — обобщение 2-3-деревьев, широко применяющееся при реализации файловых систем.
What's included
3 videos2 readings1 assignment
3 videos• Total 63 minutes
- 2-3-деревья поиска• 17 minutes
- Красно-черные БДП• 36 minutes
- B-деревья (дополнительно)• 11 minutes
2 readings• Total 10 minutes
- Обзор• 10 minutes
- Слайды к лекциям• 0 minutes
1 assignment• Total 30 minutes
- Вопросы в формате собеседования: «Сбалансированные деревья поиска» (без оценивания)• 30 minutes
Мы начнем с поиска в 1-мерных и 2-мерных диапазонах, цель которого — найти все точки в заданном 1-мерном или 2-мерном диапазоне. Для выполнения данной задачи рассмотрим k-мерные деревья — естественное обобщение БДП, ключи которого — точки на плоскости (или в пространствах более высокого порядка). Также рассмотрим проблемы пересечений, когда требуется найти все пересечения среди множества отрезков или прямоугольников.
What's included
5 videos1 reading1 programming assignment
5 videos• Total 66 minutes
- Поиск по 1-мерному диапазону• 9 minutes
- Пересечение отрезков• 6 minutes
- k-мерные деревья• 29 minutes
- Интервальные деревья поиска• 14 minutes
- Пересечение прямоугольников• 8 minutes
1 reading
- Слайды к лекциям• 0 minutes
1 programming assignment• Total 480 minutes
- k-мерные деревья• 480 minutes
Вначале мы опишем желательные свойства хэш-функции и ее реализацию в Java, включая фундаментальное допущение о равномерности хэширования, определяющее потенциальную успешность хэширования. Затем рассмотрим две стратегии реализации хэш-таблиц — раздельное связывание цепочками и линейное исследование. Обе стратегии имеют постоянную по времени эффективность поиска и вставки при удовлетворении допущения о равномерности хэширования.
What's included
4 videos2 readings1 assignment
4 videos• Total 50 minutes
- Хэш-таблицы• 18 minutes
- Раздельное связывание цепочками• 7 minutes
- Линейное исследование• 15 minutes
- Контекст хэш-таблицы• 10 minutes
2 readings• Total 10 minutes
- Обзор• 10 minutes
- Слайды к лекциям• 0 minutes
1 assignment
- Вопросы в формате собеседования: «Хэш-таблицы» (без оценивания)• 0 minutes
Рассмотрим различные практические области применения таблиц символов, включая множества, клиенты словарей, клиенты индексирования и разреженные векторы.
What's included
4 videos1 reading
4 videos• Total 26 minutes
- Области применения таблиц символов: множества (дополнительно)• 5 minutes
- Области применения таблиц символов: клиенты словарей (дополнительно)• 6 minutes
- Области применения таблиц символов: клиенты индексирования (дополнительно)• 8 minutes
- Области применения таблиц символов: разреженные векторы (дополнительно)• 8 minutes
1 reading
- Слайды к лекциям• 0 minutes
Instructors
Instructor ratings
We asked all learners to give feedback on our instructors based on the quality of their teaching style.


Offered by

Offered by

Princeton University is a private research university located in Princeton, New Jersey, United States. It is one of the eight universities of the Ivy League, and one of the nine Colonial Colleges founded before the American Revolution.
Why people choose Coursera for their career

Felipe M.

Jennifer J.

Larry W.
