你的位置:首页 > 新闻动态 > 刊文精选

2022年第15期·地理信息科学专业“数据结构”实验教学改革探讨

2022-6-30 11:53:43点击:

[出处] 教育教学论坛_2022年第15期

杨秋妹 郑婵

[关键词] 数据结构;地理信息科学;实验教学改革

[基金项目] 2020年度华南农业大学校级教改项目“将思政之盐融入计算机算法类课程之汤的隐性教育探索和实践”

[作者简介] 杨秋妹(1983—),女,广东茂名人,博士,华南农业大学数学与信息学院讲师,主要从事计算机应用技术、农业图像处理、农业人工智能研究;郑 婵(1978—),女,福建邵武人,博士,华南农业大学数学与信息学院讲师,主要从事计算机视觉研究。

[中图分类号] G434;TP311.1 [文献标识码] A [文章编号] 1674-9324(2022)15-0069-04 [收稿日期] 2021-10-01

地理信息科学(GIS)专业是一门交叉学科,研究的内容涉及地理科学、测绘学、计算机科学、数学与统计学等[1]多个学科。GIS研究如何应用计算机技术对地理信息进行处理、存储、提取及管理和分析。GIS专业的学生需具备利用计算机进行数据分析与处理及应用系统开发能力[2]。因此,“C语言程序设计”“数据结构”等计算机专业基础课程是GIS专业的必修课程。“数据结构”研究的是非数值计算问题中数据的建模问题,其配套的实验课作为理论学习的补充,通过程序设计将抽象的数据结构在计算机上具体实现。实验的开展可深化学生对知识点的理解,是提高学生计算机求解问题能力提升的关键[3],为后继课程如“GIS算法基础”“网络GIS”“GIS开发新技术”等学习做好准备[4],也为其以后进行地理信息系统的设计及开发打下基础。作为GIS专业“数据结构”课程的任课教师,应充分利用实验教学环节,促进学生對于数据结构相关知识的学习,形成有GIS专业特色的“数据结构”课程教学方法。

一、GIS专业“数据结构”课程实验教学中存在的问题分析

(一)课程知识点多,实验学时不足

当前,高校GIS专业开设的“数据结构”课程,学时普遍比计算机专业的要少,配套的实验学时普遍不足,无法将各个知识点进行一一验证。以华南农业大学GIS专业的教学安排为例,其理论学时为32学时,实验学时为16学时,而计算机相关专业“数据结构”课程的理论学时为56学时,实验学时为32学时,GIS专业的学时明显压缩,这导致GIS专业“数据结构”的教学大纲不能直接照搬计算机相关专业,由于理论学时的减少,相关内容的学习则会有明显的侧重点不同,而实验环节的教学也应该做相应的调整。

(二)学生程序设计基础相对薄弱

“C语言程序设计”课程作为“数据结构”课程的先导课,学习的知识是“数据结构”课程顺利开展的前提保证,但是很多高校GIS专业的“C语言程序设计”课程是作为通识教育课程而非专业教育课程开设,这导致学生程序设计水平不高,并且由于学时的不足,“数据结构”中要用到的重要知识点如链表、结构体等内容都没有进行深入的学习。由于在“C语言程序设计”课程中编写代码的能力没有得到充足的训练,导致学生产生畏难情绪,在刚开始接触“数据结构”课程时听到需要上机编程都感到紧张害怕,没有信心学好“数据结构”这门课程。

(三)学生重视程度不够

GIS专业的部分学生存在错误认知,认为“数据结构”课程是计算机专业的核心课程,但是对于GIS专业来说并不重要,只需要作为一门通识教育课程去学习就可以了。但实际上GIS技术与数据结构密切关联,数据结构探讨现实世界中的一对一、一对多及多对多的数据关系,这些都与GIS中的矢量、栅格等数据结构相关。GIS多以现实的地图作为基础数据,主要涉及两大应用类型的地图,一种是地形图,用于展示地球表面特征的基本地图;一种是专用地图,用于表达事物变化模式的地图。而真实世界的地图在计算机上实现则需要用到“图”数据结构的相关知识点,如邻接矩阵存储法、最小生成树算法、最短路径算法等。GIS的问题求解需要大量“数据结构”课程中的知识点作为支撑。

二、GIS专业“数据结构”实验教学内容改革

(一)设计合理的实验题目

