名校公开课 / 普林斯顿 / 经典

算法(上)

Algorithms, Part ICOS 226普林斯顿self-paced免费
并查集排序优先队列二叉搜索树散列表

这门课学什么

这是普林斯顿数据结构与算法课的前半部分。内容包括并查集、栈与队列、归并排序、快速排序、二叉搜索树和散列表。所有算法用 Java 实现,编程作业自动评分。

内容摘要

这门课是普林斯顿 COS 226 的前半部分,讲程序员必须掌握的基础数据结构和算法。每个主题都按同一条主线展开:先定义问题和 API,再写出 Java 实现,最后用实验和数学模型分析性能。内容和教材《算法(第 4 版)》一一对应。

课程分 3 个阶段。第 1 阶段讲方法:用并查集(union-find)展示一个算法从慢到快的改进过程,再讲怎样用科学方法估算运行时间和内存。第 2 阶段讲排序:先讲栈和队列,再依次讲初级排序、归并排序、快速排序和优先队列。第 3 阶段讲查找:从符号表和二叉搜索树讲到红黑树、kd 树和散列表,最后讲符号表的实际用例。

课程有 5 个编程作业,全部自动评分:渗透模型(Percolation)、双端队列与随机队列、共线点检测、8 数码问题求解和 kd 树。评分程序检查正确性、运行时间、内存用量和代码风格。多数模块还配 1 组不计分的面试题,练习把课上的算法用到新问题上。

学完以后,学生能独立实现常用的排序和查找结构,能为具体问题选出合适的结构,并能估算程序在大数据量下的运行时间。下半部分 Algorithms, Part II 接着讲图算法和字符串算法。

讲课用大量幻灯片动画,逐步演示算法每一步怎样改变数据。讲完实现后,讲师会给出实测数据和数学分析,并说明这个算法在真实系统里的用法。每个模块约 1–2 小时视频,作业的工作量明显大于视频。

为什么值得学

这是公认最好的算法 MOOC 之一,Coursera 上 12000 多条评价打出 4.9 分。讲师 Sedgewick 是快速排序分析的权威,也是经典教材《算法》的作者。

课程信息

学校
普林斯顿(Princeton)
课程号
COS 226
讲师
凯文·韦恩(Kevin Wayne)、罗伯特·塞奇威克(Robert Sedgewick)
学期
self-paced
平台
Coursera
费用
免费
难度
中级
学时
约 5 周 × 每周 10 小时
先修
需要会用 Java 或另一种语言编程。
材料
视频、幻灯片、作业、代码、教材
许可证
未注明
去课程主页 ↗
课程是英文的。本页的介绍、摘要和大纲由极客教育原创撰写,讲次标题为中文意译。开课时间、收费和链接以官方页面为准。

课程大纲 · 共 13 节

大纲依据:Coursera 模块列表(13 个模块,约 60 段视频;结构取自 api.coursera.org onDemandCourseMaterials.v2 与课程页)(查看原始页面 ↗)

  1. 1
    课程导论Course Introduction

    介绍课程范围、学习算法的理由,以及配套教材和书站。

  2. 2
    并查集Union−Find

    以动态连通性问题为例,从 quick-find、quick-union 逐步改进到加权和路径压缩的实现。作业是用并查集估算渗透阈值。

  3. 3
    算法分析Analysis of Algorithms

    先用实验测量运行时间,再用数学模型和增长阶分类解释结果。最后讲大 O 一类记号和 Java 对象的内存估算。

  4. 4
    栈与队列Stacks and Queues

    用链表和可变长数组实现栈和队列,并讲 Java 泛型和迭代器。作业是实现双端队列和随机队列。

  5. 5
    初级排序Elementary Sorts

    讲选择排序、插入排序、希尔排序和随机洗牌,并用排序求平面点集的凸包。

  6. 6
    归并排序Mergesort

    讲自顶向下和自底向上的归并排序,证明基于比较的排序下界,并讲比较器和稳定性。作业是找出平面上的共线点。

  7. 7
    快速排序Quicksort

    讲随机化快速排序、快速选择和处理重复键的三向切分,并分析 Java 系统排序的设计取舍。

  8. 8
    优先队列Priority Queues

    用二叉堆实现优先队列,由此得到堆排序,选学部分讲事件驱动模拟。作业是用 A* 搜索求解 8 数码问题。

  9. 9
    初级符号表Elementary Symbol Tables

    定义符号表 API,比较无序链表和有序数组两种实现,再讲二叉搜索树的查找、有序操作和删除。

  10. 10
    平衡搜索树Balanced Search Trees

    讲 2-3 树和红黑树,保证查找和插入在最坏情况下也是对数时间。选学部分讲 B 树。

  11. 11
    二叉搜索树的几何应用Geometric Applications of BSTs

    讲一维和二维范围查找、线段相交、kd 树、区间搜索树和矩形相交。作业是实现 kd 树并做最近邻查询。

  12. 12
    散列表Hash Tables

    讲散列函数的设计、拉链法和线性探测,并比较散列表和平衡树各自适合的场景。

  13. 13
    符号表应用(选学)Symbol Table Applications

    用集合、字典、索引和稀疏向量 4 类例子,展示符号表在实际程序里的用法。

普林斯顿的其他经典课