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

Алгоритмы, часть I
Économisez sur les compétences qui vous font briller avec 40 % de réduction sur 3 mois de Coursera Plus. Économisez maintenant
Ce cours n'est pas disponible en Français (France)

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


Instructeurs : Robert Sedgewick
Enseignants
Évaluations de l’enseignant
Nous avons demandé à tous les étudiants de fournir des commentaires sur nos enseignants au sujet de la qualité de leur pédagogie.


13 742 déjà inscrits
84 avis
84 avis
Compétences que vous acquerrez
- Catégorie : Computer ProgrammingComputer Programming
- Catégorie : Spatial Data AnalysisSpatial Data Analysis
- Catégorie : JavaJava
- Catégorie : AlgorithmsAlgorithms
- Catégorie : Memory ManagementMemory Management
- Catégorie : Data StructuresData Structures
- Catégorie : Graph TheoryGraph Theory
- Catégorie : SimulationsSimulations
- Catégorie : Theoretical Computer ScienceTheoretical Computer Science
Outils que vous découvrirez
- Catégorie : Java ProgrammingJava Programming
Détails à connaître
10 devoirs
Découvrez comment les employés des entreprises prestigieuses maîtrisent des compétences recherchées

Il y a 13 modules dans ce cours
Введение в алгоритмы, часть I.
Inclus
1 vidéo2 lectures
1 vidéo•Total 9 minutes
- Введение в курс•9 minutes
2 lectures•Total 1 minute
- Введение в алгоритмы, часть I•1 minute
- Слайды к лекциям•0 minutes
Мы демонстрируем наш базовый подход к разработке и анализу алгоритмов через рассмотрение проблемы динамической связности. Мы представляем тип данных непересекающихся множеств и рассматриваем несколько вариантов его реализации (быстрый поиск, быстрое объединение, взвешенное быстрое объединение и взвешенное быстрое объединение со сжатием пути). Наконец, мы применяем тип данных непересекающихся множеств для решения проблемы перколяции из физической химии.
Inclus
5 vidéos2 lectures1 devoir1 devoir de programmation
5 vidéos•Total 51 minutes
- Динамическая связность•10 minutes
- Быстрый поиск•10 minutes
- Быстрое объединение•8 minutes
- Улучшения для быстрого объединения•13 minutes
- Применение систем непересекающихся множеств•9 minutes
2 lectures•Total 1 minute
- Обзор•1 minute
- Слайды к лекциям•0 minutes
1 devoir
- Вопросы в формате собеседования: «Система непересекающихся множеств» (без оценивания)•0 minutes
1 devoir de programmation•Total 480 minutes
- перколяция•480 minutes
В основе нашего подхода к анализу эффективности алгоритмов лежит научный метод. Начнем с вычислительных экспериментов для измерения времени выполнения наших программ. Мы применяем эти измерения для формирования гипотез об эффективности. Затем мы составляем математические модели, объясняющие поведение алгоритмов. Наконец, мы рассмотрим анализ использования памяти нашими программами на Java.
Inclus
6 vidéos1 lecture1 devoir
6 vidéos•Total 66 minutes
- Введение в анализ алгоритмов•8 minutes
- Наблюдения•10 minutes
- Математические модели•13 minutes
- Классификации порядка роста•15 minutes
- Теория алгоритмов•12 minutes
- Память•8 minutes
1 lecture
- Слайды к лекциям•0 minutes
1 devoir
- Вопросы в формате собеседования: «Анализ алгоритмов» (без оценивания)•0 minutes
Мы рассмотрим два фундаментальных типа данных для хранения коллекций объектов: стек и очередь. Каждый из них реализуется с помощью односвязного списка или массива изменяющегося размера. Мы представим две продвинутые функции Java, упрощающие клиентский код: обобщенные коллекции и итераторы. Наконец, будут рассмотрены различные применения стеков и очередей, начиная от разбора арифметических выражений и заканчивая моделированием систем массового обслуживания.
Inclus
6 vidéos2 lectures1 devoir1 devoir de programmation
6 vidéos•Total 61 minutes
- Стеки•16 minutes
- Массивы изменяющегося размера•10 minutes
- Очереди•5 minutes
- Обобщенные коллекции•9 minutes
- Итераторы•7 minutes
- Области применения стеков и очередей (дополнительно)•13 minutes
2 lectures•Total 1 minute
- Обзор•1 minute
- Слайды к лекциям•0 minutes
1 devoir
- Вопросы в формате собеседования: «Стеки и очереди» (без оценивания)•0 minutes
1 devoir de programmation•Total 480 minutes
- двусторонние и рандомизированные очереди•480 minutes
Мы познакомим вас с проблемой сортировки и интерфейсом Comparable Java. Мы изучим два элементарных метода сортировки (сортировку выбором и сортировку вставкой), а также разновидность одного из них — сортировку методом Шелла. Также мы рассмотрим два алгоритма для равномерного перемешивания массива. В завершение мы продемонстрируем применение сортировки на практике для вычисления выпуклой оболочки множества точек с помощью алгоритма сканирования Грэма.
Inclus
6 vidéos1 lecture1 devoir
6 vidéos•Total 63 minutes
- Введение в сортировку•15 minutes
- Сортировка выбором•7 minutes
- Сортировка вставкой•9 minutes
- Сортировка методом Шелла•11 minutes
- Перемешивание•8 minutes
- Выпуклая оболочка множества точек•14 minutes
1 lecture
- Слайды к лекциям•0 minutes
1 devoir
- Вопросы в формате собеседования: «Элементарные методы сортировки» (без оценивания)•0 minutes
Мы изучим алгоритм сортировки с объединением и покажем, что он позволяет отсортировать любой массив из n элементов с максимальным количество сравнений n lg n. Также будет рассмотрена нерекурсивная версия этого алгоритма («снизу вверх»). Мы докажем, что любой алгоритм сортировки, основанный на сравнении, в худшем случае должен выполнить не менее n lg n сравнений. Мы обсудим применение различных схем упорядочения сортируемых объектов и связанную с этим концепцию устойчивости.
Inclus
5 vidéos2 lectures1 devoir1 devoir de programmation
5 vidéos•Total 49 minutes
- Сортировка с объединением•24 minutes
- Сортировка «снизу вверх» с объединением•3 minutes
- Сложность сортировки•9 minutes
- Компараторы•7 minutes
- Устойчивость•6 minutes
2 lectures
- Обзор•0 minutes
- Слайды к лекциям•0 minutes
1 devoir
- Вопросы в формате собеседования: «Сортировка с объединением» (без оценивания)•0 minutes
1 devoir de programmation•Total 480 minutes
- коллинеарные точки•480 minutes
Мы изучим и реализуем алгоритм рандомизированной быстрой сортировки и проанализируем его эффективность. Кроме того, рассмотрим рандомизированный быстрый выбор — вариант быстрой сортировки, находящий k-й наименьший элемент за линейное время. В завершение мы рассмотрим 3-направленную быструю сортировку — вариант быстрой сортировки, особенно хорошо работающий при наличии дублирующихся ключей.
Inclus
4 vidéos1 lecture1 devoir
4 vidéos•Total 50 minutes
- Быстрая сортировка•20 minutes
- Выбор•7 minutes
- Дублирующиеся ключи•11 minutes
- Системные сортировки•12 minutes
1 lecture
- Слайды к лекциям•0 minutes
1 devoir
- Вопросы в формате собеседования: «Быстрая сортировка» (без оценивания)•0 minutes
Мы представляем тип данных «приоритизированная очередь» и его эффективную реализацию с помощью структуры данных «бинарная куча». Эта реализация также является основой эффективного алгоритма кучевой сортировки. В завершение мы познакомимся с применением приоритизированных очередей. В частности, мы смоделируем движение объекта, состоящего из n частичек, по законам упругих столкновений.
Inclus
4 vidéos2 lectures1 devoir1 devoir de programmation
4 vidéos•Total 74 minutes
- API и элементарные реализации•13 minutes
- Бинарные кучи•24 minutes
- Кучевая сортировка•14 minutes
- Событийное моделирование (дополнительно)•23 minutes
2 lectures•Total 10 minutes
- Обзор•10 minutes
- Слайды к лекциям•0 minutes
1 devoir
- Вопросы в формате собеседования: «Приоритизированные очереди» (без оценивания)•0 minutes
1 devoir de programmation•Total 480 minutes
- головоломка «восьмерка»•480 minutes
Мы зададим API для таблиц символов (также известных как ассоциативные массивы, карты или словари) и опишем две элементарные реализации с использованием отсортированного массива (бинарный поиск) и неупорядоченного списка (последовательный поиск). Если ключи имеют тип Comparable, мы зададим расширенный API, включающий дополнительные методы минимума и максимума, нижнего и верхнего предела, ранжирования и выбора. Для разработки эффективной реализации этого API мы изучим структуру данных «бинарное дерево поиска» и проанализируем ее эффективность.
Inclus
6 vidéos1 lecture1 devoir
6 vidéos•Total 77 minutes
- API таблицы символов•22 minutes
- Элементарные реализации•9 minutes
- Упорядоченные операции•6 minutes
- Бинарные деревья поиска•20 minutes
- Упорядоченные операции в БДП•11 minutes
- Удаление из БДП•10 minutes
1 lecture
- Слайды к лекциям•0 minutes
1 devoir•Total 30 minutes
- Вопросы в формате собеседования: «Таблицы элементарных символов» (без оценивания)•30 minutes
В этой лекции наша цель состоит в создании таблицы символов с гарантированной логарифмической эффективностью поиска и вставки (а также множества других операций). Мы начнем с рассмотрения 2-3-деревьев, которые легко анализировать, но сложно реализовать. Затем рассмотрим красно-черные бинарные деревья поиска, которые послужат новым способом реализации 2-3-деревьев в виде бинарных деревьев поиска. Наконец мы представим B-деревья — обобщение 2-3-деревьев, широко применяющееся при реализации файловых систем.
Inclus
3 vidéos2 lectures1 devoir
3 vidéos•Total 63 minutes
- 2-3-деревья поиска•17 minutes
- Красно-черные БДП•36 minutes
- B-деревья (дополнительно)•11 minutes
2 lectures•Total 10 minutes
- Обзор•10 minutes
- Слайды к лекциям•0 minutes
1 devoir•Total 30 minutes
- Вопросы в формате собеседования: «Сбалансированные деревья поиска» (без оценивания)•30 minutes
Мы начнем с поиска в 1-мерных и 2-мерных диапазонах, цель которого — найти все точки в заданном 1-мерном или 2-мерном диапазоне. Для выполнения данной задачи рассмотрим k-мерные деревья — естественное обобщение БДП, ключи которого — точки на плоскости (или в пространствах более высокого порядка). Также рассмотрим проблемы пересечений, когда требуется найти все пересечения среди множества отрезков или прямоугольников.
Inclus
5 vidéos1 lecture1 devoir de programmation
5 vidéos•Total 66 minutes
- Поиск по 1-мерному диапазону•9 minutes
- Пересечение отрезков•6 minutes
- k-мерные деревья•29 minutes
- Интервальные деревья поиска•14 minutes
- Пересечение прямоугольников•8 minutes
1 lecture
- Слайды к лекциям•0 minutes
1 devoir de programmation•Total 480 minutes
- k-мерные деревья•480 minutes
Вначале мы опишем желательные свойства хэш-функции и ее реализацию в Java, включая фундаментальное допущение о равномерности хэширования, определяющее потенциальную успешность хэширования. Затем рассмотрим две стратегии реализации хэш-таблиц — раздельное связывание цепочками и линейное исследование. Обе стратегии имеют постоянную по времени эффективность поиска и вставки при удовлетворении допущения о равномерности хэширования.
Inclus
4 vidéos2 lectures1 devoir
4 vidéos•Total 50 minutes
- Хэш-таблицы•18 minutes
- Раздельное связывание цепочками•7 minutes
- Линейное исследование•15 minutes
- Контекст хэш-таблицы•10 minutes
2 lectures•Total 10 minutes
- Обзор•10 minutes
- Слайды к лекциям•0 minutes
1 devoir
- Вопросы в формате собеседования: «Хэш-таблицы» (без оценивания)•0 minutes
Рассмотрим различные практические области применения таблиц символов, включая множества, клиенты словарей, клиенты индексирования и разреженные векторы.
Inclus
4 vidéos1 lecture
4 vidéos•Total 26 minutes
- Области применения таблиц символов: множества (дополнительно)•5 minutes
- Области применения таблиц символов: клиенты словарей (дополнительно)•6 minutes
- Области применения таблиц символов: клиенты индексирования (дополнительно)•8 minutes
- Области применения таблиц символов: разреженные векторы (дополнительно)•8 minutes
1 lecture
- Слайды к лекциям•0 minutes
Instructeurs
Évaluations de l’enseignant
Nous avons demandé à tous les étudiants de fournir des commentaires sur nos enseignants au sujet de la qualité de leur pédagogie.


Offert par

Offert par

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.
Pour quelles raisons les étudiants sur Coursera nous choisissent-ils pour leur carrière ?

Felipe M.

Jennifer J.

Larry W.

Chaitanya A.
Foire Aux 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.
Plus de questions
Aide financière disponible,


