Skip to content

Commit 85e45c1

Browse files
authored
docs: 更新理论计算机科学导引课程内容及 25 秋冬期末回忆卷 (#272)
1 parent 004b155 commit 85e45c1

3 files changed

Lines changed: 132 additions & 51 deletions

File tree

70.1 KB
Binary file not shown.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#show heading.where(level: 1): it => [
2+
#set align(center)
3+
#set text(size: 18pt, font: "FZXiaoBiaoSong-B05S")
4+
#it.body
5+
]
6+
7+
#set enum(numbering: "1.a)")
8+
#let poly = math.cal("P")
9+
#let np = math.cal("NP")
10+
#let bpp = math.cal("BPP")
11+
12+
= Introduction to Theoretical Computer Science
13+
14+
#align(center)[
15+
#text(size: 13pt,font: "STZhongsong",[2025-2026 秋冬期末])
16+
]
17+
18+
#align(center)[
19+
#text(size: 13pt,font: "STZhongsong",[图灵回忆卷])
20+
]
21+
22+
1. Write T if the statement is true, and F if it is false.
23+
24+
+ [] If $A$ is computable, then $A^*$ is computable.
25+
+ [] $exists$ a boolean function $F: {0,1}^m -> {0,1}^n$, such that there exists a circuit with at least $Omega(m 2^n)$ gates that computes $F$.
26+
+ [] Gate set {OR, NOT} is universal, in the sense that any boolean function can be computed by a circuit using only these 2 kinds of gates.
27+
+ [] To simulate multiple TMs with $k$ states in total using one TM, the resulting TM needs $Omega(k)$ states.
28+
+ [] To convert an NFA with $k$ states to a DFA, the resulting DFA has $Theta(2^k)$ states.
29+
+ [] Let a DFA with $k$ states recognize a regular language $L$. $L$ contains an infinite number of strings if and only if $L$ contains a string of length at least $k$.
30+
+ [] There exists a randomized algorithm that computes some problem with error rate at most $1/3$ if and only if there exists a randomized algorithm that computes the same problem with error rate at most $1/2026$.
31+
+ [] Probablistic Turing Machine is more powerful than normal Turing Machine, in the sense that it can compute some functions that normal Turing Machine cannot compute.
32+
+ [] If $f,g in poly$ and they are not constant functions, then $f <=_p g$.
33+
+ [] If $f <=_p g$ and $g in bpp$, then $f in bpp$.
34+
35+
2. (Regular Language and Automaton) Judge whether the following languages are regular. Prove your answer.
36+
1. $L_1 = { w x in {0,1}^* | x "as a binary number", x mod 3 = 2}$.
37+
2. $L_2 = { w 0 x in {0,1}^* | x "has strictly more 1s than" w}$.
38+
3. (Context-Free Language and Pushdown Automaton) Show that the language $L = { w 101 x in {0,1}^* | w^R "is a subsequence of" x}$ is a context-free language. (Note: *Subsequence* is not the same as *Substring*. For example, "abc" is a subsequence of "axbxc", but not a substring of it.)
39+
4. (Automaton) Let $A$ be a context-free language and $B$ be a regular language. Prove that $A \\ B = { w in {0,1}^* | w in A and w in.not B}$ is a context-free language. (Hint: You may conceptually run a PDA and a DFA in parallel.)
40+
5. (Reduction and Uncomputability) $f: {0,1}^* -> {0,1}$ is a function which takes 2 Turing Machines $M_1$ and $M_2$ as input, and $f(M_1, M_2) = 1$ if there exist at least 2026 strings on which $M_1$ and $M_2$ both halt. Prove that $f$ is uncomputable by reducing HALT to it. (Hint: You may let one of $M_1$ and $M_2$ halt on every input.)
41+
6. (存疑)(Time Complexity Classes) WSAT problem, based on SAT problem, is defined as follows: Given a boolean formula $phi$ in CNF form and every instance is OR of one to three literals (*Note: In WSAT literals are only allowed to be variables themselves and their negations are not allowed*), and an integer $k$, decide whether there exists a satisfying assignment to $phi$ such that *exactly* $k$ variables are assigned to 1.
42+
1. Prove that WSAT $in np$.
43+
2. Prove that VC $<=_p$ WSAT, where VC is the Vertex Cover problem.

docs/major/theory_of_computation/index.md

Lines changed: 89 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,87 +7,125 @@ grave: https://zju-turing.github.io/TuringCoursesGrave/major_basic/theory_of_com
77

