问题主导,质疑驱动的数据结构与算法教学模式探索
2013-08-05陈倩欧阳骥胡传福
陈倩 欧阳骥 胡传福
(东莞理工学院 计算机学院,广东东莞 523808)
数据结构与算法是计算机专业的技术基础和主干必修课,课程既有严格的理论证明,又具有很强的构造性和应用性,要求学生通过课程的学习掌握常用的基本数据结构和基本算法设计策略。数据结构与算法课程内容较多,难度比较大,所以学生应具备较强的抽象以及抽象描述下的构造思想和方法。通过几年的课程教学和研究,我们发现数据结构和算法这门课程在教学过程中容易出现以下问题:首先,纯算法和理论的讲解,内容比较枯燥,学生容易失去学习兴趣;其次,教师在教学过程中因为内容较多,容易产生知识过度灌输的现象,导致学生和老师的负担都很重;最后,学生实践中设计和应用数据结构和算法缺乏方法指导,往往出现应用时无所适从,不知道该如何开始和进行的现象。
针对上述问题,本文提出了一种以问题为主导,质疑驱动的数据结构与算法教学模式。这种教学模式围绕问题组织教学内容,并把教学过程分为提出问题、分析设计方案、实现方案和执行验证四个环节,在每个环节中加入质疑因素推动进行。这种教学模式旨在通过实际问题的设置提高学生的学习兴趣和主动性,教师引导学生在每个环节中通过对自己的不断质疑一步步的分析和解决问题,使学生不仅能掌握课堂理论知识,而且在质疑过程中养成良好的工程分析和设计思维能力。
1 问题主导,质疑驱动的教学模式
问题主导,质疑驱动的教学模式,首先需要教师围绕问题设计教学内容。设计的问题本身应具有实际的业务背景,这样的问题能够对学生产生吸引力,激发学生解决问题的兴趣;问题难度要适中,太难学生容易失去信心,太简单又缺乏挑战性;问题最好能覆盖若干个知识点,能有多种解决方案,让学生在解决问题时能综合运用所学知识,对比各种方案的优缺点。其次,质疑驱动的教学模式始终把质疑贯穿于所有教学环节。刚开始,质疑以教师为主导,在每个环节中通过质疑学生进入下一环节或返回上一环节,到后面阶段,引导学生自己对自己进行不断质疑,驱动他们一步步设计出符合工程要求的数据结构和算法,同时让他们在这个过程中自己总结和体会算法设计的思路和方法。问题主导,质疑驱动的教学模式过程如图1所示:
图1 问题主导,质疑驱动的教学模式示意图
2 问题主导,质疑驱动教学模式具体环节分析
下面结合一个非常简单的案例来阐述以问题主导,质疑驱动的教学模式中各个具体环节。案例采用的问题描述为:图书馆系统中有一个功能为在给定的n本书中查询“数据结构”这本书的价格?请实现这个功能。
2.1 问题提出环节
在这个环节,教师根据课程内容提出一个问题,问题一般围绕某个或某些知识点展开,要求学生针对此问题展开分析,理解问题需要实现的功能需求。对于上面的案例,一般的学生都能够分析出此问题实际上是设计一个算法,在n个数据元素中查询某个数据元素。教师在这个环节可以引导学生质疑自己对问题的理解是否正确?是否全面?等等。比如:教师可以提出这样的质疑:现在的需求是让你查询“数据结构”这本书的价格,如果需求变化了,比如明天可能需要你查询“操作系统”这本书的价格,那么算法要怎么办?对问题的理解和分析是所有算法设计的前提,经过这样的不断的质疑,学生以后分析问题就会更加的全面而深入,设计出来的方案也更加符合工程的要求。
2.2 解决方案设计环节
分析和整理问题后就会进入设计环节,在这个环节,学生可以利用课堂学习的理论知识辅助资料搜集,讨论等方式进行数据结构和算法方案的设计。一般来说,学生在设计出了能够解决问题,满足功能需求的算法后就认为完成任务了。其实,很多的算法设计貌似能够解决问题,但是放到实际的应用背景,才会发现因为忽略了很多其他因素而不能满足实际需要。所以,这个阶段,教师需要引导学生对自己的方案进行质疑,例如:你有没有考虑到其他影响因素 (比如算法的效率如何)?是否存在别的算法可以替代,如果有,这些算法各有什么特点?等等。通过这个过程,学生不仅可以学会综合应用自己学到的知识,而且还能培养算法设计中注重非功能因素 (算法的时间效率、可扩展性、互操作性等等)的工程设计思想。
回到上面的案例,很多学生会采用一维数组作为数据结构设计,线性匹配作为查找算法来满足功能需求。然而,有实际工程经验的人通常不会这样做,他首先会把数组元素从小到大进行排序,然后按照二分法进行查找。因为,这样的算法设计在查询频繁的情况下,比每次都要进行线性匹配查找要快的多。当然,学生很难一下子想到这样的解决方案,但是,通过质疑自己的方案的方式可以驱动学生一步步寻找更优算法方案,并把它变成思维习惯。
2.3 执行和验证环节
有了设计方案,学生就可以选择某种编程工具,对设计方案进行实现并运行,通过组织测试数据验证和和观察结果。大量实际数据的测试往往会发现一些在问题分析和设计阶段没有考虑到的问题,这些问题自然而然地驱动学生质疑自己原来的想法,修改甚至推翻原来的算法设计。还是对于查询图书这个例子,我们在测试时会发现用户经常会增加新书和淘汰旧书,所以没有办法保证数据永远保持有序,一旦有了数据的改动就需要重新排序,所以算法效率就不会太高。这种情况学生就需要寻找更好的解决方案,比如用二叉排序树,B+树来替代数组存储数据元素。
3 结语
算法与数据结构是软件设计的基础,也是实践性和理论性都很强的课程,能够掌握和灵活应用并不容易。本文提出的问题主导,质疑驱动的教学模式目的就是希望能够用带有业务背景的实际问题激发学生的学习兴趣,通过不断质疑自己培养学生逐步寻找问题更优解决方案的思维模式,为以后进行真正的实际软件项目设计和开发打好基础。
[1]刘波.“算法设计与分析”教学探讨[J].高等理科教育,2007,74(4):78-80.
[2]严捍,衷宜,赵学龙.编程语言教学实践中QDeV方法探讨[J].计算机教育,2008(5):56-58.
[3]刘维群.软件工程专业中《算法设计与分析》课程的教学探讨[J].洛阳师范学院学报,2012,31(8):101-103.
[4]陶影,张斌.数据结构实验教学应重视算法设计与分析能力的培养[J].实验室研究与探索,2008,27(12):119-122.