选课类别:计划 | 教学类型:理论实验课 |
课程类别:本科计划内课程 | 开课单位:信息科学技术学院 |
课程层次:专业基础 | 学分:3.5 |
【此篇为助教视角的点评】
本人为物院天文系21级硕士,申请了2022年秋季《数据结构及其算法》课程的助教。
由于涉及大量个人感悟,这篇点评里面的“水分”会非常地多。重要部分,对选课有参考价值的,已用粗体标出。
研一结束的时候,看到了助教申请系统开放的通知,便打算去体验一下这份工作。而当时在选择哪门课这件事上,却纠结了很久:首先,作为物院的硕士,选择物理系的课程助教自然是理所当然的。但当我回想起本科时期,学习普物和四大力学,总是非常痛苦且缺乏自信的时候,便很快地将这些课PASS掉了。毕竟,我可不想做一个80%的问题都回答不上的助教……随后,研究生阶段学的课也非常地难,唯一一门敢当助教的idl课,却不设助教。
那么还有哪些课,是学的比较踏实且自信的?这个时候,我便不由自主地想到了《数据结构》。这是我在大三的时候,跨专业选择的第一门课。因为在当时,本专业的课已经差不多学完了,并且学外专业的课也没有成绩上的压力,所以那个学期的学习给我留下了一个非常好的印象,最后收获也非常地大。于是,我便敲定了这门课的助教。
在经过了一段比较艰辛的申请历程后,有幸成为了刘老师这学期的助教。
在开学前的最后几天,刘老师把我们两位助教召集了起来,在线上简单地开了个见面会。会上主要讲了这门课的教学计划、助教职责以及对助教工作的基本要求。在听到“既有理论又有实验,并且作业没有现成的参考答案”时,感觉到工作量应该会比较大,不过这样也挺好,可以起到更好的锻炼作用。
第一节课是在8月31日,因为害怕迟到,所以提前半个多小时就到达了现场。先是带着本科时期的习惯跑到了第二排充电插座的旁边,然后突然想起现在是助教了,于是便又回退到了最后一排靠门的位置(此后就在那个位置固定了下来)。随着时间越来越接近2点,教室里的同学也渐渐地多了起来。
2点便开始上课了。在老师自我介绍的环节结束后,便轮到我们助教进行自我介绍了。不得不说,时隔多年再次在这么多人面前自我介绍,还是有些怯场的(哦,半年前的AGN课上也自我介绍过啊,那没事了)。小心翼翼地站起来,讲一下自己的名字、院系和专业后,便又很快坐了下去,开始设置课程群的相关权限。因为比较想体验当助教的感觉,所以在和另外一位助教协商之后,决定由我来当课程群的群主,这样的话可能接触到的提问就会更加全面一些。
很快便到了课间,在老师宣布课间休息的时候,我便慢慢地从最后一排走了上去,拿出粉笔,在黑板上写下了QQ群号,然后再慢慢地走了下去。看着群里的人数爆炸式地增长,仿佛又看到了曾经总想挤破头皮成为第一位群成员的自己。
下午在返回校外暂住地的车上,除了在群里通知一些注意事项之外,也回复了几位同学关于这门课程的疑惑。于是短暂的助教生涯便从这里开始了。
虽然刘老师对我们助教的要求只是“周一到机房答疑,周三来收个作业就可以离开,周五就不用来了”,但我却始终觉得作为一个助教,在不是特别抽不开身的情况下,这样做是有些不太负责的。所以我便每节课都坐在最后一排的那个位置,和同学们一起听老师讲课,时刻关注老师的进度,以更好地预判同学们可能提出的问题。
大概是因为一周有四个课时的缘故,这门课的节奏还是比较快的(比我们本科时期一周三课时的数据结构要明显快不少)。线性表和链表两周就讲完了,栈和队列也只花了一周半,后面的也一样地快,具体进度在下面列出,可供参考:
周次 | 内容 |
1 | C/C++语言预备 |
2 | 数据结构术语概念、实际/抽象数据类型、复杂度、线性表的概念、顺序表的表示及基本操作的实现 |
3 | 顺序表的应用、链表的特点与基本操作、双向链表、有序表 |
4 | 栈、栈的应用、前缀/中缀/后缀表达式、表达式求值、递归、Hanoi塔、队列的表示与实现 |
5 | 队列的表示与实现、链队列、循环队列、队列的应用、串、串的表示与实现、模式匹配、KMP算法 |
6 | KMP算法、数组、矩阵压缩、三元组表、树的基本概念和性质、完全二叉树、树的顺序/链式存储结构、二叉树的遍历、利用二叉树进行表达式求值 |
7 | 先序/中序/后续/层序遍历、遍历算法的应用、由遍历序列建立二叉树、线索二叉树、双亲表示法、孩子链表/兄弟表示法、树与二叉树的转换、树的遍历、森林 |
8 | 计算树的深度和度、Huffman树、Huffman编码、图的数学模型与基本概念、图的基本操作、子图与连通性、图的表示与实现 |
9 | 邻接矩阵/邻接表表示形式、深度/广度优先遍历、遍历的应用、遍历的应用、最小生成树 |
10 | 拓扑排序、关键路径、Dijkstra算法、查找表、折半查找、索引查找、二叉查找树 |
11 | 二叉查找树的操作、平衡二叉树、键树、Hash表、解决Hash冲突的方法、排序概念与分类、排序稳定性、简单选择排序、冒泡排序、简单插入排序 |
12 | 希尔排序、快速排序、堆排序、归并排序、基数排序、排序复杂度的下界 |
13 | 算法简介、递推与递归、分治、贪心策略、动态规划、回溯策略、分支限界法、考试相关事项 |
在上课这方面上,虽然我没有太仔细地听,但能够感觉到老师讲课还是挺生动的,肯定不会像许多经典“有声读物”那样地平淡。有些时候,老师也会冷不防地讲出一些笑话,场面还是比较活跃的。
每周三收作业的时候都会先分出40份交给另一位助教,然后剩下的再由自己带回去。通常情况下,也会有几位同学在QQ上将作业通过照片的形式进行补交。
刚开始的时候,觉得既然可以较为轻松地给出作业答案,那么改作业应该是件挺容易的事。所以在一开始的那两周,我是决定尽可能认真地批改的:每一份作业的代码都从头看到尾,即便是给出了完整的程序(题目只要求写出函数即可),也会从#include开始看,并尽可能的找出每一处遗漏或略显瑕疵之处,用红笔批注出来。
然而,在这样批改了两周后,我便发现这样的做法是非常不现实的。首先是这样会占用非常多的时间,几乎大半个周末都花在了改作业上;其次是每次作业批改结束后,我们都会给出我们写的作业讲解与参考答案,这样的话单独给每位同学都写一段批注就显得没那么必要了;还有一个更重要的因素,就是这样一来,手上的科研课题进度也会因此受到较大的影响,因为除了作业批改之外,还会有答疑等其他事项。
因此,在后续的作业批改中,我也逐渐调整了详略程度,尽可能地在不占用太多时间的前提下,保证不误判,并且让大家知道自己是在哪里因为什么原因出了错。这样一来,批改作业消耗的时间便缩短到了每周6小时左右。
一般情况下,绝大多数同学都会直接交书面的上来。而在封校期间的那两三周,则有相当一部分的线上提交作业是要在电脑上PS批改的。虽然用电脑打勾画圈比较困难,但也因此获得了可以打字的好处,可以说是有利有弊。
印象最深刻的是图的算法。那次作业同时出现了邻接矩阵、邻接表、最小生成树算法、最短路径算法、关键活动的题目,而这些题目都是需要画非常多的表格或图来描述的,因此批改起来异常地酸爽:不仅要看图的形状,还要看若干个单元格中的数字是否正确。有些时候,题目没有规定表格的填写顺序,因此只能在十几条边中慢慢地玩连连看……
作业主要可以分为编程题和客观题这两类,前者需要自己写出一个函数来实现题目所要求的功能,在自己电脑上能跑通的话再抄上去(这门课要求必须全手写)当然就没问题了;而后者则一般是照着书上教的方法,来依葫芦画瓢,进行逐步推演。从作业的难度上来看,倒是没有特别难的题目。但有一点比较难受,那就是很多题并没有描述得那么清楚,以至于在80位同学的眼中,会有80位哈姆雷特……
这也是一个不同寻常的学期。在这几个月的时间里,先是经历了奥密克戎多点爆发导致的大面积、长时间的封控,然后再是突然的放开、疫情大面积扩散导致的教学任务提前中断。也许很多年后回想起来这一学期,都会记忆犹新。
因为这门课是在西区进行的,而上课的同学几乎又都住在中区,所以大家在上课的时候就需要先走出中区校门,穿过肥西路,然后再走进西区校门。当然,也许在你们看到这里的时候,中区和西区之间已经被人行天桥连接在一起了,但在疫情封控期间的2022年,东/中区和西区的确是两个近在咫尺却又难以互相通行的校区(虽然有校车,但每天也就只有十来个班次)。
第一次封控是在10月份的时候。国庆节刚一过,全国各地就相继冒出了较大规模(至少在封控期间属于最大规模了)的疫情,因此从中区到西区很快就只能通过申请的方式通行了。而在申请制实行约两周后,随着疫情的进一步发展,校方又由申请制改为了全封闭制,至此,所有同学在中西区之间的通行就只能凭借每天少得可怜的校车了。
在报备制刚转为审核制的时候,大多数同学还是能够通过审批到达西区上课的,线上提交的作业也没有多出太多。但当审核制转为完全封闭制后,校方提倡不跨校区上课,这就使得所有住在中区的同学原则上都需要待在宿舍线上上课。在刚转为封闭制的那一周,另一位助教还没来得及拿走放在办公桌上的作业就被封在了校外,于是只好先在周末的时候坐校车去西区将作业从校门口递过去,然后周三的时候再从校门口将作业拿回,并分发到中区其中一栋宿舍楼的大厅,随即赶校车前往西区教室开启直播(因为也有少部分同学住在西区,所以也需要保证教室的正常使用),下课后再返回中区宿舍楼,收取这一次的作业以及还没有被拿回的上次的作业。
但即便如此,也会有很多同学因为一些特殊状况而无法在上课期间将作业交到那个大厅。因此,在封校的那段时间,线上提交的作业一下子就窜到了两位数,周末改作业的大部分时间都转到了PS中进行。
而封校的第二周起,老师指定了几个东区教室,作为大家临时上课的地点。虽然这样一来能有超过半数的同学到达现场上课,但受到影响的依旧不在少数,因此线上提交的作业还是有相当的一部分。
第一次的封校持续了两三周,短暂地解封后,课程教学很快便恢复了原状。但紧接着,没过多久,随着疫情的进一步蔓延,刚解封一周的校园又从报备制调整为了审核制。这一次的力度似乎要更大一些,许多同学都因为审核没有通过,而无法到达西区教室,上课现场显得十分荒凉。
这个状况持续了没几天,就正式放开了。而就在这几天的时间里,先后进行了上机与理论A卷的期末考试。上机考试,大家担心的是被封控而无法到达现场。理论考试,大家担心的则是会不会阳。而在这冰火两重天的两个场景之间,却只相隔6天。
上机考试内容是链表的插入排序、前缀表达式线索化三叉树的建立。前者难度较低,容易想出思路,而后者则稍微需要花费一些时间进行思考。上机考试有一个超时扣分项:作答时间超出60分钟后交卷时,每2分钟都会扣掉1分,直至扣满20分为止。从交卷情况来看,绝大多数同学的作答时间都超出了100分钟。看后期会怎么视情况与其他项目的分数调整吧
12月11日上午刚考完期末,接下来几天要进行最后的上机实验验收,继续占个坑
上机考寄了,只能等捞了。
下周就润了,明年考完b卷再回来评。
10分给助教,-2分给课程本身(根据具体分数可能会修改)~ 助教哥哥非常细心友好,必须吹爆!比起大一程设的助教,更耐心于帮我这种菜鸡de一些奇怪的bug,真心学到了不少耶。(评论发迟了qaq,希望助教还记得我bushi)
先占个坑,昨天的机考已经寄了,周末考完试再来补充
本课程以各种数据结构为中心,介绍数据结构的概念以及相关算法;如果之后还要修读《算法基础》等课程,那么这门课能起到非常好的引导作用。刘老师水平很高,上课氛围很好,作业不多比较轻松。一共有五次必做实验,实验报告选其中的几次写期末统一交;印象中最麻烦的一次就是哈夫曼树。(上机时间老师会在机房,甚至还会亲自帮同学Debug。)
最后给分基本按照比例,给个参考:卷面89,作业96,实验98,总评92。
刘老师很温柔,上课很有风范,有种青年才俊的感觉,上课听起来让人感觉很舒服。
刘老师的PPT思路很清晰,每一章的重点能直接捕捉到,这对课后复习帮助也很大。
至于考核得分问题,老师在上第一节课就说不调分,严格按照127比例来给分,按照我自己的成绩估算来看,结果应该是87.6,总评最终88,看起来应该确实没有调分。但是根据群友的消息来看,刘老师还是有一定程度的调分的。
作业的1,老师说不看正确与否只看是否按时提交,这一块大家应该都是满的。
实验的2,分为实验课的5个必做实验和2个选做实验和上机实验考试。
其中实验课5个必做实验每个2分,2个选做实验每个1分(最多拿到12分)
上机实验考试卷面一共100分,附加题有20分(按照10:1折算后最多拿到12分)
(这里吐槽一句,上机实验之前说假若正确率相同,提交的越快的分数越高,结果我提交的很早很早,最后似乎考察成绩时也没有参考提交时间。)
因此实验部分最多能拿到24分。
期末考试全学年统一阅卷按照卷面分数折合计算成绩。
考前并没有拿到数据结构期末考试的往年题目,据说是学科组不想让题出的越来越难,因此严格保密每年的考试题目。
考试题目大概是先是若干道基础选择题和若干道基础填空题,其中考的很杂,考的内容比如各个排序算法的复杂度,各个排序算法的优点,栈和队列的特点,出栈顺序等等,都是些细碎的知识点,学习时要注意细节,教材中每一章的课后总结对这一部分很有帮助。
大题部分我记得出了一个哈希表,出了一个排序算法,还有一个Dijkstra算法,最后大题是自己写代码应用题。大题部分就是要掌握树上罗列的各种算法。
还是感谢刘老师,大一玩飞了,C语言烂掉了,最后数据结构考的还不错,感谢刘老师。
以下附上本课程的课程主页:
Data Structure and Algorithm (ustc.edu.cn)
网安默认置课老师 平时和期末三七开 平时有作业 上机和上机考试 期末运气好些 92分 最后总评95 也学到很多
有的人表面说着不调分,背地里应该是偷偷调分了,至少我室友被大奶一口,自己也感觉被调了几分
老师上课讲得很细致,对比我的C程老师简直是云泥之别,平时作业也很少,但会有一次实验考试(开卷)
刘老师课讲得很好,讲得非常清楚,而且PPT也十分详尽,是在科大目前遇到讲课第二好的老师。 但是嘞,如果有分数焦虑的同学(比如我),建议不要选。一方面是刘老师本来说不调分(因为前几年分普遍高),但是今年由于分低说要调分。另一方面刘老师在考完之后不让透露平均分,也不告诉你实验具体给分标准,查卷也不让你自己看一下,就很焦虑。 期末考试偏简单,但是一错就完蛋(有一道邻接表的应用题,弧头弧尾想错了八分应该一分没有2333我还在想这道题真阴险)。 总之期末分数出来心态已经崩了,但是刘老师上课确实不错,而且作业很少,上完一学期也是挺享受的。唉,气死我了。
老师讲课比较耐心,也很生动。布置的作业量少,有时候一个星期只有一两道题。实验内容难度正常。
考试自我感觉良好,但总评创了新低。有点郁闷。
刘东老师的课虽然可能称不上精彩,不过也非常清晰,对初学者还是很友好的。个人感觉老师前面线性表的部分讲的有点慢了,导致图的部分速度偏快。实验题不算阴间,但也不是很水,需要下去之后码码代码。另外,学期末的时候还需要选三个实验提交三份实验报告,报告的格式会在老师的课程主页上写明。今年给分严格按照作业实验考试127不调分,据说卡绩也没有捞。由于自己C语言当时学得比较轻松,所以原本以为这门课3.7应该问题不大,结果不知为何考试卷面炸的非常惨(由于不给查卷,因此也没法知道自己炸在哪儿),加上不调分,最后喜提一个2.7,还是很失望的。所以也提醒学弟学妹们(如果有学妹的话)不要因为C语言学得好而掉以轻心。综上来说,从讲课角度,刘东老师的课还是值得推荐的;不过如果以后给分都这么给的话,选课时候还是要犹豫一下。
非常喜欢刘东老师讲课的思路和语言,循循善诱,给人感觉很温柔的老师。
平时作业挺少的,写代码的题不是很多,每周一个小时内应该都可以完成。
给分个人感觉很不错,考前刷一刷考研题的话基本上期末全会。这次卷子可能出的比较简单,选择填空基本上都是在捞学生,最后代码题有一定难度,需要开始的思路就比较清晰,否则手写代码很难修改结构。
收获多少主要还是看自己大作业时候有没有多学点其他东西吧,毕竟课上讲的并不多,都比较基础。
首先我本人是个计算机小白,对计算机类课程其实打心里都挺怵的。
大一的时候C语言程序设计就学得很痛苦,最后得了3.7,与身边某些看起来很轻松但最后总评4+的人对比,还是有些失落滴(不过人家或许提前在中学阶段下了功夫,成绩比我好也是必然)。
大一结束后从东区转到信息学院,虽然知道信息学院后续还要学数据结构及其算法和计算机网络,但实在不想学东区的专业就只好硬着头皮来上课了。
刘东老师给人一种青年才俊的感觉,讲课很清晰,重点部分会有很多页ppt展开详细讲,有些非重点但很有用的东西也会讲的比较多,有些非重点部分会略讲,相应的ppt篇幅也会减少,这对后期复习也有帮助,考前会画一画重点,答疑态度很好,他本人和信息学院自动化系熊老师好像还有一个联合实验室也挺强的,以及他上课有ppt而且开学初就会把这一学期所有的ppt都共享到课程群里,而且还会为学生解答一些其他方面的问题。我就曾经私发邮件问过他关于未来专业方向选择规划的问题,老师的回复很及时而且耐心,给我写了很多,超感动!!!老师给分也不错,我得到的分数总之是我意料之外的。
关于这门课程本身,我感觉计算机类课就和数学类课一样是一个无底洞,你可以挖得很深,也可以局限于把课后题做完。不过个人还是推荐深挖一点,这样考试会更从容不迫。本人在前半学期比较闲,多看了一些关于数据结构的东西,还去直接尝试过leetcode上的题(虽然用时超长呜呜呜),因此感觉这门课还是挺难的。心疼CS系的同学,他们的估计更难。这门课平时作业很少,就课后几个题而且还不是全做。这门课会有上机实验,五六个上机实验,难度本人觉得适中,主要是代码量稍大一些,然后不要犯一些逻辑错误,但是没有涉及很难的算法,上机实验推荐能做就尽早开始做。这门课没有期中考试,最后应该是总评=期末考试卷面分数+上机实验分数(有必做和选做)+上机实验报告分数+平时作业分数,各部分的比例会根据期末卷面来调整。上机实验好好做,实验报告认真写结果都会不错。
首先修正一下,这门课本学期的学分调整为3.5,下降了0.5个学分。
其次是评课:
上课来说,刘东老师很有青年学者的风范,讲课有条理加上PPT内容丰富,可以说是“胸有成竹,娓娓道来”。
上机来说,数据结构很重要的一部分是上机实验,刘老师的班一学期有五个必做实验和两个选做,做了选做实验并且写了实验报告应该会有加分。上机实验的难度可以说是适中,有难度但不会做不完,当然肯定课下得花时间写一写代码。感觉如果能独立完成实验并且坚持敲敲代码,对完成期末考试的编程题大有裨益。
作业来说,刘老师留的作业其实是挺少的。当然作业少,就意味着期末复习得多刷刷题练练了。作业少的老师都受欢迎,不过学习效果如何还是见仁见智。
助教来说,似乎是研究生?感觉助教挺忙的,每周二收了作业就走了,不过上机的时候能一直见到他们。但是还是十分负责,每周作业都会上传作业题编译通过的正确答案,似乎是助教亲自写的。
给分来说,只以我个人为参考。平时作业完成还行,期末感觉还是挺难的,没有查卷,实验报告写得比较认真并且做了选做(不是非常难),最后拿到了优秀。
总结就是无论考试难易,认真上课认真写报告,无论是你的收获还是你的绩点一定会让你满意的。
老师上课还是蛮认真负责的 而且前面线性表部分讲的特别细致(虽然上课很想睡觉) 进度前面有点慢导致后面上的比较快 但最后几章老师上课上的真的好(用的课本最后看的真的难受)深入浅出2333
然后上机实验也比较轻松 除了哈夫曼难度不是一个级别的
总之老师很负责啦
上课非常认真细致,不仅详细讲解了各类数据结构的原理和应用,而且有关c语言语法的部分也详细地讲了,造福对c语言掌握得不够好的同学(比如我),就是上课有点慢,而且催眠,我差不多睡了半个学期。。。。。。
作业感觉太少了,光做老师布置的作业是不够的,还得把课本上的其他题目刷一刷。
上机实验也偏简单,不过最难的哈夫曼编码只给了一个晚上做有点坑爹。
给分非常好,我睡了这么久,期末考试前随便刷了两套往年试卷,实验整了三个最简单的交报告上去,也给了3.7,强烈推荐。