本课程涵盖每个认真的程序员都需要了解的算法和 Data Structure 的基本信息,重点是 Java 实现的应用和科学性能分析。第一部分涵盖基本数据结构、排序和 Algorithm 搜索算法。本课程的所有 Feature 均免费提供。有兴趣深入学习本课程内容的人可以购买教科书《Algorithm, Fourth Edition》(本课程基于此书)或访问网站 algs4.cs.princeton.edu,获取更多资料。 本课程结业后不颁发证书。
了解顶级公司的员工如何掌握热门技能

该课程共有14个模块
欢迎阅读《算法》第二部分。
涵盖的内容
1个视频2篇阅读材料
我们定义了无向图 API,并考虑了邻接矩阵和邻接表的表示。我们介绍了搜索图的两种经典算法--深度优先搜索和广度优先搜索。我们还考虑了计算连接成分的问题,最后介绍了相关问题和应用。
涵盖的内容
6个视频2篇阅读材料1个作业
在本讲座中,我们将研究有向图。我们首先介绍有向图中的深度优先搜索和广度优先搜索,并描述从垃圾收集到网络爬行的各种应用。接下来,我们介绍一种基于深度优先搜索的算法,用于计算非循环数图的拓扑顺序。最后,我们实现了计算数图强成分的 Kosaraju-Sharir 算法。
涵盖的内容
5个视频1篇阅读材料1个作业1个编程作业
在本讲座中,我们将研究最小生成树问题。首先,我们将考虑该问题的通用贪婪算法。接下来,我们考虑并实现该问题的两种经典算法--Kruskal 算法和 Prim 算法。最后,我们将讨论一些应用和未决问题。
涵盖的内容
6个视频2篇阅读材料1个作业
在本讲座中,我们将研究最短路径问题。我们首先分析最短路径的一些基本性质和该问题的通用算法。我们将介绍并分析针对权重为非负的最短路径问题的 Dijkstra 算法。接下来,我们将考虑一种针对 DAG 的更快算法,即使权重为负也能奏效。最后,我们将介绍针对无负循环的边加权数字图的 Bellman-Ford-Moore 算法。我们还考虑了从内容感知填充到套利的各种应用。
涵盖的内容
5个视频1篇阅读材料1个作业1个编程作业
在本讲座中,我们将介绍最大流量和最小切割问题。我们从 Ford-Fulkerson 算法开始。为了分析其正确性,我们建立了最大流-最小切定理。接下来,我们考虑使用最短增量路径规则高效实现 Ford-Fulkerson 算法。最后,我们考虑了一些应用,包括双网匹配和棒球消除。
涵盖的内容
6个视频2篇阅读材料1个作业1个编程作业
在本讲座中,我们将讨论字符串和相关对象的专门排序算法。我们首先使用一个子程序对小范围内的整数进行排序。然后,我们将考虑两种经典的径向排序算法--LSD 和 MSD 径向排序。接下来,我们考虑一种特别高效的变体,它是 MSD 径向排序和 quicksort 的混合体,被称为 3-way radix quicksort。最后,我们将介绍后缀排序和相关应用。
涵盖的内容
6个视频1篇阅读材料1个作业
在本讲座中,我们将考虑使用字符串键的符号表的专门算法。我们的目标是建立一种与哈希算法一样快、甚至比二叉搜索树更灵活的数据结构。我们从多路尝试开始,接下来考虑三元搜索尝试。最后,我们将考虑基于字符的操作,包括前缀匹配和最长前缀,以及相关应用。
涵盖的内容
3个视频2篇阅读材料1个作业
在本讲座中,我们将讨论在一段文本中搜索子串的算法。我们从最坏情况下运行时间为二次方的暴力算法开始。接下来,我们考虑巧妙的 Knuth-Morris-Pratt 算法,它的运行时间在最坏情况下保证是线性的。然后,我们介绍 Boyer-Moore 算法,它的运行时间在典型输入情况下是亚线性的。最后,我们考虑 Rabin-Karp 指纹算法,该算法巧妙地利用散列来解决子串搜索和相关问题。
涵盖的内容
5个视频1篇阅读材料1个作业1个编程作业
正则表达式是一种指定字符串集合的方法。本讲座的主题是著名的 grep 算法,它可以确定给定文本是否包含字符串集合中的任何子串。我们将研究利用第 1 周的数图可达性实现的高效实现。
涵盖的内容
5个视频2篇阅读材料1个作业
我们研究并实现了几种经典的数据压缩方案,包括运行长度编码、哈夫曼压缩和 LZW 压缩。我们从第一原理出发,使用我们为此目的开发的二进制数据操作 Java 库,并以之前讲座中的优先级队列和符号表实现为基础,开发出高效的实现方法。
涵盖的内容
4个视频1篇阅读材料1个作业1个编程作业
本周的讲座围绕最大流和最短路径等问题解决模型的思想展开,新问题可以表述为这些问题的一个实例,然后用经典高效的算法来解决。为了使课程更加完整,我们将介绍理论计算机科学中的经典未解问题,该问题以算法效率概念为中心,引导我们寻找困难问题的高效解决方案。
涵盖的内容
4个视频2篇阅读材料1个作业
线性规划是解决问题的典型模型,而求解线性规划的单纯形法是应用最广泛的算法之一。在本讲座中,我们将概述运筹学中的这一核心主题,并介绍它与我们所考虑的算法之间的关系。
涵盖的内容
4个视频1篇阅读材料1个作业
是否存在一种通用的问题解决模型,我们想要解决的所有问题都可以归结为这种模型,并且我们知道一种有效的算法?您可能会惊讶地发现,我们并不知道这个问题的答案。在本讲座中,我们将介绍复杂度类别 P、NP 和 NP-complete,提出著名的 P = NP 问题,并结合本课程所涉及的算法来探讨其含义。
涵盖的内容
6个视频1篇阅读材料1个作业
位教师


人们为什么选择 Coursera 来帮助自己实现职业发展

Felipe M.

Jennifer J.

Larry W.

Chaitanya A.
学生评论
- 5 stars
93.59%
- 4 stars
5.23%
- 3 stars
0.48%
- 2 stars
0.24%
- 1 star
0.44%
显示 3/2043 个
已于 Jun 29, 2019审阅
Dr. Sedgewick is simply amazing. I enjoy how he motivates the need for efficient algorithms and applications. I only wish he would offer more courses!
已于 Feb 7, 2020审阅
As always, I learned a lot from the courses from Professor Robert. Really great course, and I would like to recommend to anyone who is interested in programming neatly and elegantly.
已于 Jan 12, 2024审阅
Great quality of academic content. Mr Sedgewick is a great lecturer and the programming tasks, though hard, help you dive deep into the Java implementations.
从 计算机科学 浏览更多内容

Princeton University

École normale supérieure

Northeastern University

Rice University



