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

Алгоритмы, часть I
Seize the savings! Get 40% off 3 months of Coursera Plus and full access to thousands of courses.

Алгоритмы, часть 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.


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.

Chaitanya A.

Open new doors with Coursera Plus
Unlimited access to 10,000+ world-class courses, hands-on projects, and job-ready certificate programs - all included in your subscription
Advance your career with an online degree
Earn a degree from world-class universities - 100% online
Join over 3,400 global companies that choose Coursera for Business
Upskill your employees to excel in the digital economy
Frequently asked questions
Once you enroll, you’ll have access to all videos and programming assignments.
No. All features of this course are available for free.
No. As per Princeton University policy, no certificates, credentials, or reports are awarded in connection with this course.
Our central thesis is that algorithms are best understood by implementing and testing them. Our use of Java is essentially expository, and we shy away from exotic language features, so we expect you would be able to adapt our code to your favorite language. However, we require that you submit the programming assignments in Java.
Part I focuses on elementary data structures, sorting, and searching. Topics include union-find, binary search, stacks, queues, bags, insertion sort, selection sort, shellsort, quicksort, 3-way quicksort, mergesort, heapsort, binary heaps, binary search trees, red−black trees, separate-chaining and linear-probing hash tables, Graham scan, and kd-trees.
Part II focuses on graph and string-processing algorithms. Topics include depth-first search, breadth-first search, topological sort, Kosaraju−Sharir, Kruskal, Prim, Dijkistra, Bellman−Ford, Ford−Fulkerson, LSD radix sort, MSD radix sort, 3-way radix quicksort, multiway tries, ternary search tries, Knuth−Morris−Pratt, Boyer−Moore, Rabin−Karp, regular expression matching, run-length coding, Huffman coding, LZW compression, and the Burrows−Wheeler transform.
Weekly exercises, weekly programming assignments, weekly interview questions, and a final exam.
The exercises are primarily composed of short drill questions (such as tracing the execution of an algorithm or data structure), designed to help you master the material.
The programming assignments involve either implementing algorithms and data structures (deques, randomized queues, and kd-trees) or applying algorithms and data structures to an interesting domain (computational chemistry, computational geometry, and mathematical recreation). The assignments are evaluated using a sophisticated autograder that provides detailed feedback about style, correctness, and efficiency.
The interview questions are similar to those that you might find at a technical job interview. They are optional and not graded.
This course is for anyone using a computer to address large problems (and therefore needing efficient algorithms). At Princeton, over 25% of all students take the course, including people majoring in engineering, biology, physics, chemistry, economics, and many other fields, not just computer science.
The two courses are complementary. This one is essentially a programming course that concentrates on developing code; that one is essentially a math course that concentrates on understanding proofs. This course is about learning algorithms in the context of implementing and testing them in practical applications; that one is about learning algorithms in the context of developing mathematical models that help explain why they are efficient. In typical computer science curriculums, a course like this one is taken by first- and second-year students and a course like that one is taken by juniors and seniors.
More questions
Financial aid available,