兴趣、实践、创新的《数据结构与算法》教学模式
2015-03-20陈贞
陈 贞
(莆田学院 信息工程学院,福建 莆田 351100)
“数据结构与算法”是计算机专业的核心课程之一,在计算机本科教学中起着承上启下的作用.这门课程教学的核心在于通过数据结构各种概念的讲解让学生能够较全面地理解数据结构所要讲授的内容,然后通过各种算法的处理与实现,掌握不同数据结构及算法的特点,了解在软件设计中如何用到数据结构的原理来解决问题[1].“数据结构与算法”课程的先修课程中有一门是语言程序设计,掌握好一门程序设计语言对学习数据结构这门课程中算法的实现会起到很好的帮助,同时这门课程也是计算机中其它专业的先修课,如操作系统、编译技术、数据库概论等等.在很多的科学计算或模拟试验中,都会使用到各种的数据结构和算法来解决,是设计应用软件的基础工具.
“数据结构与算法”这门课程作为一门理论课,不像flash、网站设计或数据库等课程,在学习的过程就会见到效果,它的操作性比较强.而学生常常会认为它的理论性太强,概念过多,相对较为枯燥,一开始接触就感觉难以理解,也不清楚具体怎么用,所以虽然对于课程在态度上是重视的,但学习起来会觉得相当茫然,不知道从何入手;而到课程中期时,随着内容的逐渐深入,学生就会觉得理论过多,内容过于枯燥,算法无法实现,慢慢失去兴趣;所以到课程结束时,大多学生不清楚自己具体学到了什么,更不用说怎么去用所学的数据结构知识去解决问题了.
为了推动教学方式、教学手段、学习方式的创新和改革,我们把实践技能培训和创新能力培养作为课程建设的主要目的,通过不同难度的综合设计性实验,定期开展课程学习研讨会,引导学生探索“探究性学习、自主性学习、合作性学习、实践性学习”等新型的学习方式,提高学习效果.
1 兴趣
如何培养学生学习这门课程的兴趣,是我们在教学中一直在努力的,当然这是一个比较复杂的系统问题.在培养兴趣的过程中,我们需要注意对学生兴趣的及时引导或转移,同时在课堂教学中,经常对学生进行兴趣强化.如教学中让学生了解所学知识在现实生活中的具体应用,让学生看到一种实用软件产品中用到所学的知识,所学有所用,这样就会大大激发学生浓厚的学习兴趣[2].
兴趣的培养需要在多方面给予学生引导.在教学手段上以多媒体技术和网络技术为依托,制作高质量的多媒体课件、算法动态演示系统和教学网站.在教学中,学生经常会对一些算法的过程难以理解,通过图形和动态演示的方式将这些难以理解的算法形象地表示出来,让学生看到算法执行的动态过程,将抽象的知识具体化,这样有助于学生对抽象问题的理解.
对课堂讲授内容的把握上,要有张有弛,吸引学生的注意力.如何在课堂上激发学生的探究兴趣及热情,是看我们教师如何把握好课堂的教学.在教学中可以选择一些基础、本质的知识点,通过“案例”的引导与分析,让学生在引导中共同思考,理解概念,把握要点,同时激发他们的探究兴趣和热情.例如在介绍队列时,可以通过“食堂排队买饭”的现实生活作为案例,引入队列的概念,分析队列的特点.食堂排队的过程就是一个队列的操作过程,最先排队的同学排在第一个,他也是最先能打到饭的人,而后面的同学在排队的过程只能排在队尾,这样的一个过程等同队列插入、删除操作,即按照先进先出原理是一样的.通过这样一个现实的生活案例让学生理解队列是一种操作受限的线性表、进队和出队的操作,以及队列的先进先出的特点.这也就是通过案例中用到的知识点来是解决算法,分析过程,得出结论.与此同时,协助和指导学生主动建构同类知识,如讲解栈的概念及操作,让学生举例说明现在生活中何种情况是属于栈,然后比较栈与队列的操作的相同与不同.它的目的就是通过“案例”的基础知识的掌握使学生举一反三,并提高和发展他们的创造能力.
又例如在讲解各种经典排序算法中的希尔排序时,因为希尔排序的时间耗费与算法中“增量”序列的函数有关,这个分析是一个复杂的问题,而到目前没有人求得一种最好的增量序列,大量的研究只是得出一些局部的结论.为此,让学生以课外分组的形式,查阅一些相关资料与研究,讨论目前所提出的一些较理想的增量取法,并将这些取法通过实验来证明其优越性.通过这种课外探索的方法激发学生上机编程的兴趣,也可以让学生逐渐学会探索实践的创新精神.
另外在讲授一些具有一定历史意义的具体课程内容时,如哈夫曼树,迪杰斯特拉算法等,除讲解其基本原理以外,还可以对当时的分析过程、设计过程给与分析,以激发学生的兴趣,和对问题的探索精神,同时培养他们自己去查阅资料的能力.在课外的知识探索中引导学生深入思考,调动学生学习的主动性.
在课堂上通过典型案例的讲解,对课程重点内容提供一些思考题、学科前沿问题供学生讨论,引导学生进行深入思考,激发学生的创新思想,在教与学中充分调动学生学习的主动性,提高学生自学探索的能力,通过所学知识来分析问题、解决问题,在引导与自我探索中获取新知识,提高理论联系实际能力.
2 实践
“纸上得来终觉得浅,绝知此事要躬行”.一些学生感觉“数据结构与算法”课程难以理解,学习起来困难的一部分原因在于将理论与实践脱离了[3].作为一门理论和实际紧密结合的课程,在整个实践教学过程中,如何选择实践题目,既能从学生的实际学习能力出发,又能使得学生理解和掌握课程知识体系中的理论和抽象概念,是一项重要的工作.学生只有通过适当的实践训练,才能理解掌握课程内容,通过实践,理解各类设计实现方法,提高软件系统的实践能力.
实践教学需要循序渐进,从基础算法,技能训练再到综合设计和开发训练,每一层次的实践需要学生达到理论课堂知识与实践相结合的目的.
(1)基础训练:每一次的课堂都会涉及每一种数据结构的基础知识,根据课堂教学中讲授过的内容,布置一些针对本堂课基础知识点的小型练习题,一次实验解决一个问题,让初学者易于接受.也通过这种简单直接的验证性算法,让学生树立编程的信心.
(2)技能训练:掌握了基础算法之后,需要训练通过基础算法来解决实际问题,如,多项式的加法、乘法运算,数制转换等问题,让学生思考解决这样一些问题需要用到的存储结构,及如何通过基础算法来实现.通过一些与实际问题相结构的简单技能训练,让学生在掌握基本算法的基础上,灵活运用来解决问题,从面激发学生实践的兴趣.
(3)综合训练:综合性实验目的是为了培养学生对知识的综合应用能力,运用不同的思维方式分析问题、解决问题.这部分的训练可以安排在课程教学内容过半之后,在题目的选择上应尽量覆盖多个章节的知识点,学生在综合性实验中需要通过需求分析,比较选择不同数据结构实现的不同.如在讲完线性表这一类型的结构后,可以安排“迷宫求解”做为线性表部分的综合性实验,让学生提出通过栈和队列两种不同方式来实现路径的求解;而讲解完图的数据结构后,就可以以学校的校园平面图作为一个综合性设计题目,设计校园的导游图,让学生综合运用遍历、最短路径等知识来解决实际问题,如为用户提供学校景点信息的查询,查找任意两景点之间的最短路径,等等.此类实验旨在培养学生综合应用知识的能力,在解决问题中灵活利用基本算法.
(4)开发训练:现代的软件开发需要团队的合作,而课程的开发训练可能与实际的软件开发有一定的距离,但这一部分的训练,目的是通过分组实施此类实验,在实验过程中培养小组成员结构化程序、模块化程序设计的方法和能力,提高编写程序的技巧和软件设计的能力.考虑学生的差异性,设计不同的问题.学生可以通过分组,查阅资料,来选择自己擅长的主题,确定实验题目.学生确定完实验题目,需要按照软件工程开发流程来做,包括需要提交需求分析、模块设计,撰写实验报告,包括分析数据结构,程序代码及测试数据,以及实验的总结报告,包括实验过程的一些思路,问题的分析及解决问题的讨论.这一部分的训练不一定得解决一个相当复杂的问题,但需要学生学会团队的分工合作,锻炼他们的合作能力,在团队的交流中拓展思路.
3 研究
教学中针对探索和批判这两个关键因素,培养学生主动获取知识、进一步综合已有的知识去创造新知识的能力.“数据结构与算法”这门课程的理论性相当强,如果只是一味地强化课堂教学,将所有的知识点面面俱到,滴水不漏,反而不利于学生问题的提出[4].许多知识点的把握需要由学生自主去体会、思考与探究.所以课堂上需要培养学生的问题意识,引导学生做些课外的资料查找,并定期在课堂上请学生将自己兴趣的问题及资料同大家一起分享,从而锻炼学生自主学习与钻研的能力,引导学生做科研的兴趣.
例如在介绍“查找”这一章时,教师可以先引入实际学校对学生管理系统的操作出发,引出“查找”的需求;带领学生用已经掌握的知识去解决学生系统的存储问题,例如顺序表或链表,数据类型的结构等等,再引入散列表的概念;引导学生根据实际需求分析查找的要求,给出顺序、折半、分块、散列法等的查找方法;分析这些方法的优缺点、复杂度,思考在什么情况下适合用什么样的解决方案;同时让学生通过实验,比较各种方法实现查找的时间复杂度.另外启发学生除了教材所用的方法,是否还有其它方法或是对这些方法的改进,引导他们课外去查阅资料.在这个过程中,就有学生发现有人将折半查找min=(low+high)*0.5中的参数0.5改进为0.618(黄金分割线),于是就与同学讨论,实验比较,通过排序时间来看哪种算法更优化.这样,无形中激发了学生编程的热情,也让学生逐渐养成了探索研究的创新精神.
4 总结
《数据结构与算法》是一门理论与实际结构非常密切的专业基础课,需要培养学生严谨的思维,同时也需要培养学生应用能力及独立思考的创新能力.在课程教学过程中注重培养学生的兴趣,采用“问题化、层次化、多样化”的模式,在实际教学中取得了较好的效果.在实践中,通过由基础到复杂的训练模式,帮助学生循序渐进提高编程能力,增强了学生解决问题的信心.课堂外引导学生通过查阅资料,提高自主学习的能力,培养科研意识.
〔1〕严蔚敏,吴伟民.数据结构 C(语言版)[M].北京:清华大学出版社,1997.
〔2〕承蓓.高职数据结构教学中三个情境导入设计案例[J].信息与电脑(理论版),2014(9).
〔3〕邓桂英,高丽萍,李锐等.“数据结构”教学中提高学生的编程能力浅谈[J].计算机时代,2013(8).
〔4〕曹春萍,陈平.问题驱动法在“数据结构”教学中的应用探讨[J].中国电力教育,2014(23).