“数据结构”是一门强调动手实践的课程,因此几乎每个章节都需要配备相应的实验题目以深化学生对知识点的理解。但是GIS专业不能照搬计算机专业的实验内容,应该根据实验学时及学生编码水平进行调整。以笔者授课的2020级GIS专业的学生为例,多数学生在第一次实验课无法顺利完成一道实验题目,如果布置的实验题目过多,容易打击学生的学习积极性,使其产生厌学情绪。

GIS专业的“数据结构”实验题目设计应在紧扣教学内容的同时从学生的实际情况出发考虑。通过观察学生的实际做题情况,在计算机专业的“数据结构”实验题目的基础上进行调整,形成GIS专业实验题目集。实验题目集分为线性表、栈和队列、串数组和广义表、树和二叉树、图、查找、排序七个模块。线性表的实验包括顺序线性表的实现、合并顺序表、顺序表逆置、链式线性表的实现、合并链表、线性链表逆置;栈和队列的实验包括顺序栈的实现、循环队列的实现、栈的应用—进制转换、括号匹配检验;串数组和广义表的实验为串的模式匹配—蛮力法;树和二叉树的实验包括二叉树的构建、二叉树的遍历运算;图的实验为实现图的存储结构;查找的实验包括顺序查找、二分查找;排序的实验包括直接插入排序、冒泡排序、快速排序、简单选择排序;经过调整,将部分较难的实验题目去除,但保留了线性表、树、图核心数据结构的实现及基本操作,保证学生对重要知识点的验证实验,确保学习质量。

(二)丰富实验做题的形式

笔者授课的GIS专业采用的教材為人民邮件出版社出版、严蔚敏主编的《数据结构(C语言版)》。书中的各类数据结构以结构体的形式实现,在实现时涉及结构体变量的定义、函数的调用等知识点,对于程序设计能力普遍有限的学生来说入手比较难。根据笔者授课的班级情况统计,在课程学习初期存在着部分学生无法完整编写一个程序的现象。因此,实验题目的设置形式应多样化,不能单纯地只给出题干,直接要求学生从无到有编写出一个完整程序。实验题目可包括程序填空题、程序阅读题及算法设计题。在实验初期,可多以程序填空题及程序阅读题为主,这样可保证学生既能快速进入学习状态,也能通过代码的阅读加深对代码的理解,规范代码的编写。到实验中后期,则可多以算法设计题为主,进一步锻炼学生的编码能力。

以“顺序线性表的实现”为例,如果只给出题干要求学生给出实验—顺序线性表,即便是书本上已经给出了大部分的代码,大部分同学还是不清楚该如何下手编写程序,而以程序填空的方式则可让学生快速上手,同时也起到了验证课程学习内容的功效。程序填空题不是简单地填一个空,而是给出程序的总框架,如函数定义等,让学生往里面补充代码,所补充的代码可以是单条或多条语句。

(三)重视综合性实验的开展

综合性实验是布置给学生课后完成的实验,可弥补实验学时不够的缺陷。因此,应充分利用综合性实验的开展来加强学生对知识点的掌握。树、图部分的内容对于GIS专业的学生来说非常重要,综合性实验可从这两方面来设计题目,可用“实现二叉排序树的各种算法”及“实现图的各种算法”作为基本题目出发点,学生可从两个题目中任选一个来进行扩展实验。通过综合性实验的开展,可进一步训练学生函数的调用、递归、栈、队列、树、图等知识点的编码能力。

综合性实验的题目与课堂内完成的实验相比,难度大,工作量多,允许学生以2人组队的形式完成,通过团队合作锻炼程序模块的划分、组合。

综合性实验开展过程中,鼓励学生积极灵活地运用所学的课程知识,并通过查阅参考资料将其与自己所学专业结合。如二叉排序树可扩展到地理信息系统中的空间索引问题,创建四叉树解决二维空间数据的高效查询。而图算法则可应用在地理信息系统中的网络分析问题上,包括旅游路线规划问题、电子导航问题、通信规划问题、城市基础设施搭建问题等[5]。

三、GIS专业“数据结构”实验教学方法改革

对于计算机相关专业,由于其大部分学生已具备了一定的程序设计能力,所以“数据结构”实验的开展主要以学生动手编码为主,教师讲解为辅。而GIS专业的学生则需要教师更多地参与到其实验的开展过程中。

(一)加强代码演示讲解环节

