Данный курс охватывает ключевые знания об алгоритмах и структурах данных, которыми обязан владеть каждый профессиональный программист. При этом акцент сделан на практических областях применения и научном анализе эффективности алгоритмов, реализованных на Java. В части I рассматриваются элементарные структуры данных, а также алгоритмы сортировки и поиска. В части II освещаются алгоритмы обработки графов и строк.
通过 Coursera Plus 提高技能,仅需 239 美元/年(原价 399 美元)。立即节省

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


位教师:Robert Sedgewick
授课教师
授课教师评分
我们要求所有学生根据授课教师的教学风格和质量提供对授课教师的反馈。


13,680 人已注册
要了解的详细信息
10 项作业
了解顶级公司的员工如何掌握热门技能

该课程共有13个模块
Введение в алгоритмы, часть I.
涵盖的内容
1个视频2篇阅读材料
1个视频•总计9分钟
- Введение в курс•9分钟
2篇阅读材料•总计1分钟
- Введение в алгоритмы, часть I•1分钟
- Слайды к лекциям•0分钟
Мы демонстрируем наш базовый подход к разработке и анализу алгоритмов через рассмотрение проблемы динамической связности. Мы представляем тип данных непересекающихся множеств и рассматриваем несколько вариантов его реализации (быстрый поиск, быстрое объединение, взвешенное быстрое объединение и взвешенное быстрое объединение со сжатием пути). Наконец, мы применяем тип данных непересекающихся множеств для решения проблемы перколяции из физической химии.
涵盖的内容
5个视频2篇阅读材料1个作业1个编程作业
5个视频•总计51分钟
- Динамическая связность•10分钟
- Быстрый поиск•10分钟
- Быстрое объединение•8分钟
- Улучшения для быстрого объединения•13分钟
- Применение систем непересекающихся множеств•9分钟
2篇阅读材料•总计1分钟
- Обзор•1分钟
- Слайды к лекциям•0分钟
1个作业
- Вопросы в формате собеседования: «Система непересекающихся множеств» (без оценивания)•0分钟
1个编程作业•总计480分钟
- перколяция•480分钟
В основе нашего подхода к анализу эффективности алгоритмов лежит научный метод. Начнем с вычислительных экспериментов для измерения времени выполнения наших программ. Мы применяем эти измерения для формирования гипотез об эффективности. Затем мы составляем математические модели, объясняющие поведение алгоритмов. Наконец, мы рассмотрим анализ использования памяти нашими программами на Java.
涵盖的内容
6个视频1篇阅读材料1个作业
6个视频•总计66分钟
- Введение в анализ алгоритмов•8分钟
- Наблюдения•10分钟
- Математические модели•13分钟
- Классификации порядка роста•15分钟
- Теория алгоритмов•12分钟
- Память•8分钟
1篇阅读材料
- Слайды к лекциям•0分钟
1个作业
- Вопросы в формате собеседования: «Анализ алгоритмов» (без оценивания)•0分钟
Мы рассмотрим два фундаментальных типа данных для хранения коллекций объектов: стек и очередь. Каждый из них реализуется с помощью односвязного списка или массива изменяющегося размера. Мы представим две продвинутые функции Java, упрощающие клиентский код: обобщенные коллекции и итераторы. Наконец, будут рассмотрены различные применения стеков и очередей, начиная от разбора арифметических выражений и заканчивая моделированием систем массового обслуживания.
涵盖的内容
6个视频2篇阅读材料1个作业1个编程作业
6个视频•总计61分钟
- Стеки•16分钟
- Массивы изменяющегося размера•10分钟
- Очереди•5分钟
- Обобщенные коллекции•9分钟
- Итераторы•7分钟
- Области применения стеков и очередей (дополнительно)•13分钟
2篇阅读材料•总计1分钟
- Обзор•1分钟
- Слайды к лекциям•0分钟
1个作业
- Вопросы в формате собеседования: «Стеки и очереди» (без оценивания)•0分钟
1个编程作业•总计480分钟
- двусторонние и рандомизированные очереди•480分钟
Мы познакомим вас с проблемой сортировки и интерфейсом Comparable Java. Мы изучим два элементарных метода сортировки (сортировку выбором и сортировку вставкой), а также разновидность одного из них — сортировку методом Шелла. Также мы рассмотрим два алгоритма для равномерного перемешивания массива. В завершение мы продемонстрируем применение сортировки на практике для вычисления выпуклой оболочки множества точек с помощью алгоритма сканирования Грэма.
涵盖的内容
6个视频1篇阅读材料1个作业
6个视频•总计63分钟
- Введение в сортировку•15分钟
- Сортировка выбором•7分钟
- Сортировка вставкой•9分钟
- Сортировка методом Шелла•11分钟
- Перемешивание•8分钟
- Выпуклая оболочка множества точек•14分钟
1篇阅读材料
- Слайды к лекциям•0分钟
1个作业
- Вопросы в формате собеседования: «Элементарные методы сортировки» (без оценивания)•0分钟
Мы изучим алгоритм сортировки с объединением и покажем, что он позволяет отсортировать любой массив из n элементов с максимальным количество сравнений n lg n. Также будет рассмотрена нерекурсивная версия этого алгоритма («снизу вверх»). Мы докажем, что любой алгоритм сортировки, основанный на сравнении, в худшем случае должен выполнить не менее n lg n сравнений. Мы обсудим применение различных схем упорядочения сортируемых объектов и связанную с этим концепцию устойчивости.
涵盖的内容
5个视频2篇阅读材料1个作业1个编程作业
5个视频•总计49分钟
- Сортировка с объединением•24分钟
- Сортировка «снизу вверх» с объединением•3分钟
- Сложность сортировки•9分钟
- Компараторы•7分钟
- Устойчивость•6分钟
2篇阅读材料
- Обзор•0分钟
- Слайды к лекциям•0分钟
1个作业
- Вопросы в формате собеседования: «Сортировка с объединением» (без оценивания)•0分钟
1个编程作业•总计480分钟
- коллинеарные точки•480分钟
Мы изучим и реализуем алгоритм рандомизированной быстрой сортировки и проанализируем его эффективность. Кроме того, рассмотрим рандомизированный быстрый выбор — вариант быстрой сортировки, находящий k-й наименьший элемент за линейное время. В завершение мы рассмотрим 3-направленную быструю сортировку — вариант быстрой сортировки, особенно хорошо работающий при наличии дублирующихся ключей.
涵盖的内容
4个视频1篇阅读材料1个作业
4个视频•总计50分钟
- Быстрая сортировка•20分钟
- Выбор•7分钟
- Дублирующиеся ключи•11分钟
- Системные сортировки•12分钟
1篇阅读材料
- Слайды к лекциям•0分钟
1个作业
- Вопросы в формате собеседования: «Быстрая сортировка» (без оценивания)•0分钟
Мы представляем тип данных «приоритизированная очередь» и его эффективную реализацию с помощью структуры данных «бинарная куча». Эта реализация также является основой эффективного алгоритма кучевой сортировки. В завершение мы познакомимся с применением приоритизированных очередей. В частности, мы смоделируем движение объекта, состоящего из n частичек, по законам упругих столкновений.
涵盖的内容
4个视频2篇阅读材料1个作业1个编程作业
4个视频•总计74分钟
- API и элементарные реализации•13分钟
- Бинарные кучи•24分钟
- Кучевая сортировка•14分钟
- Событийное моделирование (дополнительно)•23分钟
2篇阅读材料•总计10分钟
- Обзор•10分钟
- Слайды к лекциям•0分钟
1个作业
- Вопросы в формате собеседования: «Приоритизированные очереди» (без оценивания)•0分钟
1个编程作业•总计480分钟
- головоломка «восьмерка»•480分钟
Мы зададим API для таблиц символов (также известных как ассоциативные массивы, карты или словари) и опишем две элементарные реализации с использованием отсортированного массива (бинарный поиск) и неупорядоченного списка (последовательный поиск). Если ключи имеют тип Comparable, мы зададим расширенный API, включающий дополнительные методы минимума и максимума, нижнего и верхнего предела, ранжирования и выбора. Для разработки эффективной реализации этого API мы изучим структуру данных «бинарное дерево поиска» и проанализируем ее эффективность.
涵盖的内容
6个视频1篇阅读材料1个作业
6个视频•总计77分钟
- API таблицы символов•22分钟
- Элементарные реализации•9分钟
- Упорядоченные операции•6分钟
- Бинарные деревья поиска•20分钟
- Упорядоченные операции в БДП•11分钟
- Удаление из БДП•10分钟
1篇阅读材料
- Слайды к лекциям•0分钟
1个作业•总计30分钟
- Вопросы в формате собеседования: «Таблицы элементарных символов» (без оценивания)•30分钟
В этой лекции наша цель состоит в создании таблицы символов с гарантированной логарифмической эффективностью поиска и вставки (а также множества других операций). Мы начнем с рассмотрения 2-3-деревьев, которые легко анализировать, но сложно реализовать. Затем рассмотрим красно-черные бинарные деревья поиска, которые послужат новым способом реализации 2-3-деревьев в виде бинарных деревьев поиска. Наконец мы представим B-деревья — обобщение 2-3-деревьев, широко применяющееся при реализации файловых систем.
涵盖的内容
3个视频2篇阅读材料1个作业
3个视频•总计63分钟
- 2-3-деревья поиска•17分钟
- Красно-черные БДП•36分钟
- B-деревья (дополнительно)•11分钟
2篇阅读材料•总计10分钟
- Обзор•10分钟
- Слайды к лекциям•0分钟
1个作业•总计30分钟
- Вопросы в формате собеседования: «Сбалансированные деревья поиска» (без оценивания)•30分钟
Мы начнем с поиска в 1-мерных и 2-мерных диапазонах, цель которого — найти все точки в заданном 1-мерном или 2-мерном диапазоне. Для выполнения данной задачи рассмотрим k-мерные деревья — естественное обобщение БДП, ключи которого — точки на плоскости (или в пространствах более высокого порядка). Также рассмотрим проблемы пересечений, когда требуется найти все пересечения среди множества отрезков или прямоугольников.
涵盖的内容
5个视频1篇阅读材料1个编程作业
5个视频•总计66分钟
- Поиск по 1-мерному диапазону•9分钟
- Пересечение отрезков•6分钟
- k-мерные деревья•29分钟
- Интервальные деревья поиска•14分钟
- Пересечение прямоугольников•8分钟
1篇阅读材料
- Слайды к лекциям•0分钟
1个编程作业•总计480分钟
- k-мерные деревья•480分钟
Вначале мы опишем желательные свойства хэш-функции и ее реализацию в Java, включая фундаментальное допущение о равномерности хэширования, определяющее потенциальную успешность хэширования. Затем рассмотрим две стратегии реализации хэш-таблиц — раздельное связывание цепочками и линейное исследование. Обе стратегии имеют постоянную по времени эффективность поиска и вставки при удовлетворении допущения о равномерности хэширования.
涵盖的内容
4个视频2篇阅读材料1个作业
4个视频•总计50分钟
- Хэш-таблицы•18分钟
- Раздельное связывание цепочками•7分钟
- Линейное исследование•15分钟
- Контекст хэш-таблицы•10分钟
2篇阅读材料•总计10分钟
- Обзор•10分钟
- Слайды к лекциям•0分钟
1个作业
- Вопросы в формате собеседования: «Хэш-таблицы» (без оценивания)•0分钟
Рассмотрим различные практические области применения таблиц символов, включая множества, клиенты словарей, клиенты индексирования и разреженные векторы.
涵盖的内容
4个视频1篇阅读材料
4个视频•总计26分钟
- Области применения таблиц символов: множества (дополнительно)•5分钟
- Области применения таблиц символов: клиенты словарей (дополнительно)•6分钟
- Области применения таблиц символов: клиенты индексирования (дополнительно)•8分钟
- Области применения таблиц символов: разреженные векторы (дополнительно)•8分钟
1篇阅读材料
- Слайды к лекциям•0分钟
位教师
授课教师评分
我们要求所有学生根据授课教师的教学风格和质量提供对授课教师的反馈。


提供方

提供方

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.
人们为什么选择 Coursera 来帮助自己实现职业发展

Felipe M.

Jennifer J.

Larry W.

Chaitanya A.
常见问题
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.
更多问题
提供助学金,

