Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added docs/major/theory_of_computation/TCS25fa.pdf
Binary file not shown.
43 changes: 43 additions & 0 deletions docs/major/theory_of_computation/TCS25fa.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#show heading.where(level: 1): it => [
#set align(center)
#set text(size: 18pt, font: "FZXiaoBiaoSong-B05S")
#it.body
]

#set enum(numbering: "1.a)")
#let poly = math.cal("P")
#let np = math.cal("NP")
#let bpp = math.cal("BPP")

= Introduction to Theoretical Computer Science

#align(center)[
#text(size: 13pt,font: "STZhongsong",[2025-2026 秋冬期末])
]

#align(center)[
#text(size: 13pt,font: "STZhongsong",[图灵回忆卷])
]

1. Write T if the statement is true, and F if it is false.

+ [] If $A$ is computable, then $A^*$ is computable.
+ [] $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$.
+ [] 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.
+ [] To simulate multiple TMs with $k$ states in total using one TM, the resulting TM needs $Omega(k)$ states.
+ [] To convert an NFA with $k$ states to a DFA, the resulting DFA has $Theta(2^k)$ states.
+ [] 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$.
+ [] 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$.
+ [] 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.
+ [] If $f,g in poly$ and they are not constant functions, then $f <=_p g$.
+ [] If $f <=_p g$ and $g in bpp$, then $f in bpp$.

2. (Regular Language and Automaton) Judge whether the following languages are regular. Prove your answer.
1. $L_1 = { w x in {0,1}^* | x "as a binary number", x mod 3 = 2}$.
2. $L_2 = { w 0 x in {0,1}^* | x "has strictly more 1s than" w}$.
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.)
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.)
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.)
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.
1. Prove that WSAT $in np$.
2. Prove that VC $<=_p$ WSAT, where VC is the Vertex Cover problem.
141 changes: 90 additions & 51 deletions docs/major/theory_of_computation/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,87 +7,126 @@ grave: https://zju-turing.github.io/TuringCoursesGrave/major_basic/theory_of_com

# 理论计算机科学导引

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

## 课程学习内容

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

- 语言、自动机与正则表达式
- 课程基本概念、常用记号、语言的定义
- **确定性**和**非确定性**的有限自动机(DFA 和 NFA)
- DFA 和 NFA 的等价性,NFA 转 DFA 的方法
- 问题怎么描述?(对应编码)
- 如何计算问题?(对应各种计算模型,例如电路、自动机与图灵机)
- 所有问题都可以被计算吗?(对应可计算性)
- 对于可计算的问题,计算它们需要多少资源?(对应复杂度理论,函数复杂类)

具体大纲如下:

- 编码与电路
- 课程基本概念、常用记号、可数与不可数集合
- 如何对问题进行编码,编码与可数的关系
- 利用最初步的计算模型(布尔电路和对应的程序)进行计算,并研究其规模
- 语言与自动机
- 介绍语言与函数的对应关系
- **确定性**和**非确定性**的**有穷自动机**(DFA 和 NFA)
- DFA 和 NFA 的等价性与互相转换的过程
- **正则语言**的定义,正则语言和 FA 的等价性,互相转换的方法
- 正则语言封闭运算,**泵定理** (pumping theorem),如何证明不正则
- DFA 的状态最小化方法
- 上下文无关语言 (Context-Free Language, CFL)
- 上下文无关**语法** (CFG) 的定义,CFG 和 CFL 的关系
- Chomsky 范式 (CNF),转换 CNF 的方法
- **下推自动机** (pushdown automata, PDA),PDA 和 CFG 等价性
- CFL 封闭运算,**泵定理**,如何证明不是 CFL
- 图灵机 (Turing Machine, TM) 基础
- TM 定义、TM 构建、TM 的功能(**判定/半判定**语言,**计算函数**),递归函数
- 变种图灵机、非确定性图灵机与标准确定性图灵机 (STM) 的等价性
- 不可判定性 (Undecidability)
- Church-Turing 论题
- 可判定问题的图灵机构建方法与**规约**
- **停机问题**,及可由停机问题规约出的其他问题的不可判定性证明
- Rice 定理与通用的可/不可判定或半判定的证明方法
- 程序的自输出问题与 Recursion 定理、语言的**枚举**和字典序枚举(略讲)
- 函数的可计算性
- 原始递归函数定义、μ 递归函数定义、μ 递归函数与可计算函数的等价性
- 正则语言封闭运算,**泵定理** (pumping theorem) 及其应用
- **下推自动机** (PDA) 相比普通 FA 的增强
- 上下文无关**语法** (CFG) 的定义,CFG 和 PDA 的等价性,互相转换的方法
- 图灵机 (Turing Machine, TM)
- TM 的定义与基本概念、计算过程
- 图灵完备性 (Turing Completeness),NAND-TM/RAM 程序
- 通用图灵机 UTM 的构造与工作原理
- 函数可计算性
- Church-Turing 论题
- **停机问题**
- **归约**,如何利用归约证明某些问题的不可计算性
- 利用 Rice Theorem 证明不可计算性
- Recursion Theorem 和 Godel 不完备性定理
- 复杂度理论
- 时间复杂度,P、NP、NP 完全问题的定义及与图灵机关系
- SAT/3-SAT 问题、Clique 问题、Vertex Cover 问题属于 NP 完全问题的证明
- 空间复杂度,PSPACE、NPSPACE、EXP 问题的定义与关系
- Savitch's Theorem 与 Hierarchy Theorem

