当前位置:首页 - 教学促进

《算法设计与分析》实验教学的一点思考

算法设计与分析是计算机学科中的专业基础课,越来越受到重视,无论是计算科学还是计算实践,算法都在其中扮演着重要角色。在计算机教学中,不论是对于对于理论类的学生还是对于应用类的学生,学会分析算法、设计算法、优化算法是一项最基本的要求。本课程的教学不仅应该注重学生对理论的理解,锻炼学生的抽象思维和创造能力,更应注重培养学生独立设计算法,并能对算法进行复杂性分析的实践能力。

但是,该课程涉及大量的数学理论、抽象数据类型,内容有一定的难度。这就为老师如何教授该课程,如何引导学生进行上机实践并解决一些典型问题,如何训练学生的分析、设计、编码、调试等环节提出了挑战和考验。算法本来就是一门面向应用的实践性很强的课程。本文根据本课程的特点,结合多年的教学经验,针对算法设计与分析这门课程的实践教学进行了探讨。

1、算法实验教学中存在的问题

     在教授本课程的过程中,我们发现,学生普遍认为该课程比较难学,尤其是实验教学效果不太理想,很多学生在上机实验时表示无从下手,缺乏信心。通过对我所教授的几届学生的调查,我发现出现这样的问题主要有以下一个原因:(1)教材理论性太强,课程不好理解

《算法设计与分析》这门课程要求学生有严密的逻辑思维能力和抽象思维能力,课程中的很多算法都需要细致的推导、耐心的分析,并能把特殊问题抽象成一般问题,这是很多学生所缺乏的,所以教材中的理论知识学生不能透彻理解。而且这门课程还涉及到一些高等数学、离散数学等数学上的理论,使得学生们一看到这些复杂的数学定理、数学推论、数学证明就产生了畏难情绪,对这门课逐渐失去了兴趣,大大减低了学生的学习积极性。

而现在本科高校里常用的教材一般理论性又太强,讲解比较高深,实例分析不够细致,适合研究生、 重点院校本科生使用。这使得学生对本门课心生畏惧。

2)学生对上机编程不熟练,出错较多

最经常使用的教材中的算法一般都是由C语言、C++或者是Java语言来描述的,虽然这些语言学生都学过,但是学生以前编制的程序都是为了训练语法而练习的较为简单的程序,尤其是指针、结构体、参数传递、递归等又是程序设计语言中的难点,学生对这些理解较浅,但是这些应用在算法设计与分析这门课的上机中又被频繁用到。所以在上机实验中,学生们设计出来的程序往往错误百出,很多学生因为对语法了解的不够深入,甚至连调试程序都不会,程序错了也不知道该怎么去修改,单单是调试语法错误就要花费很长时间也不一定能调的好,大大降低了学生学习的积极性和自信心。

3)上机时间太少,实验做不完

《算法设计与分析》这门课程,内容非常丰富,涵盖面很广,最基础的是一些经典的算法设计策略,如分治法法、动态规范法等,还有一些较高级的设计算法的策略,如随机化算法、近似算法等,另外本门课程还有一些扩展知识。这么多算法要想较好的掌握,必须上机实践。但是每一学期的教学课时是有限的,这有限的课时分配给理论课的时间一般都要多一点,要不理论课讲不完,上机课时就比较少了。我们学校上机分配是18个课时。而且这门课程的上机实验有一些是较复的大型实验,这样的实验从开始构思、分析到设计实验、上机编程、调试两节课是做不完的。这就给本门课的学习带来了困难。

4)上机内容是对课本内容的机械重复,不能创新

    本门课程在上机时,基础实验都是课本上算法的验证性实验,也就是把课本中的算法用程序设计语言实现一下,程序结果出来后就完事大吉,学生觉得自己 的任务就完成了。这样的实验效果并不好,对培养学生的分析问题的能力、解决问题的能力没有明显的效果。

2、教学改革的一些策略

    由于本课程在上机教学的过程中存在着种种问题,根据本课程的特点,以提高学生应用能力、独立解决问题能力为主导,我们提出以下的一些对策。

1)改革实验流程

在实验环节中,先由老师结合课堂上所讲的知识点布置实验任务,并要求学生按照软件工程的思想,先进行需求分析并制定计划,然后讨论问题的解决方案,并向老师提交该方案的伪码或上机代码,再由老师审定该方案并提出反馈意见。前期工作都做完后在上机实践、调试。采用这样的实验流程,一方面可以节省上机时间,因为上机前就已经做好了大部分的工作。另一方面,最主要的是,可以培养学生自主分析问题、解决问题的能力,督促学生把所学知识应用到实践中去。

2)改革实验内容

我们将上机实验的内容分为基础验证性试验、设计创新性实验和综合性实验。验证性试验是让学生更好的理解书上的算法,是最基础的。设计性实验让学生根据问题独立设计算法,培养学生的应用能力和创新能力。综合性实验是一些大型的实验项目,也是选作性内容,培养学生综合解决问题的能力。

为了提高学生的学习兴趣,把程序设计竞赛中的题目引入到实验中来。比如引入国际大学生程序设计竞赛的题目。该竞赛中的题目最强调的:采用最优算法、最短时间、最准确的完成给出的题目答案。这将起到加强锻炼学生的编程能力和提高学生的学习热情的目的。

在让学生设计算法时,为了让学生较好地掌握各种方法之间的联系,扩展学生的思维,可以同一个例子而采用多种方法来解决,让学生自己选择自认为最优的算法。通过对这多种方法的比较,加深了学生对这些方法的理解,同时又让学生掌握了一种能力,这种能力也是这门课程要求学生掌握的最基本的能力之一,就是算法的最优化。

3)分小组实验

因为本课程的实验内容相对较为复杂,有些实验项目属于大型实验,对学生来说很有难度而且比较费时间。所以我们在上机前先把学生分成小组,小组内对上机内容进行讨论,探讨问题的解决方案。一个人的能力是有限的,大家的力量是无穷的,通过组内讨论,大家对问题理解更深刻,也可能会讨论出问题的多种解决方案,集思广益,对大家都有好处。同时学习好的同学要帮助学习不太好的同学,带动这些学生共同学习共同进步。上机时,针对一些大型实验项目,进行组内分工,在有限的时间内共同解决问题。

4)充分利用实验室资源

针对上机课时不够,学生有些实验做不成或者做不完这种情况,为了充分利用实验室资源,实验室实现开放式管理,增加学生上机的自由度。同时我们还成立学习兴趣小组,让一些对本课程感兴趣的学生,愿意学习的学生在课外能够继续钻研,有问题大家一起讨论,定期老师进行辅导,有效地延伸了学习时间。