名校公开课 / 麻省理工 / 经典

算法设计与分析

Design and Analysis of Algorithms6.046J麻省理工Spring 2015免费
分治随机算法网络流NP 完全近似算法分布式算法

这门课学什么

这是 6.006 的后续课。内容包括分治、均摊分析、随机算法、网络流、线性规划、NP 完全、近似算法、分布式算法和密码学算法。课程有讲座和习题课视频、讲义、作业和考试。

内容摘要

这门课是 6.006 的后续课,2015 年春季由德迈纳(Erik Demaine)、德瓦达斯(Srini Devadas)和林奇(Nancy Lynch)讲授。重点从“会用算法”转到“会设计和证明算法”。课程按设计范式组织:分治、均摊、随机化、动态规划、贪心、增量改进和线性规划。

课程分 3 段。第 1 段(第 1–9 讲)讲分治(凸包、中位数、FFT、van Emde Boas 树)、均摊分析、随机化算法(快速排序、跳表、全域哈希和完美哈希)和范围树。第 2 段(第 10–18 讲)讲高级动态规划、全源最短路径、最小生成树、最大流最小割、匹配和线性规划,再讲 NP 完全、近似算法和固定参数算法。第 3 段(第 19–24 讲)讲分布式算法、密码学中的哈希和加密,以及缓存无关算法。

课程有 10 份习题集,题目要求写出算法、证明正确性并分析运行时间。另有 2 次测验和 1 次期末考试。播放列表还收录了 10 段习题课录像,补充 B 树、主定理、网络流应用和旅行商近似这些例题。

学完以后,你能针对新问题选择设计范式,写出严格的正确性证明,并判断问题是否 NP 难。遇到 NP 难问题时,你知道近似算法和固定参数算法这两条退路。

三位老师各有侧重。德迈纳讲数据结构和复杂度,德瓦达斯讲随机化和密码学,林奇讲分布式算法。课程难度明显高于 6.006,适合打算深入算法理论的人。

为什么值得学

它讲进阶程序员必须掌握的算法思想。三位讲师都是一线研究者,Nancy Lynch 是分布式计算理论的奠基人之一。

课程信息

学校
麻省理工(MIT)
课程号
6.046J
讲师
埃里克·德迈纳(Erik Demaine)、斯里尼·德瓦达斯(Srini Devadas)、南希·林奇(Nancy Lynch)
学期
Spring 2015
平台
MIT OpenCourseWare
费用
免费
难度
中级
学时
34 段视频(讲座 + 习题课)
先修
学过 6.006 和 6.042J 或同等课程。
材料
视频、讲义、作业、考试
许可证
CC BY-NC-SA 4.0
去课程主页 ↗看视频 ↗
课程是英文的。本页的介绍、摘要和大纲由极客教育原创撰写,讲次标题为中文意译。开课时间、收费和链接以官方页面为准。

课程大纲 · 共 24 节

大纲依据:Spring 2015 OCW 课程日历(24 讲)(查看原始页面 ↗)

  1. 1
    课程概述与区间调度Course Overview, Interval Scheduling

    介绍课程的设计范式,用区间调度问题对比贪心解法和带权版本的动态规划解法。

  2. 2
    分治:凸包与中位数查找Divide & Conquer: Convex Hull, Median Finding

    用分治求平面点集的凸包,并讲线性时间的选择算法。

  3. 3
    分治:快速 Fourier 变换Divide & Conquer: FFT

    用 FFT 在 O(n log n) 时间内完成多项式乘法。

  4. 4
    分治:van Emde Boas 树Divide & Conquer: van Emde Boas Trees

    用递归分块的结构在 O(log log u) 时间内支持前驱和后继查询。

  5. 5
    均摊:均摊分析Amortization: Amortized Analysis

    讲聚合法、记账法和势能法 3 种均摊分析方法。

  6. 6
    随机化:矩阵乘积验证与快速排序Randomization: Matrix Multiply, Quicksort

    区分 Monte Carlo 算法和 Las Vegas 算法,用矩阵乘积验证和随机快速排序做例子。

  7. 7
    随机化:跳表Randomization: Skip Lists

    用随机分层的链表实现期望 O(log n) 的搜索,并给出高概率界。

  8. 8
    随机化:全域哈希与完美哈希Randomization: Universal & Perfect Hashing

    用全域哈希族保证期望性能,用两级结构实现静态完美哈希。

  9. 9
    增强:范围树Augmentation: Range Trees

    增强平衡搜索树,回答一维和多维的范围查询。

  10. 10
    动态规划:高级动态规划Dynamic Programming: Advanced DP

    用多个例题练习子问题的设计和状态转移的推导。

  11. 11
    动态规划:全源最短路径Dynamic Programming: All-Pairs Shortest Paths

    用动态规划和 Floyd-Warshall 算法求全源最短路径,并讲 Johnson 算法。

  12. 12
    贪心算法:最小生成树Greedy Algorithms: Minimum Spanning Tree

    证明最小生成树的贪心选择性质,讲 Prim 算法和 Kruskal 算法。

  13. 13
    增量改进:最大流与最小割Incremental Improvement: Max Flow, Min Cut

    定义流网络,用增广路径求最大流,并证明最大流最小割定理。

  14. 14
    增量改进:匹配Incremental Improvement: Matching

    把二分匹配和棒球淘汰问题归约成最大流问题。

  15. 15
    线性规划:建模、归约与单纯形法Linear Programming: LP, Reductions, Simplex

    把优化问题写成线性规划,介绍对偶和单纯形法。

  16. 16
    复杂度:P、NP、NP 完全与归约Complexity: P, NP, NP-completeness, Reductions

    用多项式时间归约证明问题是 NP 完全的。

  17. 17
    复杂度:近似算法Complexity: Approximation Algorithms

    为 NP 难问题设计多项式时间的近似算法,并证明近似比。

  18. 18
    复杂度:固定参数算法Complexity: Fixed-Parameter Algorithms

    让运行时间的指数部分只依赖一个小参数,以顶点覆盖为例演示这类算法。

  19. 19
    同步分布式算法:对称破缺与最短路径生成树Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees

    在同步网络模型中讲怎样打破节点之间的对称,并构造最短路径生成树。

  20. 20
    异步分布式算法:最短路径生成树Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees

    在消息延迟不确定的异步模型中构造最短路径生成树,并分析消息复杂度。

  21. 21
    密码学:哈希函数Cryptography: Hash Functions

    介绍随机预言模型和密码学哈希函数应满足的性质,以及哈希函数的应用。

  22. 22
    密码学:加密Cryptography: Encryption

    讲对称加密、Diffie-Hellman 密钥交换和 RSA 公钥加密。

  23. 23
    缓存无关算法:中位数与矩阵Cache-Oblivious Algorithms: Medians & Matrices

    介绍外存模型和缓存无关模型,分析中位数查找和矩阵乘法的缓存效率。

  24. 24
    缓存无关算法:搜索与排序Cache-Oblivious Algorithms: Searching & Sorting

    用 van Emde Boas 布局做搜索,并讲缓存无关的排序思路。

麻省理工的其他经典课