88
# 理论计算机科学导引
99

10-
!!! warning "21 级(23 秋冬)课程内容有较大变化,如需 20 级金小刚老师版本内容请查阅修改历史"
10+
本课程与计算机学院开设的另一门讲解理论计算机科学的课程“计算理论”在某些内容上有不小的区别;具体表现为,对**计算复杂度理论**的分析内容更多。且每年的教材、课程内容都有一些变化。
1111

1212
## 课程学习内容
1313

14-
课程主要内容为计算理论的基础知识,包括
14+
课程主要内容为计算理论的基础知识,研究脉络是这几个问题
1515

16-
- 语言、自动机与正则表达式
17-
- 课程基本概念、常用记号、语言的定义
18-
- **确定性****非确定性**的有限自动机(DFA 和 NFA)
19-
- DFA 和 NFA 的等价性,NFA 转 DFA 的方法
16+
- 问题怎么描述?(对应编码)
17+
- 如何计算问题?(对应各种计算模型,例如电路、自动机与图灵机)
18+
- 所有问题都可以被计算吗?(对应可计算性)
19+
- 对于可计算的问题,计算它们需要多少资源?(对应复杂度理论,函数复杂类)
20+
21+
具体大纲如下:
22+
23+
- 编码与电路
24+
- 课程基本概念、常用记号、可数与不可数集合
25+
- 如何对问题进行编码,编码与可数的关系
26+
- 利用最初步的计算模型(布尔电路和对应的程序)进行计算,并研究其规模
27+
- 语言与自动机
28+
- 介绍语言与函数的对应关系
29+
- **确定性****非确定性****有穷自动机**(DFA 和 NFA)
30+
- DFA 和 NFA 的等价性与互相转换的过程
2031
- **正则语言**的定义,正则语言和 FA 的等价性,互相转换的方法
21-
- 正则语言封闭运算,**泵定理** (pumping theorem),如何证明不正则
22-
- DFA 的状态最小化方法
23-
- 上下文无关语言 (Context-Free Language, CFL)
24-
- 上下文无关**语法** (CFG) 的定义,CFG 和 CFL 的关系
25-
- Chomsky 范式 (CNF),转换 CNF 的方法
26-
- **下推自动机** (pushdown automata, PDA),PDA 和 CFG 等价性
27-
- CFL 封闭运算,**泵定理**,如何证明不是 CFL
28-
- 图灵机 (Turing Machine, TM) 基础
29-
- TM 定义、TM 构建、TM 的功能(**判定/半判定**语言,**计算函数**),递归函数
30-
- 变种图灵机、非确定性图灵机与标准确定性图灵机 (STM) 的等价性
31-
- 不可判定性 (Undecidability)
32-
- Church-Turing 论题
33-
- 可判定问题的图灵机构建方法与**规约**
34-
- **停机问题**,及可由停机问题规约出的其他问题的不可判定性证明
35-
- Rice 定理与通用的可/不可判定或半判定的证明方法
36-
- 程序的自输出问题与 Recursion 定理、语言的**枚举**和字典序枚举(略讲)
37-
- 函数的可计算性
38-
- 原始递归函数定义、μ 递归函数定义、μ 递归函数与可计算函数的等价性
32+
- 正则语言封闭运算,**泵定理** (pumping theorem) 及其应用
33+
- **下推自动机** (PDA) 相比普通 FA 的增强
34+
- 上下文无关**语法** (CFG) 的定义,CFG 和 PDA 的等价性,互相转换的方法
35+
- 图灵机 (Turing Machine, TM)
36+
- TM 的定义与基本概念、计算过程
37+
- 图灵完备性 (Turing Completeness),NAND-TM/RAM 程序
38+
- 通用图灵机 UTM 的构造与工作原理
39+
- 函数可计算性
40+
- Church-Turing 论题
41+
- **停机问题**
42+
- **归约**,如何利用归约证明某些问题的不可计算性
43+
- 利用 Rice Theorem 证明不可计算性
44+
- Recursion Theorem 和 Godel 不完备性定理
3945
- 复杂度理论
40-
- 时间复杂度,P、NP、NP 完全问题的定义及与图灵机关系
41-
- SAT/3-SAT 问题、Clique 问题、Vertex Cover 问题属于 NP 完全问题的证明
42-
- 空间复杂度,PSPACE、NPSPACE、EXP 问题的定义与关系
43-
- Savitch's Theorem 与 Hierarchy Theorem
44-
45-
为了向大家说明这门课内容看似少实际多、补天困难,我刻意把内容介绍写成了复习提纲的形式。
46+
- 时间复杂度,空间复杂度
47+
- Time Hierarchy Theorem
48+
- **多项式时间归约**的定义
49+
- 函数复杂类及其之间的关系:P、NP(采用“**多项式时间内可验证性**”作为定义)、EXP、P/poly etc.
50+
- NP-Hard、NP-Complete 的定义
51+
- 各复杂类的具体例子:SAT/3-SAT 问题、01 EQUATION 问题、SUBSET SUM 问题等,其之间的归约关系
52+
- Cook-Levin 定理
53+
- 概率图灵机与随机算法(这部分是新加的)
54+
- 概率图灵机的定义
55+
- BPP 类的定义及其性质
56+
- 伪随机数生成器
57+
58+
这门课内容多、补天困难,作为一门 2 学分的课程,内容艰涩且难以速成,一定不能掉以轻心。
4659

