王昱哲,王罗惠
(西安科技大学计算机学院,陕西西安710054)
计算机编程中加工处理的对象是数据,数据具有组织结构;编程不仅仅需要掌握计算机语言,还必须掌握数据组织、存储、运算的方法,才能写出效率更好的程序。而数据组织、存储和运算方法正是《数据结构》研究的主要内容。通过对《数据结构》课程的学习可以使学生了解计算机处理对象的特征,通过算法训练可以提高学生的思维能力[1]。《数据结构》也是学习编译原理、操作系统、数据库系统等其它课程的重要基础,对计算机学科起到承前启后的作用,这些都使得《数据结构》在计算机专业课程学习中具有核心地位。
计算思维是问题解决所采用的一般数学思维方法,周以真教授将其定义为:运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动[2]。计算思维是人类求解问题的一种思维方式。如何在《数据结构》的课堂教学中融入计算思维能力的培养呢?
计算机的主要目的就是进行数据处理,解决人们现实中的的实际问题。数据不是杂乱无章的,同自然界的一切事物一样,存在着内在联系,学习《数据结构》课程的目的是如何合理的组织数据以便能高效的处理数据。因此在课堂上,应避开知识的大量灌输,明确学习的目的、意义以及要解决的问题。将书上的知识与现实中的应用结合起来,举一些实际例子,设置问题,让学生思考。通过多设问题,循序渐进引导学生主动思考问题,使学生从被动的被灌输知识变为积极思考主动获得知识,从而达到训练学生的思维方式的目的。
学生自己主动思考获得的知识,不仅能加深学学习印象、提高自信,更能培养思考习惯。设置问题,引导学生思考,鼓励学生在课堂上把自己的想法讲出来,其他的学生也会克服一些畏难心理,更有兴趣的去听讲自己同班的学生的回答,不仅能对他人想法有一个初步的评价也能激发自己对问题的思考,课堂气氛也往往能更加活跃。
学生思考出来的解决方法,如果不完善或不正确,也不要急于纠正。顺着学生的思路,对学生的方法设置疑问,让学生思考解决面临各种预设的条件下,该算法是否能处理问题、方法是否考虑周详、思路是否有局限,一步步将学生引导到正确方法上来,完善解决问题的算法。
通常问题的解决方法不仅一种,设置问题鼓励学生勤于思考,使学生主动思考获取基础知识。还要鼓励学生进一步思考,还有没有其它的或更好的算法。引导学生从基本的数据组织和处理方法为基础、进一步思考更高效率的算法,对各种算法的特点以及性能进行对比、鼓励学生课下思考并查阅相关资料将学习的知识进一步深化,激发学生课余进一步深入探索书本之外知识的兴趣。
《数据结构》课程应多举实例,以激发学生学习兴趣。举例来说,《数据结构》学到完栈和队列时,可以请学生思考,实际生活中哪些事情符合先进后出或先进先出的特点。而学生的思维也确实非常活跃,往往能举一些身边很熟悉的事情。比如列举到了中午吃饭排队是符合队列的特点,保证先到的先打饭,而如果有人插队,则会破坏了规则。吃完饭把盘子送到回收餐具处,而餐厅服务员要清洗盘子时,首先清洗的是后放的盘子,符合后进先出的栈式思想。再比如,学生交作业和教师改作业,则又符合栈的特点。
在讲完树这一章的知识后,可请学生思考八枚硬币问题,用一个天平如何用最少的次数秤出八枚硬币中哪一枚是假币,并判断出假币比真币重还是轻。这个问题可以留作课下思考,使学生在课余画出称量的方法和过程,而这个过程刚好可用一棵树来描述,恰是树的一个应用举例。
在学习图这一章知识里,可以用著名的七桥问题引入内容学习。学习递归时,列举关于兔子生育问题引入费波拉契数列、汉诺塔、求阶乘等例子,进一步讲解和比较采用递归方法和非递归方法解决问题的特点。列举有趣的例子既可以吸引学生学习注意力、活跃课堂气氛、又可以激起学生的学习兴趣,加深对知识的理解和记忆。
在授课讲解的过程中,不仅要学习知识,更要引导学生去思考,解决这个问题有哪些方法,为什么要这样解决,有什么益处,要学习这种解决问题的思路和方法。不仅要注重知识的传授,更要培养学习知识、解决问题的思维方法。
计算机只是一台机器,不能够主动思考算法,它是按照程序员编写的指令去解决问题。解决任何问题都需要算法,算法是指令的有限序列。算法是由程序员来设定的,利用计算机解决问题时的算法,有它自己的特点和所遵循的方法和规律。教授《数据结构》,不仅使学生掌握一些知识,更要通过不断的学习案例,进行分析和总结,积累经验,训练清晰和缜密的思维方式。
在思考问题的解决方法时,都需要首先确定输入什么数据、如何组织数据、如何处理、以及问题的输出是什么,输出就是问题的最终结果。然后再进一步仔细思考,如何处理这些数据,用什么样的算法进行处理,才能得出结果。
有的学生思路开阔、思维活跃,遇到问题能马上整理出计算模型,而有的学生遇到问题毫无思路,一筹莫展[3]。学习《数据结构》,不仅学习书上解决问题的方法,更要培养算法思维,通过学习,进行大量的训练,掌握算法的分析技术、设计技术,掌握计算机解决问题的规律。
算法的设计有若干通用策略,汇总起来构成了一套非常有用的工具集,若能运用得当,可以解决计算机科学中的众多问题。学习该门课程,重要在于通过算法训练,熟练掌握这些策略并将其应用到实际环境中去。比如常用的方法有:穷举、递归、分治、贪心、动态规划等。在学习《数据结构》的过程中,贯彻计算思维的培养、应用。
比如树这一章中,由于二叉树的定义就是用二叉树来定义二叉树,用到了递归的思想,因此树这一章中的很多算法,都用递归来解决,虽然递归不是唯一的办法,但却是最简单最便于理解和实现的方法。在学习图这一章里,求最小生成树的普里姆算法和克鲁斯卡尔算法都是应用贪心算法设计策略的例子,尽管它们做贪心选择的方式不同,以及图中求单源最短路径问题的迪杰斯特拉算法也是应用了贪心策略。查找中的折半查找算法和排序中的快速排序,都是分治策略的典型应用。
《数据结构》的算法往往不是一种,每一种问题的解决方案总有优缺点,每一种算法总有适用该算法的情景。不是一种算法能适合任何情形。有的算法比较浪费时间,但设计另一种算法若节约了时间,又往往会浪费存储空间,《数据结构》中解决同一问题的各种算法,往往在时间复杂度和空间复杂度上找到一个均衡点[4]。在学习过程中不仅要让学生熟悉算法思想和步骤,还要让学生重视算法的性能分析以及适应的条件,能够根据实际问题的应用情况选用合适的《数据结构》和算法解决问题。
《数据结构》是一门逻辑性和应用型非常强的学科[5]。学生不仅要掌握必备的基础知识,更要将知识用于实践,因此可将知识点与实际的应用对应起来。只有明确了要学习的内容的实际用处,才能更好的激发学生的学习兴趣。而《数据结构》解决的问题,很多都是实际生活中的问题,可以多举学生身边熟悉的实例,比如:排队打饭问题、成绩管理问题,让学生将书本知识与生活中遇到的问题对应起来,鼓励学生自己独立提出问题、分析问题和解决问题。
该门课程的实践环节,不能只是验证算法,而应对该课程中的算法的实际应用场景、问题规模、算法效率等方面也要多加考虑,不仅使学生理解和记忆经典算法理论,更要理解消化、灵活运用它们,通过上机实践使学生的思维创新能力和实践能力得到有效培养和提高。
《数据结构》作为计算机学科的核心课程,该课程的教学,不仅传授知识,更要培养学生计算思维能力和创新能力,提高学生分析问题、解决问题的能力,本文探讨如何组织教学内容、研究教学方法,将计算思维能力的培养融入到课堂教学中,为学生以后从事计算机领域的研究工作奠定坚实的基础。