选课类别:基础 | 教学类型:理论课 |
课程类别:研究生课程 | 开课单位:计算机科学与技术系 |
课程层次:硕士 | 学分:2.0 |
本课程为计算理论的入门,为学生在计算机科学领域的后续工作和研究奠定理论基础。课程涵盖了计算模型、可计算性和计算复杂度相关内容,分别介绍如何以数学方式定义计算,哪些问题是计算机可计算的,可计算问题中计算机解决的效率如何。主要授课内容包括:
黄文超老师对课程准备非常用心,态度认真负责。例如,他每次课后会在课程群发布匿名投票,收集同学们的反馈,并及时回答问题,有同学评价其“每节课课后都询问上课情况,同学能否跟上进度”。老公开设匿名的课程群,氛围好,利于同学们讨论问题。他上课时善于停下来确认同学们的理解情况,并适时调整讲课速度。黄老师使用的PPT内容丰富且美观,被多位同学称赞为“赏心悦目”。有同学建议,如果课上没听懂,还可以参考Sipser教授的网课。
课程内容主要涵盖自动机理论、可计算性理论和计算复杂性理论三大部分,涉及到如正则语言、上下文无关语言、图灵机、可判定性和复杂性的基本概念。这些内容非常适合“对计算理论感兴趣”的同学,课程系统讲解了相关定理并进行了严格的证明。由于课时限制,本学期只简单提及了空间复杂性。
期末考试为半开卷,允许带一张手写的A4纸,多数题目与作业相关。有同学反映考试难度不高,“卷子比作业简单”,但接下来老师会加大最后一题的难度。考试题目主要考察课程中的证明和概念,对于复习充分的同学难度不大。
给分友好,大部分同学能拿到较高分数。有同学提到“平时作业错了一些导致最后期末总评88”,也有匿名用户表示“只要认真学习,分数不会差”。综合各点评,黄老师的给分公平且透明,注重过程中的学习和理解。
作业量中等,难度适中,均为课后题,可以找到答案。作业内容贴近课程,适合复习和理解。有同学提到 "每次写作业都需要看一天,工作量在研究生课程中较大,但能有效帮助学习课程内容”。
总体而言,《形式语言与计算复杂性》课程内容丰富,教学质量高。黄文超老师认真负责,教学方式灵活,注重与学生的互动和反馈。课程虽有难度,但对计算机科学基础理论有深入讲解,非常适合有兴趣深入学习计算机理论的同学选修,且期末考试难度适中,给分友好。
2023.10.4 更新:
睡前刷知乎发现,上海交大的傅育熙老师牵头写了一本《计算复杂性理论》教材(出版社链接),不知道写得怎么样,感兴趣的同学可以关注一下。
附上海交大“计算复杂性理论”课程主页:https://basics.sjtu.edu.cn/~yuxi/teaching/complexity/
2023年春季学期我正式选修了这门课。今年是这门课开设的第3年,或许是因为前两次开课产生了一些好评,今年的选课人数由前两年的50人以内增加到86人(教学秘书安排的教室只有78个座位),一开始大家只能从隔壁教室搬座椅(但由于开设了线上直播,之后来上课的人也就变少了)。本学期的授课时间是1-10周,每周一下午连上4节 (6,7,8,9),其中第9周五一放假,第10周习题课,因此实际只上了32个学时,勉强上完了时间复杂性,只简单提了一下空间复杂性。这学期上下来,能明显感受到黄老师上得更熟练了,而一如既往不变的是黄老师对于课程准备的用心程度:例如,前面几周每次上完课,都会在群里面发布匿名投票,认真倾听同学们的反馈;整个学期中及时在课程群里回答大家的问题(课程群开放匿名,且氛围异常好,同学们都很认真地交流和讨论问题)。
当然,个人认为也有一些美中不足的地方。正如我在下文中写的那样,由于黄老师当年是被硬拉来上的这门课,本身并不是做计算复杂性相关方向的,因此在课程中黄老师经常会用自己熟悉的领域来举例子,但有些时候我认为并不恰当(经常举完例子感觉更懵了);另外,这门课留给计算复杂性部分的课时较少,这一部分可能会与大家的科研更为贴近。
这学期5月15日考完试,5月18日就出分了,效率很高。出分后,黄老师在课程群里进行了一些总结并对这门课后续可能的调整做了展望,经过黄老师同意分享到这里(因为黄老师不希望后面选课的同学误以为这是一门水课):
2023年春季学期期末考试题:
1. 下面的逻辑表达式是可满足的吗?为什么?
\((x\vee y)\wedge(\bar{x}\vee y)\wedge(x \vee \bar{y})\)
2. 下列语言中,哪些是可判定 (decidable) 的?哪些是不可判定 (undecidable) 但图灵可识别 (Turing-recognizable) 的?哪些不是图灵可识别的?只需给出结论。
\(A_{DFA}, EQ_{DFA}, E_{DFA}, ALL_{DFA}, A_{CFG}, EQ_{CFG}, E_{CFG}, A_{TM}, EQ_{TM}, E_{TM}\)
注:上述语言中,\(A_{TM}, EQ_{TM}\)不是补图灵可识别 (co-Turing-recognizable) 的,其他语言都是补图灵可识别的。
3. 画出识别下述语言的DFA状态图,字母表为\(\{a,b\}\)。
\(\{w \mid w是恰好不含2个a的任意串\}\)
4. 如图所示:
(1) 将上图的 NFA 转换为与其等价的 DFA;
(2) 将 (1) 中的 DFA 转为正则表达式。
5. 给出识别下述语言的下推自动机 (PDA) 的非形式化描述。
\(\{a^ib^jc^k\mid i\geq1, j,k\geq0且(i=j或i=k)\}\)
6. 试证明\(E_{TM}=\{\langle M\rangle\mid M是一个图灵机,且L(M)=\varnothing\}\)是不可判定 (undecidable) 的。
(以下内容写于2021年春季学期结束后)
说明:我没有选修这门课,但前前后后旁听了一半多的课时,所以下面的评价主要针对课程本身,关于考试和给分的具体情况请其他同学补充。
这门课是2020研究生新版培养方案中新开设的,计算机软件与理论专业的基础课,40课时,2学分。这学期的上课时间是15-18周,每周两次课,每次上一个上午,实际授课28课时。
(补充说明一下,为什么到期末才开课呢?据黄老师说,由于是第一次开课,且课程难度较大,学院大部分老师不愿意上,上学期期末教学秘书才找到黄老师,最后黄老师不得已接下了这门课,所以这学期前面一大半时间都在准备。)
这门课使用的教材是Sipser 的 Introduction to the Theory of Computation, Third Edition,在课程主页上有电子版(链接)。对应的中译本是《计算理论导引》(原书第3版)。
课程内容主要包括三个部分:自动机理论(计算的模型)、可计算性理论(哪些问题可计算?哪些问题不可计算?)、计算复杂性理论(哪些问题是难的?哪些问题是容易的?)。
实际上课程中的很多内容大家在其他课程中多少接触过一些,但这门课是对这些知识的一个系统的讲解,每一个定理都会经过严格地证明。
黄老师在第一次课就说,这是一门数学课,难度是比较大的,经常提醒大家要及时预习和复习,保证充足睡眠。虽然是第一次开课,但看得出来,黄老师是在很用心地对待这门课,课件制作得很精良(可以称得上是赏心悦目),并且每讲完一处比较难的地方会停下来问大家听懂了没有,大部分同学都听懂了才会继续讲,否则会停下来和大家讨论,或再讲一遍。这也是我给10分的原因。
课程的考核方式是半开卷(可带一张手写A4纸)。据黄老师第一节课所说,80%的题目与作业相关,剩下的20%是压轴题,会考课程中所讲到的一个证明。
由于是第一次开课,难免有一些不足。首先就是上课时间,这门课期末才开课,大部分同学都在考试,所以压力是比较大的(不过从明年开始就会和其他课程一样从学期开始就上课)。另外,可以看得出黄老师在尽力把内容讲明白,但因为是第一次上课,很多地方显得不太熟练,偶尔也会有一些小错误。但我相信后面会上得越来越好!
最后还想多说几句,我们为什么要学习计算理论?这里引用南京大学尹一通老师在豆瓣上给《计算理论导引》所写的书评(链接)中的一段话,与大家共勉:
然而,尽管我对这本书和这门学问都很推崇,我对于学习计算理论的必要性却并不坚定。我自己喜欢这些,可我该如何向别人解释学习它是必要的?
Sipser在前言中也试图说明这个问题:"After all, isn't theory arcane, boring, and worst of all, irrelevant?"
他很认真的试图从几个方面说服学生,计算理论是“有用”的,但我总觉得这些说服很徒劳:书中的三个部分,对于搞研究的人来说,前两个领域已经或走到头了或不再是主流研究趣味了,只有复杂度尚活跃,但也只是个理论方向之一;而对于那些有志于业界工作的学生,后两个部分几乎永远不会在工作中用到,而只有第一部分的自动机,可能会用到一点点正则表达式。
看来,从“有用”这个方向去为计算理论辩护,难免会遭遇尴尬和勉强。
我能想到的理由就只剩两个:
(一)这些是计算机科学的根本,没有它们计算机科学不能算作是个正经学问,因此,一个自称计算机科学专业的人,应当知道这些。
(二)这些是美好的,值得在短暂的人生中去经历去见识。
我觉得这已是足够的理由了。
感谢黄文超老师,让我在科大计算机学院听到这样一门优质的课程。推荐大家明年来选!
我没上黄老师的这门课,但我还是想点评(瞎说)一下。
我觉得黄老师的PPT写得很好,把书上的重点写出来了,为同学们省下了大量的时间。
如果课上听不懂或者实在没办法翘了课,也可以听听Sisper老爷子的网课,他讲的非常好(毕竟书也是他写的~)。
另外,我感觉这种课挺难、挺硬的,不是那种可以突击的课。所以选课时要慎重,比如可以想想自己是否有时间或者是否对算法/形式化方法/计算理论感兴趣。
(暴论一句:相比什么大物实验、量子物理、数理方程,这才是属于CS学生的数理基础!)
u1s1,在这门课上才弄懂了上学期近似算法里讲的很多概念
补充:可能期末考试太简单导致老师说以后最后一题要加大难度。可能由于平时作业错了一些导致最后期末总评88,不过也够用了
===================================================================================================
老师:认真负责,有水平,PPT美观高信息密度,讲课内容丰富
助教:存在感不强,本职工作完成得很好
作业:不多,难度中等偏上,由于是外国教科书上的所以实在不会做也不担心找不到答案
考试:半开卷,难度比作业低
考试+A4
课程属于数学类,需要点想象力,逻辑能力
作业是不难的,考试比作业还简单
没有上这门课,对计算理论感兴趣,看了黄老师的PPT感觉很好。
希望这门课下放到本科
老师很负责,讲的东西很细,每节课都会根据反馈调整讲课速度;课件做的很精细很有调理。
作业布置的略多,但是都不算难,跟课程相关性很高,很适合拿来复习;
考试难度不高,可以无压力去认真学习课程内容;
老师说了好多次的类似于“选课的人这么多,是我更认真备课的理由”,加上知识点确实对于计科来说是很有价值的,综合讲是很值得选的一门课
没办法,这门课是理论方向的基础课。
老师:上课很负责,每节课课后都询问上课情况,同学能否跟上进度,不点名。(真的很负责一个老师!)
考试:半开卷,一张A4纸,卷子比作业简单,作业做了就会写。(才一个小时就有人交卷,大家也知道简单了)
上课就八周,需要点想象力,不然后期上课不知道在讲神恶魔
这门课程是2023级计算机学院计算机软件与理论方向学硕培养方案里专业选修课四选二的课程之一,但是2023学年只开设了形式语言、高级软件工程、高级操作系统三门课(也有可能我记错了),这意味对于软件与理论方向的学硕只有三选二的可能,那似乎看起来形式语言是最友好的一门课,几个因素:不点名(实际今年点名占了10%的总评),给分友好(今年给分有一半人以上优秀,且只有零星几个不及格),使其是个人认为的软件与理论方向的必选课(不会有人同时选了必点名的高软和给分屎的高操吧)。
PPT的内容是计算理论导引这本书前几章的一个子集,因为我不太看的明白PPT,看书的中文版会有更好的效果。这门课是计算机学科中比较数学的一门课程,相对来说难度比较大。上课一共四次点名,占10%。
作业是课后习题,有祖传答案,一共七次作业,每次写都需要看一天,工作量在研究生课程中算比较大的。
考试难度尚可,主要考作业内容和课本的证明,如果理解不能就比较考验A4纸的缩印能力,当然如果能当人肉SSD也能拿到不错的成绩。
给分友好,非常适合计算机学院下学期学分不够或是计算机软件与理论方向的同学修读。
我个人认为这是科大计算机学院开设的最有价值的课(之一),不适合完全想划水的,课程有难度,但其实老师讲课难度相比原教材难度已经降低很多了
虽说是手写一页纸开卷,但我感觉这张纸其实并用不上,写这张纸本身就是一次很好的复习机会
考试题目绝大多数都是作业题类似的,甚至还有原题。个别题作业没有过,需要现场想想,不过难度也不是很大。
anyway,会签到,占比好像有10%,会影响分数(亲身体验)
课程内容:不多
课程体验:放在周一下午6789节很容易😪
课程难度:中规中矩,有一定前序课程的基础不难上手
作业:都是课后题,答案见Github: https://github.com/Alpha-Girl/sipser-computation-3rd-solutions
考试:最无语的就是只能
A4纸,浪费时间
给分:很好,4.3飘过
总体不用花很多时间,还可以学到东西,推荐