4760
### 先修要求
4861

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

52-
有了这两门课的基础一些知识可以更容易理解,当然就算你这两门课学了个寂寞也没关系,跟着课听问题不大
65+
有了这两门课的基础一些知识可以更容易理解,例如说 ADS 中的复杂度分析和复杂类函数会在这里以更本质的形象再次出现
5366

5467
## 任课教师
5568

56-
21 级图灵的计算理论课改为由毛宇尘老师教授。(20 级是只有金小刚老师教授)
69+
21 级开始,TCS 改为由毛宇尘老师教授(20 级是只有金小刚老师教授)。很有可能之后都由毛宇尘老师教授了。
5770

58-
毛哥讲课十分清晰有逻辑,跟住老师一定可以学懂这门课的内容,毛哥全程使用 iPad 手写投屏(不过课后不会发布讲义,需要自己跟住记笔记),概念都会手写、证明过程也会一步一步推导。当然毛哥也有一些奇怪的要求,比如不允许前排同学使用电脑,所谓防止屏幕影响其他同学听课(不过一学期上下来这样效果确实还不错)
71+
毛宇尘可以说是新式古法上课,全程使用 iPad 手写概念与证明过程并投屏,没有任何 Slides 和讲义参考,并且不允许除最后一排外的同学使用电脑,这也就要求在课后花很多时间消化内容,或是对着智云/教材反复学习概念
5972

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

6275
## 课程教材
6376