根据学生给的教学反馈,学生反映无法将算法思想与代码编写进行关联。在实验环节增加代码演示环节很有必要。尽管学时不多,仍需对较难理解的算法通过代码演示的形式给学生进行讲解。教师运行程序,输入有代表性的数据,在关键步骤结合中间输出结果讲解程序语句的执行过程,解释算法思想。如链表的插入,其代码演示页面如图1所示。上课讲解时结合代码给学生介绍在链表的第i个位置插入新元素,首先找到第i个元素所在的位置(代码2~5行),接着生成新结点并对其赋值(代码6~8行),加深学生对代码的理解掌握。

除了教师直接给学生进行代码演示外,在教材《数据结构(C语言版)》中已经对大部分的数据结构操作都录制了代码演示,可通过书本提供的二维码扫码观看。学生在学习完每个知识点后,可结合书本的代码实现及算法的动态演示,了解算法的一步步运行过程,加深对算法的理解。

(二)引入在线评判的考核方式

“数据结构”实验每次课都需要学生完成一定量的实验题目,对学生实验的完成情况进行检查能端正学生的做题态度,督促学生按时完成作业,促进学生做题的积极性。但由于现在的课程多采用大班教学,人数众多,任课教师无法每次课一一对学生的代码进行检查。国际大学生程序设计竞赛(ACM-ICPC)为全球最有影响力的大学生程序设计竞赛,比赛采用在线评判的方式检查参赛者的代码是否正确[6]。在GIS专业的“数据结构”实验课程中,也可引入在线评判系统,教师对每道题目设计合理的测试样例,学生通过在线评判系统提交实验代码,由在线评判系统自动进行评判,及时反馈实验结果,学生根据反馈结果进行代码的修改,由此提高实验效率。教师也可通过在线评判系统及时获取学生的实验情况,了解学生的掌握程度,并由此做出相应的实验教学辅导。采用在线评判的另一个好处是可引导学生自己设计样例测试数据。通常系统只给出1~2个测试样例,但是实际评判时会有多组数据,做题时学生经常会出现测试样例通过但提交到评判系统则无法通过的情况,但是设置成多次提交会扣除部分分数,鼓励学生多考虑程序的边界条件、异常情况等因素,加强程序的健壮性。

除了在线评判系统外,对于部分迟迟未在系统上提交实验或多次提交都无法通过的学生,应由教师及助教对其进行一对一的作业检查及辅导。由于在线评判系统是黑箱子评判模式,只有通过全部测试数据才标记为已通过,有部分学生因为程序设计知识掌握不扎实,被某组测试数据卡住后无法独立找出错误原因。教师可通过与其分析代码,帮助其较快地解决问题,赶上实验的做题进度。

在实验评分上,除了依据在线评判系统的做题情况外,教师也应根据学生在实验上投入的精力及努力程度对其进行分数的嘉奖。

(三)加强学生程序调试能力的培养

通过多年观察学生在“数据结构”实验课堂的表现情况,发现当程序对于给定输入得不到预期输出结果时,很多学生不清楚如何进行代码错误定位,从而浪费大量实验时间。因此,在“数据结构”实验教学中,应加强学生程序调试能力的培养。程序调试指的是根据错误提示信息及算法逻辑的推理,找到有可能会导致错误发生的位置。

程序的调试手段之一,通过在程序源代码中设置多个输出点,通过中间输出结果来定位错误位置。在线评判系统要求输出结果严格按照给定的要求,否则出错,在此要求下学生编写的程序一般只输出目标结果。一旦出错,很难确定出错位置。此时,则需要增加中间结果输出作为程序调试的依据。

程序的调试手段之二,利用程序集成开发环境(IDE)提供的debug調试模式,在程序可能出错的代码行设置断点,通过debug中提供的单步运行、进入函数内部或跳出函数等方法,监控程序中各个相关变量的情况,尽快定位出错的地方。

教学应因材施教,GIS专业“数据结构”实验课程的开展应根据学生的专业背景,结合学生对先导课程的掌握程度,设计合理的课程教案。在教学内容上,可通过调整实验题目、增加实验题型,以综合性实验的方式拓展实验深度。在教学方法上,重视实验代码演示,采用在线评判系统结合人工评判的考核方式,加强学生的程序调试能力训练。借由GIS专业“数据结构”实验课程教学的改革,为GIS专业的学生在后续的专业学习提供保障,也为其在未来从事GIS二次开发、底层开发的工作打下坚实的基础。