为了向大家说明这门课内容看似少实际多、补天困难,我刻意把内容介绍写成了复习提纲的形式。
- 时间复杂度,空间复杂度
- Time Hierarchy Theorem
- **多项式时间归约**的定义
- 函数复杂类及其之间的关系:P、NP(采用“**多项式时间内可验证性**”作为定义)、EXP、P/poly etc.
- NP-Hard、NP-Complete 的定义
- 各复杂类的具体例子:SAT/3-SAT 问题、01 EQUATION 问题、SUBSET SUM 问题等,其之间的归约关系
- Cook-Levin 定理
- 概率图灵机与随机算法(这部分是新加的)
- 概率图灵机的定义
- BPP 类的定义及其性质
- 伪随机数生成器

这门课内容多、补天困难,作为一门 2 学分的课程,内容十分神秘且难以快速理解,一定不能掉以轻心。

### 先修要求

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

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

## 任课教师

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

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

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

## 课程教材

21 级无教材,全靠毛哥手写讲义。20 级曾用教材如下:
23 级迎来大变,使用 Boaz Barak 的 [_Introduction to Theoretical Computer Science_](https://introtcs.org/) 作为教材

***《计算理论基础》Elements of the Theory of Computation***
20 级曾用教材如下:

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

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

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

## 分数构成

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

22 级的分数构成中,讨论部分的分数转移到了作业上,作业题包含算分的部分和额外不算分的部分,建议还是都好好做一下。
=== "23 级"

- 作业(20%)
- 一共五次作业,虽然包含“算分的 Part1”和“不算分的 Part2”,但是不在作业中显式标出,所以每次作业还得全完成 [ac01]
- 手写完成,线下提交
- 在“助教发布答案”之前都可以进行补交,逾期不补
- 小测(20%)
- 2 次闭卷小测,很难
- 期末考试(60%)
- myc 最爱出神秘题目,看到第一眼直接发懵的那种
- 10 道判断题,剩下全是大题
- 小测 + 作业的总分可以由期末分数覆盖(注意不是覆盖单项)

=== "21 级"

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

## 参考资料

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

- (23 级)srk505 的笔记,写的有点近似讲义了:<https://nest.shrike505.cc/notes/ComputerScience/TCS/>
- (21 级)TonyCrane 的课程笔记:<https://note.tonycrane.cc/cs/tcs/toc/>
- (21 级)HobbitQia 的课程笔记:<https://note.hobbitqia.cc/TCS/>
- (20 级)[ZhouTimeMachine 的笔记](https://zhoutimemachine.github.io/note/courses/toc/)

和“计算理论”重合的部分,也可在 CC98 等地方搜索计算理论的相关资料参考。

## 回忆卷

- [25-26 学年秋冬学期期末回忆卷](./TCS25fa.pdf)

## 学习建议

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

每次作业批改结束/小测结束后助教都会发布答案,一定要对着看看懂。平时作业和小测的题目是复习考试的最好资料,考试题目风格也和这些题目比较接近,但是第一眼看到容易使人发懵,弄懂课上内容加上看一看作业和小测题会有很大的帮助。有任何问题也都可以在课后去找毛哥问,每次都会非常清晰地给出解答。