64-
21 级无教材,全靠毛哥手写讲义。20 级曾用教材如下:
77+
23 级的教材是 Boaz Barak 的 [_Introduction to Theoretical Computer Science_](https://introtcs.org/)
6578

66-
***《计算理论基础》Elements of the Theory of Computation***
79+
20 级曾用教材如下:
80+
81+
**《计算理论基础》Elements of the Theory of Computation**
6782

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

70-
***Introduction to the Theory of Computation. Michael Sipser*** 亦是一本不错的参考教材。
85+
**Introduction to the Theory of Computation. Michael Sipser** 亦是一本不错的参考教材。
7186

7287
## 分数构成
7388

74-
- 作业(0%)
75-
- 不占分数,也不会要求上交,每周会发一些题然后下一周发布答案,作业可以很好地了解老师的出题风格,因此对小测和考试的帮助还是很大的
76-
- 小测(20%)
77-
- 21 级进行了两次小测,虽然考验的是是否理解了课上的内容但难度并不算低,不过最后会开根号乘十来调分
78-
- 讨论(20%)
79-
- 21 级讨论有 3 次,一次是开放性的问题(问一个语言是不是正则的),一次是自学课外的定理(Ogden's Lemma)来证明,还有一次是写一个输出自身的程序,课上会抽同学起来讲,这部分的给分比较慷慨,只要认真完成了应该都能拿到满分
80-
- 期末考试(60%)
81-
- 期末考试的难度不会很大,如果平时跟上的话复习的东西也没有很多,如毛哥所说,“历年卷是没有用的”,因此主要参考的就是小测和作业的题目
82-
83-
22 级的分数构成中,讨论部分的分数转移到了作业上,作业题包含算分的部分和额外不算分的部分,建议还是都好好做一下。
89+
=== "23 级"
90+
91+
- 作业(20%)
92+
- 一共五次作业,虽然包含“算分的 Part1”和“不算分的 Part2”,但是不在作业中显式标出,所以每次作业还得全完成 [ac01]
93+
- 手写完成,线下提交
94+
- 在助教发布答案之前都可以进行补交,逾期不补
95+
- 小测(20%)
96+
- 2 次闭卷小测,很难
97+
- 期末考试(60%)
98+
- 10 道判断题,剩下全是大题
99+
- 小测 + 作业的总分可以由期末分数覆盖(注意不是覆盖单项)
100+
101+
=== "21 级"
102+
103+
- 作业(0%)
104+
- 不占分数,也不会要求上交,每周会发一些题然后下一周发布答案,作业可以很好地了解老师的出题风格,因此对小测和考试的帮助还是很大的
105+
- 小测(20%)
106+
- 21 级进行了两次小测,虽然考验的是是否理解了课上的内容但难度并不算低,不过最后会开根号乘十来调分
107+
- 讨论(20%)
108+
- 21 级讨论有 3 次,一次是开放性的问题(问一个语言是不是正则的),一次是自学课外的定理(Ogden's Lemma)来证明,还有一次是写一个输出自身的程序,课上会抽同学起来讲,这部分的给分比较慷慨,只要认真完成了应该都能拿到满分
109+
- 期末考试(60%)
110+
- 期末考试的难度不会很大,如果平时跟上的话复习的东西也没有很多,如毛哥所说,“历年卷是没有用的”,因此主要参考的就是小测和作业的题目
84111

85112
## 参考资料
86113

87-
- TonyCrane 的课程笔记:<https://note.tonycrane.cc/cs/tcs/toc/>
88-
- HobbitQia 的课程笔记:<https://note.hobbitqia.cc/TCS/>
89-
- [ZhouTimeMachine 的笔记](https://zhoutimemachine.github.io/note/courses/toc/)(20 级的 jxg 版本)
114+
前人们的笔记:
115+
116+
- (23 级)srk505 的笔记,写的有点近似讲义了:<https://nest.shrike505.cc/notes/ComputerScience/TCS/>
117+
- (21 级)TonyCrane 的课程笔记:<https://note.tonycrane.cc/cs/tcs/toc/>
118+
- (21 级)HobbitQia 的课程笔记:<https://note.hobbitqia.cc/TCS/>
119+
- (20 级)[ZhouTimeMachine 的笔记](https://zhoutimemachine.github.io/note/courses/toc/)
120+
121+
和“计算理论”重合的部分,也可在 CC98 等地方搜索计算理论的相关资料参考。
122+
123+
## 回忆卷
124+
125+
- [25-26 学年秋冬学期期末回忆卷](./TCS25fa.pdf)
90126

91127
## 学习建议
92128

93-
计院很少有毛哥这种能把理论课讲得非常流畅的老师,需要好好珍惜,课上跟住老师这门课可以说完全不成问题。而且毛哥给分也可以说非常慷慨,和之前的金小刚完全形成了鲜明对比(x)。同时考试也没有套路题,不需要靠历年卷,只要弄懂课上内容加上看一看作业和小测题就足够了。有任何问题也都可以在课后去找毛哥问,每次都会非常清晰地给出解答。
129+
在换新教材后,课程内容的难点更加偏向复杂度理论,然而这部分内容并没有在 23 级考试中占据特别大的比重。图灵机之前的内容相对容易理解一些,需要对每个概念都掌握扎实(例如 22 级期末考了一道用双栈 PDA 模拟图灵机,23 级考了一道同时跑 PDA 和 DFA 的题目,这都要求你对这些基本概念有清晰的理解),要掌握正则/非正则的判断和证明(怎么画/构造 FA),CFL 的判断和证明(怎么构造 CFG/PDA,虽然很多情况下写 CFG 会更方便,但是有些时候很难想,需要用 PDA)。在图灵机及之后的内容逐渐抽象,理解难度也会增加,重点是对(多项式时间)归约的掌握,要熟练掌握用莱斯定理和归约来证明不可计算性的问题(至少车轱辘话要会写 [ac01])。
130+
131+
每次作业批改结束/小测结束后助教都会发布答案,一定要对着看看懂。平时作业和小测的题目是复习考试的最好资料,考试题目风格也和这些题目比较接近,但是第一眼看到容易使人发懵,弄懂课上内容加上看一看作业和小测题会有很大的帮助。有任何问题也都可以在课后去找毛哥问,每次都会非常清晰地给出解答。

0 commit comments

Comments
 (0)