| 选课类别:计划内与自由选修 | 教学类型:理论实验课 |
| 课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
| 课程层次:专业基础 | 学分:4.0 |
数据结构是计算机学科一门重要的专业基础课,该课程系统地讨论各种常用的数据结构及其应用,各种查找和排序的方法,及其综合分析比较,能够培养学生数据抽象和程序设计的能力,算法时、空复杂性的分析能力。
占个坑,等考完有空再详写。
期末考得不错,班上平均分还是挺高的,比其他某个班高了6分左右。
数据结构这门课还是挺简单的,上网搜搜相关考研的动画理解清楚就够了,凸显出考前突击的重要性,许多较复杂的算法不要求在考试中手写出代码,感觉考着比程设舒服多了。
update1.21:
推荐 B 站 UP 主 蓝不过海啊 的数据结构讲解视频,可视化动画、清晰的讲解,特别好。
如:
不知道老师会不会捞,我在卡绩的边缘
通宵复习图论感觉还是要寄,还有一个小时考图论,学也学不会了,遂开摆写一下数据结构评课()
助教很负责,特别是在课程群里分享了个王道考研书电子版,这本书比教材/ppt好懂多了,考前把上面的概念全过一遍,最好结合视频记忆比如【平衡二叉树(AVL树)-哔哩哔哩】 https://b23.tv/j7yQAsH (考前突击的时候在b站上找到的不错的数据结构动画演示系列,非常有利于快速记忆),前面的小题和应用题应该就能做个八九不离十了。
算法设计题部分,感觉全是深搜,前两题如果平时正常完成作业/实验的话应该属于送分,最后一题略有难度,总体难度感觉和往年差不多。
马老师班的作业有点多,有5个lab,每个实验基础分10分,一般每个lab会有若干bonus,每个可以+0.5或1分。这些bonus写起来通常非常赤石…如果要做的话十分建议适当使用ai辅助生成代码,否则真的挺浪费时间的。
实验考核很人性化,至少出勤7次,助教态度十分友好,即便写了bug也会酌情给到9分,后续补全修改通过可补至满分;期末周还设有线上补检,照顾之前未完成实验的同学。
此外,马老师可能会在发现到课人数较少的时候点名,尽量到课,目前暂时不清楚缺勤对成绩的影响。
谢谢你,出题人,上一次让我写代码写到破防的考试还是计算机程序设计😇
出期末分之后更新
在这给马老师和助教们磕一个了😭没想到自我感觉考的很拉的情况之下还能给我一个不错的分数,只能说太仁慈了,建议以后也要一直仁慈下去呀。
平常上课:马老师讲课水平还是比较不错的,我感觉不像前几年某个评价说“马老师上课完全就是PPT翻到哪就讲什么”,很明显老师对PPT和课本都是非常熟悉的,并且有自己的理解在里面,会比较灵活地在PPT与课本之间切换。在上到课程难点时,老师还会将例子板书上去,并且一步步地推导算法的执行过程,只能说非常细节了,如果不像我一样上课老想看两眼手机,一直专注地听完的话,想必是很有收获的。
实验:今年马老师的实验相比之前增加了一个,但是总量上保持基本一致,我做下来感觉确实锻炼了很多,但是只锻炼了C而没有锻炼C++,我有罪。在实验检查上,不同助教风格很不一样,但是总体而言是比较宽松的,不会过于刁难同学,大好评。并且助教在Lab4与5上提供了丰富且实用的样例,一定程度上简化了验收,也方便我们对自己写的程序的检验,必须大好评。
Lab1:一元多项式的运算
我基本认为这是对去年计算机程序设计课程的一个复习,因为去年我所在的班还真的布置了这个实验😂总体来说难度不大,只涉及对链表的使用,作为复习C语言和链表知识来说还是蛮不错的。
具体实现内容:多项式的加减乘法,求导,求函数值,最大的难点可能是乘法,但是也算不上太难。
Lab2:离散事件模拟
该实验有三个选题,分别对应严蔚敏数据结构习题集的实验2.6,2.7,2.8,这里主要讲一下2.7(航空订票系统)但是不管选哪一个,难度都不小,需要留足够时间。
2.7需要让你实现查询、订票、退票和候补的主要功能。查询很容易,不必多说;订票主要是订的数量和余票的关系这里需要把握,如果订不了票,后面就要问是否需要候补;退票也相对容易;候补的话就是在退票的基础上实现的,如果退完票之后,队列的第一个可以候补到,就要办理订票手续,否则问下一个,直至结束。
Lab3:稀疏矩阵的加减法(乘法选做)
内容量和Lab1应该差不多,稀疏矩阵的实现规定为十字链表,只要课上听明白了十字链表如何建立的,做起来就相对轻松
Lab4:哈夫曼编码解码
这个实验还是挺有分量的,首先需要对文件有一个很熟练的读取和写入,其次对哈夫曼树的建立和编码应用需要完整地写出来,编码成功之后对于每个字符/二进制数的读取与转化也是需要仔细操作的。
Lab5:导航系统
这个主要考察对于图的操作,具体内容就不说了,怕下一届有卷怪早早把这个写完了(不是),其实就是对DFS,BFS,dijkstra算法的灵活应用。
考试:本次考试相较以往区别不是特别大,但是有些概念题过于细节且零散,例如“拓扑排序的定义是什么”,“m阶B-树的m是什么意思”,最后一道算法实现题也比较难,书写量也很大。此外这次考试题出了不少小错误/歧义,也挺拖大家的考试节奏的,但是没有延时,感觉应该适当延一下的。
总之,课堂和实验都是非常不错的,就是考试有点烦人,遂扣1分。
继程序设计后的又一门代码课。
由于本人代码力十分弱,于是这门课成了这学期做作业最痛苦的一门课。据其它同学(含其它学校同学)说数据结构这门课是“水课”,这样一学期上下来内容量好像确实不大,很多都是可以靠图像和动画迅速理解的内容,不像隔壁图论(乐)
用的课本是清华大学出版社严蔚敏先生的书。课堂内容是课本1~7、9、10章,其中带"**"的内容和第10章(排序)不考但课上都会讲。这样看下来这门课的内容大概就是链表、栈、队列、串、树、图、查找,其中树和图那两章的内容在图论基本都讲过,且考试中内容占比“非常大”,算是减轻压力了。比较难的内容,例如KMP算法和平衡二叉树旋转,推荐找视频辅助理解,很直观。作业和上机题也是课本配套的习题。
课本用的是“伪c语言”,推荐一并学习对应的c++ STL。(虽然本人并不会,全是用c语言写的
老师上课用的ppt好像是课程组统一给的,上课对着ppt讲还挺清晰各种概念和算法也解释的挺到位,讲课水平没问题。但是有时候会讲书上的示例代码,而这些东西ppt上没有,老师就低头对着书干讲,导致我经常不知道老师在讲什么,虽然貌似是我不怎么好好听课导致的
好像考勤过2次,“周一没来的同学周三可以找助教补签”,“我们考勤的目的不是为了扣同学的分,而是为了督促同学们到课”。会发ppt,不过经常需要同学提醒,提醒完还有可能“忘了”
上机课共10次,有3次“无理由翘课”机会,且若在某次上机题截至时间前检查完本上机题,则本截至时间前的上机课都会算出勤,所以实际上如果早早检查完上机题的话上机课是压根不用去几节的。不过本人上机题都一拖再拖,去满了7次就当去写码了。
上机题共5个(据说前几年是3个,有点谔谔),不用写实验报告,有额外加分项可以加少量分数(难度不一,本人随便做了一点简单的,麻烦的就没做了)。粗略估计平均代码量大概在200行左右,可能和一整周作业的代码量差不多。
Lab1: 一元多项式计算器,加减乘求导什么的,算是程设链表练习
Lab2: 离散事件模拟。银行业务模拟、航空订票系统、电梯模拟三选一,不同难度分值不同。个人感觉最难的一个,只做了最低分值的内容。
Lab3: 矩阵加减法,要求矩阵用十字链表形式表示。最简单的一个,套用一下Lab1的代码就行了。
Lab4: Huffman编码 压缩/解压
Lab5: Dijkstra,还有图的一些杂七杂八的小内容
本人开始时老老实实完成平时作业和Lab,到后面越来越红温,遂使用“先进的生产工具”“高度辅助”自己完成,并人工“仔细复查”。到后两个Lab的时候说“上机题超过ddl不扣分,设ddl只是为了督促同学们完成”,于是我就拖到了很晚才写,算是勉强掐着点赶完了Lab。
考试1/3小题,1/3简答(比如手搓算法),1/3手写代码。简答和手写代码除了最后一题都不算难,而且手写代码的量远少于程序设计,写起来相当简单。不过最后一题还挺有难度,本人考试的时候想了挺久,最后这题只写了手写代码以外的部分,估摸着代码量不小。
改卷放水程度极高,出分后问到分数就觉得高得很异常。优秀率会拉满。