选课类别:计划内与自由选修 | 教学类型:理论实验课 |
课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
课程层次:专业基础 | 学分:3.5 |
在计算机科学中,算法(Algorithm)可以理解为求解问题的一个具体计算步骤。本课程主要介绍算法的基本概念,以及算法设计和分析的基本方法和技巧。课程包含了高级数据结构和算法的若干基本内容:算法分析的基本技术、排序、堆和优先队列、红黑树、平摊分析、二项堆、分离集合、分治法、动态规划、贪心法、快速傅立叶变换、图论算法、串匹配等,和典型计算问题的求解算法。
课程内容 陈雪老师的《算法基础》课程主要涵盖经典算法和计算理论内容,课程内容详尽、理论严谨,适合有一定算法基础的同学。课程内容包括数据结构、贪心算法、动态规划、图论算法等,还介绍了一些高级内容如线性规划、随机算法、近似算法等。多位同学提到,课程进度较快,讲解细致,特别注重数学证明,这使得课程理论性较强。
选课建议 如果有信竞基础,这门课非常适合,收获颇丰。如果是算法新手,课程强度较大,可能会感到吃力。一些点评者建议,算法基础薄弱的同学可能需要谨慎选择。另外,重修的同学可以考虑这门课,因老师给分慷慨。
作业 作业和实验难度较大,需要较多的时间投入,尤其对于没有相关算法背景的同学更具挑战性。作业包括证明题和编程题,前半学期以LaTex为主,后半学期以OJ编程题为主。一学期大约有14次作业实验,其中13次为必交。几位同学反映,有竞赛背景的同学会相对轻松,但对于没有基础的同学来说难度较大。
考试 考试为全开卷,允许带任何非电子资料。考试主要考查算法设计和证明,根据试卷内容进行算法应用或推导。期中、期末考试难度较大,期末考试平均分较低,但是通过考题设计和评分标准可以看出,老师更注重知识的理解与应用。
给分 给分非常慷慨,评语中反复提到老师“奶人力度大”、“奶穿”。尽管大部分同学的平时成绩和考试成绩并不理想,但最终总评高于预期。某位同学总结:“最后给分大概是100减去排名”,极具代表性。
教学水平 陈雪老师毕业于清华姚班,教学水平和能力出色,对课程内容的把控深入而透彻。虽上课使用英文PPT,但板书证明和讲解详细,容易理解。几位点评者认为这是他们入学以来收获最大的课程,反映了老师强大的教学水平。
授课材料 课程所使用的OJ系统(Linke OJ)经过改进,运行表现较好,只在学期内崩溃了一次。评测环境相对稳定,有助于学生完成编程作业。
综合评价 《算法基础》课程收获大,但难度也相应较高,尤其适合有竞赛基础的同学。作业实验量大而难,考试注重算法理解与应用,给分宽松且慷慨。总体而言,陈雪老师的教学水平高,详细的证明及讲解对学习算法有很大的帮助。对于基础薄弱的同学,需评估自身情况再选择是否修读这门课程。
当助教的时候一直胆战心惊,担心自己做的不好被挂到评课社区上,现在看来大家都是比较友好的。
我建议有信竞基础的人来先修,会有较大收获。如果是算法新手,可能强度过大,一学期下来可能体验不是特别好。
我建议有信竞基础的人来先修,会有较大收获。如果是算法新手,可能强度过大,一学期下来可能体验不是特别好。
我建议有信竞基础的人来先修,会有较大收获。如果是算法新手,可能强度过大,一学期下来可能体验不是特别好。
2024 春季学期,陈雪老师的算法基础班上有 34 位学生(原先有 36 人,最后退课了两位),配备了三位助教:一位是大四的学长,是有在助教系统审核通过的正式助教;剩下两位是大二的编外助教,其中一位是我。相比剩下两位已经参加和即将参加 ICPC World Final 的大佬,我估摸着是三位助教里最菜的。
PS:陈雪老师可以说是特别慷慨,工资给的不少。
一些正经内容:
一些杂谈:
这部分是我给老师发的邮件:
https://www.wjx.cn/vm/Qpmr2PA.aspx
在学期结束后,我在算法基础课程的 QQ 群里,发布了一个问卷,内容可见于上面的链接。
虽然只收集到十份问卷,但介于全班也就只有不到 35 人,这份问卷或许还算有点参考价值。我进行一些总结,并结合着我自己的观点进行一些陈述:
这学期大家合作愉快。
除了上面问卷的问题,现在想想或许还有一些事情是我需要反思的。
明年或许还会当这门课的助教,大家多多包涵。
上课:纯英 PPT ,但很好理解。老师经常板书证明过程,上课不听下课就不会。
作业:证明题好难,题量一般。前半学期 LaTex 居多,后半学期 OJ 居多。
考试:全开卷,不考背书,书上已有的算法可以直接在试卷上调用。考试主要考算法设计以及证明。
收获:入学以来收获最大的课。陈雪老师太强了,楼上xd说得很对,写作业、上课已经感觉到自卑了……
给分:OJ 满 + 作业 80% + 两次考试排名 35% = 总评 3.7
助教允许公开 OJ 题目,那我就贴个链接
一个学期下来被实验和作业杀穿了。没学过离散数学真实太伤了
当然收获还是很大。
可惜的是这个学期从三月底开始到现在一直都在生病,基本都没到课,期中也是生着病考的,估计2天后期末也好不起来……考完再来更。
被期末考试杀成轻度抑郁了😖虽然考前就知道复习没啥用,还是复习了,然后也果真没啥用,只是不知道老师路过的时候看着我满满一张的idk是啥感想。最后我认为:\(P=NP\)
出分了,意识到自己还是当个废物比较合适。后悔没去复旦学金融的第N天
陈雪老师的存在就是为了告诉我
人和人的差距比人和狗都大!
讲课很好十分!
扣的一分是用于治疗我轻度抑郁的精神治疗费。
给分很不错,我期中期末都只拿了保底30来分,作业平均拿了80%分数,最后总评78。
本来以为要挂了,很感谢老师助教奶了一口…
话说有位助教哥哥还挺帅的,我期末时用idk遍历完题目后盯着他看了好一会。
感觉有些实验题可能需要一些算法基础,似乎对于有基础的同学是模板题,但没基础的同学很难做出来(?)
吹爆老师!!!虽然平时作业确实比较难,但是就收获超多+给分超好就可以直接给满分了!
说实话有点小后悔,早知道秋季就不学算法了,不如春季学
陈老师是清华姚班毕业的,水平自然没得说。这门课对计算机系的同学也比较重要,所以我写一点自己的见解供后人参考。
本人最开始是顾乃杰班上的,但因为顾老师给分太杀不得已到陈老师班上重修(我不知道为什么顾乃杰风评这么好,反正我身边至少五六个3.0及以下的)。
优点:
考试开卷,除了电子产品,想带什么带什么。我觉得这一点非常好,因为学习算法本身就应该是学习算法背后的思想,从而举一反三,解决新的问题,而不应该当成文科来考(本人强烈谴责顾乃杰老师考红黑树应该如何删除和插入,这种东西别人都已经帮我们实现好了,只需要调用即可,为什么还要记住?就算记住了几天不看又会忘,不知道有什么意义)。考试的具体内容就是给几道题目,给出求解算法,伪代码或者其他形式均可(我当时不想写代码,就写了一大堆文字哈哈哈)
助教和老师都很负责。助教和老师每周都会安排固定的时间用于答疑和交流,什么问题都可以问,有一次oj的题目比较难,很多人都不会,然后助教直接在答疑的时候把算法告诉大家了。
给分好。本人期中期末都没有复习过(因为重修的原因),期中比平均分高2分,期末比平均分低2分,最后84,我愿意称之为奶王。
缺点:
作业很难(真的很难)。需要较长的时间思考(相比之下顾乃杰班上的作业全是书上原题,直接在网上能找到答案,但是去年开始顾乃杰开始布置原创的题目了,好像是因为他发现大家都在网上找答案,所以以后顾乃杰班上的作业也不会太简单了)
总体来说,很推荐选陈老师的课。
先占坑,放一张期末时回忆的期中卷子。这课很难,要说能拿高分,还真没底气。但是收获很多。
/uploads/files/93c45010c1730685ab3439ea7ad26363b339bc6c.pdf
以上为期中卷子。五道选择以及五道(还是六道)大题,只回忆了最重要的两道题,不过也学到很多了。
只希望期末能考好点,比杰哥给我的高个两三档就行。NPC真整不会了(抹泪)
回忆卷中Q1有误,裁剪数组时反了。细节在于n=1的时候需要手动枚举(这似乎更像个递归思路),因为指针分布在两个数组上,无法根据位置判断哪边大哪边小。
期末考完了,寄了
期末回忆卷
/uploads/files/e4969330845785ac451be040f377cde62e3c42a9.pdf
出分了,给分好。当然如果您对分数比较敏感建议看看算法课的人数,现有的三门算法都曾给分好过,主要的变量是人数,人少则给分慷慨,人多则不拔一毛。
辅修人,来摸摸xue算法,其实我个人以前做过一点点算法竞赛,但退役的很早,a.e 0基础(?)
算法课是从入学开始就想摸的课(点燃我的OI之魂),在2秋时时间冲突没上成,遂在2春上。
其实看评课对xue算法已经有了一点心理准备,尤其lxy班cx三段式笑话那个老哥发了一份“第一次作业”,看完之后有点想跳车的(不过好在也撑下来了。
事实上上课体验比较因人而异,我一周两节课中有一节叠课于是比较跳跃(虽然另一节也摸了好几次(这是能说的吗)),xue老师上课非常注重数学细节的证明,必要的证明都会板书一点点讲,PPT上会给出详细的思考过程,认真听课(且跟得上的话)确实很享受。
但是,尽管讲的很详细,但课程进度我觉得还是巨快!从知识覆盖面来看,上半比较基础,主要是数据结构,贪心,dp之类的;下半那是真正的冲刺,图论从最短路冲到最大流最小割然后讲数论(M-L),线性规划(simplex大法好)和字符串匹配(hash和KMP),这部分算法难度不是很轻松。最后是喜闻乐见的可解,P,NP,NPC的讨论。总之如果从听课感觉来说,还是建议掂量掂量,冷静下手。
整个学期感觉最特色的是书面作业和考试。书面作业由老师发pdf,题目都饱含老师的心意(,做起来挺折磨的,但讲究的就是对算法的理解,如何将板子迁移到稍微变动的问题上面(魔改算法),确实理解下来受益匪浅。
期中考试因为没有大算法的内容,主要是各凭本事(?),用hash,贪心,dp,排序啥的一通搞,班上均分64,在已知班上巨多OI大神的情况下算是合理的。期末考试主要是针对学的算法的考察,很多题都有比较明显的算法对应,但写不写的出来嘛…均分50+,感觉同学们做的可能都不是很理想。个人特别喜欢的是期中的最后一题(分数的排序)和期末的最后一题(数论),感觉是属于令我眼前一亮的题目,非常有意思,在我的考场学习法中带来的很大的乐趣(虽然我至今仍不会做)。
这学期的1+2位助教都很好,答疑和习题课准备都很充分,OJ也没炸,除了某助教卡常自爆卡车然后删点(乐),体验都非常好,各位辛苦了!
以下是辅修xue算法的建议:最好(基本必要)有算法基础,但不用多。作业有空的话尽量做,如果觉得做作业没啥意思而且很痛苦,那建议趁前两周换个班,省的折磨自己(后面越来越难),实验反而相对而言朴素一点,而且是分点评测,可以合pian理fen取da舍fa,老师PPT会有板子的清晰伪代码。平时分拿个保底,考试就当成享受就行,如果想分数好看,不要相信自己(本人惨痛教训),期中看前面时间复杂度分析内容+排序+贪心+dp,期末其实只用看好N,NP,NPC感觉就差不多了(?),再多就是图论算法建议熟练掌握各种最短路算法之间的应用场景区别,一定只写自己非常非常有把握的,然后在卷子上疯狂默写魔法咒语即可。
算法不上cx,就像玩二游不玩原神!
你们只用在考场上抓耳挠腮,而xue老师捞人要考虑的可就多了)
没有算法基础的同学不要来!
这门课上课会花大篇幅的时间去讲一些证明,怎么实际操作和应用会讲的比较少,而证明是建立在理解算法运行方式的基础上的,因此有可能你还没彻底搞懂算法是什么,然后证明就开始了,会听的有些吃力。
而且作业实验也是很难(也一方面是因为课上不太讲实操),拿动态规划来说,没有算法基础看半天想不出来怎么规划,有算法基础的几分钟甚至几秒内就能出思路了。(我这种纯菜鸟,做实验都是4~8个小时起步,还不一定做得对,总有不过的数据集)
不过老师给分很好,按总评构成方式算我感觉及格不了,最后老师捞到3.3🙏🏻。
对着另一位同学的回忆版题目把自己会的简单写了写。
给分挺好的,期末只有 70 多的情况下总评 96。
期末平均分 53 分,看来大家做的都不太好。。。
下午去查卷顺便跟陈老师聊了聊,他说他以为起码 DAG dp 那道题是送分题,没想到大家做的也不怎么样。。。
陈老师问了问我对这门课的一些看法什么的,也表示会考虑以后降低一些难度。他说这种难度的课在美国大概上 8-10 门就足以拿到计算机学位的证书了。他觉得这门课是他理想中的大学课程应该有的难度和样子。
这门课如果认真完成作业/实验的话,强度非常大。
本学期一共 8 次作业和 6 次实验,最后一次作业因为临近考试周可以不交。
课程内容上大概是取了剩下几个算法基础班级课程内容的并集(不过倒是没有讲可并堆,只是提了一下)且加了一些老师自己想讲的内容(例如线性规划、割问题的一些高级算法例如Karger's Algorithm、半正定规划、近似算法)。
作业和实验的难度都不小,如果没有一定基础的话完成起来会非常困难。
今年选课的人大部分都有基础,也有一定比例的辅修人(比如我)。感觉对辅修人来说,这门课想及格并不难(由于 IDK 的存在),也许可以考虑来拿个学分(
考完期中了,3个选择题+5个大题。
选择题难度不大(一题涉及Set Cover问题的近似比,可以现推)。
五个大题里面前两题难度低于作业/实验,一题为需要一点观察的贪心,一题为二维FFT(需要对FFT较为熟悉才能做),一题为对分数进行O(n)的排序(考场上没做出来)。
期中均分59,中位数64,大约是把较简单的前两道大题做出来,剩下的题目写 IDK。