Skip to content

Commit

Permalink
docs: 更新 toc、添加 ppl 课程内容 (#124)
Browse files Browse the repository at this point in the history
  • Loading branch information
TonyCrane authored Feb 3, 2024
1 parent 063742c commit 6f4b058
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 94 deletions.
137 changes: 52 additions & 85 deletions docs/major_basic/theory_of_computation/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,118 +6,85 @@
<span class="badge is-badge">IS 专业基础</span>
</div>

!!! warning "21 级(23 秋冬)课程内容有较大变化,如需 20 级金小刚老师版本内容请查阅修改历史"

## 课程学习内容

课程主要内容为《计算理论基础》(*Elements of the Theory of Computation*) 的前五章
课程主要内容为计算理论的基础知识,包括

* 第一章 集合、关系与语言
- 课程基本概念、常用记号和常用证明方法的说明,以及**正则表达式****正则语言**
- 定义了正则表达式,利用映射从正则表达式定义出正则语言
- 第一章之后,正则语言记号便不再严格,直接**使用正则表达式表示正则语言**
* 第二章 有限自动机 (Finite Automata, FA)
- **确定性****非确定性**的有限自动机 (DFA 和 NFA)
- 语言、自动机与正则表达式
- 课程基本概念、常用记号、语言的定义
- **确定性****非确定性**的有限自动机(DFA 和 NFA)
- DFA 和 NFA 的等价性,NFA 转 DFA 的方法
- **正则语言** FA 的等价性,互相转换的方法
- **正则语言**的定义,正则语言和 FA 的等价性,互相转换的方法
- 正则语言封闭运算,**泵定理** (pumping theorem),如何证明不正则
- DFA 的状态最小化方法(有星号,似乎没考过)
- FA 相关算法(有星号,似乎没考过,但有助于复习理解,且小测出现过)
* 第三章 上下文无关语言 (Context-Free Language, CFL)
- 上下文无关**语法** (CFG) 和**语法分析树** (parse tree)
- **下推自动机** (pushdown automata, PDA) ,PDA 和 CFG 等价性,互相转换的方法
- DFA 的状态最小化方法
* 上下文无关语言 (Context-Free Language, CFL)
- 上下文无关**语法** (CFG) 的定义,CFG 和 CFL 的关系
- Chomsky 范式 (CNF),转换 CNF 的方法
- **下推自动机** (pushdown automata, PDA),PDA 和 CFG 等价性
- CFL 封闭运算,**泵定理**,如何证明不是 CFL
- CFG 相关算法,Chomsky 范式 (CNF) ,CFG 转 CNF ,基于 CNF 的动态规划成员判定算法(无星号,但似乎没考过)
* 第四章 图灵机 (Turing Machine, TM)
- TM, TM 的计算(**判定/半判定**语言,**计算函数**),递归函数
- **k-tape TM****standard TM** (STM) 的等价性,**nondeterministic TM** (NTM) 和 STM 的等价性
- (无限制)**语法** (grammar, or unrestricted grammar),以及和 STM 的等价性
- **原始递归函数**,μ-递归函数,μ-递归和递归的等价性
* 第五章 不可判定性 (Undecidability)
* 图灵机 (Turing Machine, TM) 基础
- TM 定义、TM 构建、TM 的功能(**判定/半判定**语言,**计算函数**),递归函数
- 变种图灵机、非确定性图灵机与标准确定性图灵机 (STM) 的等价性
* 不可判定性 (Undecidability)
- Church-Turing 论题
- **通用图灵机** (UTM) 的编码与实现
- **停机问题**,递归/递归可枚举语言的封闭运算
- **规约**,问题的不可判定性证明
- 递归语言性质,**枚举**和字典序枚举,Rice 定理
* 第六章 计算复杂性 (20 级未讲)
* 第七章 NP 完全性 (20 级未讲)

为了向大家说明这门课内容看似少实际多、补天困难,我刻意把内容介绍写成了复习提纲的形式。上课基本讲前五章,第六、七章可能会视情况讲解(但考试基本全是前五章的内容,20 级未讲第六、七章)。
- 可判定问题的图灵机构建方法与**规约**
- **停机问题**,及可由停机问题规约出的其他问题的不可判定性证明
- Rice 定理与通用的可/不可判定或半判定的证明方法
- 程序的自输出问题与 Recursion 定理、语言的**枚举**和字典序枚举(略讲)
* 函数的可计算性
- 原始递归函数定义、μ 递归函数定义、μ 递归函数与可计算函数的等价性
* 复杂度理论
- 时间复杂度,P、NP、NP 完全问题的定义及与图灵机关系
- SAT/3-SAT 问题、Clique 问题、Vertex Cover 问题属于 NP 完全问题的证明
- 空间复杂度,PSPACE、NPSPACE、EXP 问题的定义与关系
- Savitch's Theorem 与 Hierarchy Theorem

为了向大家说明这门课内容看似少实际多、补天困难,我刻意把内容介绍写成了复习提纲的形式。

### 先修要求

- 离散数学理论基础
- 高级数据结构与算法分析

第一章前面大部分都是离散数学的基础,第五章不可判定性、第六章计算复杂性都在 ads 的课程基础上更容易理解,当然就算你这两门课学了个寂寞也没关系,跟着课听问题不大。

## 课程教材

*《计算理论基础》Elements of the Theory of Computation*

有中文版,但有一些小错误,英文版笔者未发现错误。中文版部分地方没有照抄英文版,做出了一些修改,经过笔者和一位 dl 的合力验证英文版部分地方确实太拗口,中文版做出了一些更易于理解的修改,所以需要批判性阅读。 PPT 上有很多错误,有的地方讲得不太清楚,如果不理解看看教材可能更容易理解。第五章无论 PPT 还是教材都讲得非常拗口难以理解,需要下下工夫。

## 分数构成

根据 jxg 于 2022.9.12 介绍的规则,开学第一周可以邮件申请**免听**,免听与不免听具有不同的分数构成。

=== "不免听"

* 作业(10%)

第 1-4 章共 4 次作业,1 次 2.5 分,一般完整写了且交了就给分,如果没写完或被发现抄袭可能会扣分。
有了这两门课的基础一些知识可以更容易理解,当然就算你这两门课学了个寂寞也没关系,跟着课听问题不大。

* 小测(20%)

突击性小测,19 级为关于第 2 章、第 3 章的两次小测,在对应章节教完一段时间之后的课上进行。20 级因疫情缘故只测了第 2 章的一次小测。

* 小论文(10%)

【理论计算机科学课程论文要求】
1. 内容:可与如下主题相关,但不限于此:
1. 理论计算机科学的发展趋势;
2. 围绕理论计算机科学的两个关键问题:可计算性以及计算复杂性相关的研究与讨论;
3. 对于理论计算机科学这门课程学习的体会、思考与建议等。
2. 论文长度要求:论文字数不限,但要求个人原创,有感而发。
3. 截止时间:20 级是整个寒假
4. 提交方式:请发至如下地址:xiaogangj AT zju.edu.cn

> “我本来呢,是给大家列一个列表的,但我后来发现大家不过是网上随便抄抄的东西。那我个人觉得,就是这个最后的十分,我需要你们来真正地思考。什么是真正的计算机科学?所以就这个计算科学相关的问题来做思考。那么我就不做列表,因为我觉得那个列表不好,最后后来很多人把自己实验室里胡乱学的一篇文章(拿来应付这个任务)。我的课不需要,我更需要的是来思考思想。所以我希望最后在考试之前,最后每个人提交一篇可长可短,但是必须是自己思考的东西。你可以长可以短,那我觉得你短了之后,你能解决问题就可以,是吧?” —— jxg, 2022.9.12

* 考试(60%)

20 级的期末,普通班的试卷很灵活,毛宇尘下手很狠;而我们图灵的试卷则相对基本都是套路题,没有那么难。但是改卷似乎比较严格,且试卷是由 jxg 本人批改,分数汇总也由 jxg 进行。
## 任课教师

=== "免听"
21 级图灵的计算理论课改为由毛宇尘老师教授。(20 级是只有金小刚老师教授)

* 小论文(10%)
毛哥讲课十分清晰有逻辑,跟住老师一定可以学懂这门课的内容,毛哥全程使用 iPad 手写投屏(不过课后不会发布讲义,需要自己跟住记笔记),概念都会手写、证明过程也会一步一步推导。当然毛哥也有一些奇怪的要求,比如不允许前排同学使用电脑,所谓防止屏幕影响其他同学听课(不过一学期上下来这样效果确实还不错)。

要求同 “不免听”
因为这门课只有图灵一个班,所以讲课内容、作业、小测、考试都由毛哥自己发挥,内容相比《计算理论》有一定拓展。作业比较偏向理论与证明,更多考察是否真的掌握了这些知识,而非只是知道做题方法,当然小测和考试也都是这个风格,只要掌握了课上讲的东西,是肯定能写出东西的。除此之外会有三次讨论的内容,说是讨论其实就是开放性且占分数的少量作业,好好完成就可以

* 考试(90%)
## 课程教材

对于免听的同学来说,考试容错率比较低,如果考差的话很可能绩点会很不好看。但是也有很多免听的 dl 获得了很好的绩点,不免听的同学的小测失手也可能成为拉低成绩的因素。
21 级无教材,全靠毛哥手写讲义。20 级曾用教材如下:

> “当然有人会觉得金老师你这个评分不合理,由于这个课是我在讲,所以合不合理是我来定。也就是说,你们没有这个权力(权利)来评断这个不合理、合理,你们只有执行。” —— jxg, 2022.9.12
*《计算理论基础》Elements of the Theory of Computation*

## 任课教师
有中文版,但有一些小错误,英文版笔者未发现错误。中文版部分地方没有照抄英文版,做出了一些修改,经过笔者和一位 dl 的合力验证英文版部分地方确实太拗口,中文版做出了一些更易于理解的修改,所以需要批判性阅读。

图灵专属的计算理论课程只由金小刚老师一个人教授。
## 分数构成

从上面的一些引述也可以看出金小刚老师的一些个人特色,下面再具体讲一些:
- 作业(0%)
- 不占分数,也不会要求上交,每周会发一些题然后下一周发布答案,作业可以很好地了解老师的出题风格,因此对小测和考试的帮助还是很大的
- 小测(20%)
- 21 级进行了两次小测,虽然考验的是是否理解了课上的内容但难度并不算低,不过最后会开根号乘十来调分
- 讨论(20%)
- 21 级讨论有 3 次,一次是开放性的问题(问一个语言是不是正则的),一次是自学课外的定理(Ogden's Lemma)来证明,还有一次是写一个输出自身的程序,课上会抽同学起来讲,这部分的给分比较慷慨,只要认真完成了应该都能拿到满分
- 期末考试(60%)
- 期末考试的难度不会很大,如果平时跟上的话复习的东西也没有很多,如毛哥所说,“历年卷是没有用的”,因此主要参考的就是小测和作业的题目

1. jxg 前四章讲得非常清楚,笔者个人认为比毛宇尘老师讲得更清楚。
2. jxg 第一节课可能会让部分同学血压飙升,但是之后他就不会这样上课了。(但是可能偶尔穿插5分钟的即兴)
3. 20 级不知道是不是因为网课让 jxg 讲课太慢了,他用两节课快速过完了理解难度极高的第五章,讲得不太清楚,而这一块是必考的。
4. 由于这门课是众所周知的图灵专属、计算理论换皮课,大家在选课上并没有选择。但是可以选择听 myc 老师的计算理论课,如果免听的话可以直接过去听,不免听的话要注意突击小测,或者听智云。

## 参考资料
- [ZhouTimeMachine 的笔记](https://zhoutimemachine.github.io/note/courses/toc/)

- TonyCrane 的课程笔记:https://note.tonycrane.cc/cs/tcs/toc/
- HobbitQia 的课程笔记:https://note.hobbitqia.cc/TCS/
- [ZhouTimeMachine 的笔记](https://zhoutimemachine.github.io/note/courses/toc/)(20 级的 jxg 版本)

## 学习建议
笔者个人认为 jxg 的前 4 章加上 myc 的第 5 章授课可能是不错的选择,部分 dl 认为看教材也很不错,这本教材的中文版虽然有一些错误也还算不错,如果已经掌握了看英文教材的能力那么看英文教材再好不过了,也有部分 dl 认为教材太老太绕,那么可以看一些别的参考书。

如果有的题目技巧性非常强让你写不出来,也不必心态爆炸,毕竟理论计算机科学确实很多地方是很讲究灵感的,可计算性理论、计算复杂性理论也有很多问题非常困难甚至尚未解决,一道题可能加了一个约束就从简单题变成了未决题。这门课正如名字所说,是一门“导引”,有的人可能就此打开了理论计算机科学的大门,有的人可能借此意识到自己的门被锁死了,这都是有意义的。曾有佬云,“小学奥数” 。所以能为则为之,不能为也要做好心理准备,学得差不多也就行。

免听的同学建议平时还是要学,否则可能会被温水煮青蛙,而这门课平时不学最后补天是非常困难的,成绩可能非常难看。建议如果不喜欢金小刚老师的授课特色,可以选择毛宇尘老师的《计算理论》进行旁听。考试要注意,免听的 90% 注定了低容错率,平时免听换来的时间需要用来更好地学习,不要仅仅是耗散在隐危之上、安逸之中了
计院很少有毛哥这种能把理论课讲得非常流畅的老师,需要好好珍惜,课上跟住老师这门课可以说完全不成问题。而且毛哥给分也可以说非常慷慨,和之前的金小刚完全形成了鲜明对比(x)。同时考试也没有套路题,不需要靠历年卷,只要弄懂课上内容加上看一看作业和小测题就足够了。有任何问题也都可以在课后去找毛哥问,每次都会非常清晰地给出解答

**考前建议一定要看看历年卷**。金小刚老师还是喜欢出套路题的,可能面向历年卷的复习拟合度会非常高。同时金小刚老师最后一节课可能会讲解一些题目,要认真听,漏题不至于,但是对单纯解题能力的提高还是很有帮助的。
2 changes: 1 addition & 1 deletion docs/major_elective/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
|[人工智能逻辑](ai_logic/)|3.0|二(春夏)|×||×|较完善✅|
|[技术沟通](technology_communication/)|2.0|二(夏)||||较完善✅|
|面向信息安全的信号处理|2.0|三(秋冬)|×|×|||
|[编程语言原理](../major_module/programming_principle/)|2.0|三(秋冬)||×|||
|[编程语言原理](../major_module/principle_of_programming_languages)|2.0|三(秋冬)||×||较完善✅|
|[脑启发人工智能导论](brain_inspired_ai/)|3.0|三(冬)|×||×||
|[计算机科学思想史](../major_module/history_of_cs_ideas/)|2.0|三(春夏)|||||
|[计算摄影学](computational_photography/)|4.0|三(春夏)||×|×|较完善✅|
Expand Down
2 changes: 1 addition & 1 deletion docs/major_module/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
|:--|:--|:--|:--|:--|
|[数值分析](numerical_analysis/)|2.5|二(秋冬)|计算机科学|较完善✅|
|[应用运筹学基础](applied_operations_research/)|3.5|三(秋冬)|计算机科学|较完善✅|
|[程序设计方法学](programming_principle/)|2.0|三(秋冬)|计算机科学||
|[编程语言原理](principle_of_programming_languages)|2.0|三(秋冬)|计算机科学|较完善✅|
|[计算机科学思想史](history_of_cs_ideas/)|2.0|三(春夏)|计算机科学||
|[数据挖掘导论](data_mining/)|2.0|三(夏)|计算机科学|较完善✅|
|[汇编与接口](assembly_interface/)|4.5|三(秋冬)|计算机系统|较完善✅|
Expand Down
Loading

0 comments on commit 6f4b058

Please sign in to comment.