由大名鼎鼎的普林斯顿大学推出的慕课“算法(1)”和“算法分析”今天都在Coursera上开讲,真是广大程序猿小伙伴的福音。这两门课均由计算机系创会主席及教授Robert Sedgewick主讲,这位大神还是Adobe的董事会成员。“算法(1)”这门课以前开过,在小猿们中的口碑极好,“算法分析”是首次开课,有Robert托底肯定不会差的,不要错过哦。
算法(1)报名
算法分析报名
算法
课程概述
本课程主要涵盖了所有认真程序员所需知道的算法和数据结构要点,重点强调Java实现的应用和科学性能分析。第一部分涵盖了基本的可迭代数据类型、排序和搜索算法。
介绍基础数据类型、算法和数据结构,强调Java实现的应用和科学性能分析。特定主题包括:并查算法、基本可迭代数据类型(栈、队列和背包)、排序算法(快速排序、归并排序、堆排序)及应用、优先队列、二分查找树、红黑树、哈希表、符号表应用。
背景知识
你只需要对Java编程有基本的熟悉程度。这门课主要针对的是,对工程或科学感兴趣的大一大二学年本科生,以及对编程具有兴趣和一定基础的高中学生及专业人员。
参考资料
虽然这门课被设计为自给自足式的,但希望在六周课程以外扩展所学知识的同学,可以在我们编写的教材中找到更深入广泛的相关内容:《算法》第四版,艾迪生韦斯利出版社出版。
授课形式
每周将有两堂课,每堂课75分钟。每堂课都被分为4到6段,由互动式测试问题分隔开来。这些测试问题能够帮你加深理解课程内容。此外,这门课每周还有一次笔头作业和一次编程作业。这门课还有一个期末考试。
常见问题
本课程会讲到哪些算法和数据结构?
第一部分将集中探讨基础数据结构、排序、查找。主题包括:并查算法、二分查找、栈、队列、背包、插入排序、选择排序、希尔排序、快速排序、三路快排、归并排序、堆排序、二分堆、二分查找树、红黑树、分离链接和线性探测哈希表、Graham扫描、kd树。
第二部分将集中探讨图和字符串处理算法。主题包括:深度优先搜索、宽度优先搜索、拓扑排序、Kosaraju-Sharir算法、Kruskal算法、Prim算法、Dijkistra算法、Bellman-Ford算法、Ford-Fulkerson算法、LSD基数排序算法、MSD基数排序算法、三路基数快排算法、多路trie算法、三元查找trie算法、Knuth-Morris-Pratt算法、Boyer-Moore算法、Rabin-Karp算法、正则匹配、行程长度编码、Huffman编码、LZW压缩、Burrows-Wheeler变换。
网上还有其它相关资源吗?
有,我们的免费图书网站包含教材概要、网络练习、所有相关算法的Java实现(提供一键下载)、测试数据以及很多其它资源。
这门课同“算法设计与分析”课程有何不同?
两门课是互补的,这门课更强调编程和代码开发,而那门课更注重数学和证明。这门课侧重于在实际应用的实现和测试中学习各种算法,而那门课侧重于在解释算法为何有效的数学建模中学习算法。在典型计算机科学课程设计中,这门课针对的是大一和大二学生,而那门课针对的是大三和大四学生。
我不是计算机专业学生,这门课适合我吗?
没问题,这门课适用于任何希望使用计算机解决大型问题的人(因为大型问题需要高效算法)。在普林斯顿的所有学生中,有超过25%的人选过这门课,包括工程、生物、物理、化学、经济等诸多其它专业的学生。选修这门课的远远不只是计算机科学专业的学生。
不熟悉Java编程的话,能选这门课吗?
我们的核心理念是,算法在实现和测试中是最容易理解的。Java在这里只是用于说明,我们在代码中特意避开了稀奇古怪的内容。就算你使用其它语言,这门课的代码你也应该能轻松适应。不过,我们要求这门课的编程作业用Java提交。如果你有其它语言的编程经验,通过我们的教材《Java编程导论:跨学科研究方法》及相关免费图书网站来学习我们的编程模型对你应该会有帮助。
没有任何编程基础的话,还能选这门课吗?
也许不行。
学完这门课后,普林斯顿大学会为我颁发证书吗?
这门课不会颁发证书、成就声明等任何凭证。
算法分析
本课程是普林斯顿大学的慕课,目标是精确定量预测大型组合结构的性质。此外,这门课还在算法分析应用和基本结构(例如排列、树、字符串、字、映射)的语境下,涵盖了生成函数、实渐近、符号法等内容。
课程概述
算法分析课程的目标是精确定量预测大型组合结构的性质。相关理论在最近数十年间变得至关重要,无论是对计算机科学中的科学算法分析,还是对其它学科中科学模型的研究,包括概率论、统计物理、计算生物学和信息理论等学科。这门课在算法分析应用的语境中,涵盖了递归关系、生成函数、渐近和基本结构(例如排列、树、字符串、字、映射)。
课程大纲
第一讲:算法分析
第二讲:递归
第三讲:使用GF求解递归
第四讲:渐近
第五讲:符号法
第六讲:树
第七讲:排列
第八讲:字符串和trie树
第九讲:字和映射
背景知识
这门课要求知道微积分的数学知识和对Java这类现代编程语言的熟悉。 算法第一部分所讲授的基本算法和数据结构知识对这门课会有帮助,但不是必需的。视频从算法分析到解析组合学:菲利普·弗拉乔利特带你领略是选看内容(因为它包含一些进阶内容,超出了本课程的范围),该视频概述了一些历史,对这门课和解析组合学进行了介绍。
参考资料
这门课基于教材:《算法分析导论》,塞奇威克和弗拉乔利特著。教材相关免费网络内容可以访问http://aofa.cs.princeton.edu/home。
授课形式
每周会有一堂课(大约80分钟)和一次作业。
常见问题
学完这门课后,普林斯顿大学会为我颁发证书吗?
这门课不会颁发证书、成就声明等任何凭证。