前言:一篇好文章的诞生,需要你不断地搜集资料、整理思路,本站小编为你收集了丰富的数据结构实验报告主题范文,仅供参考,欢迎阅读并收藏。
《数据结构》是计算机本科专业的一门核心课程,讨论如何在使用数据的时候有效地组织数据。该课程与《程序设计》、《算法设计》等本科课程有着重要的联系,是本科计算机专业的一门核心课程,在国内有不同版本的教材可以选择。本文讨论《数据结构》课程的教学内容安排、教学形式、实验形式、考核形式、教学关键点等方面的相关问题,这些问题同时也在其它课程教学中存在。通过这些问题的讨论,期望为数据结构课程的进一步改革与提高提供思路与借鉴。
1教学思考
在下文中,对数据结构课程的相关内容分项进行阐述和探讨。
1.1教学内容安排
教师授课,应该对该门课的核心思想具有很深刻的认识。具体来说,应该对该门课的背景(在整个计算机学科中的位置与意义)、核心思想、典型技巧(如将典型数据结构模块化、接口标准化等)、核心内容(表、堆栈、队列等结构)具有深刻的认识。然后,再有所取舍地安排教学计划。在不同层次的学校,应根据学生的水平不同而对教学知识点有所取舍。教学计划最忌讳大而全地按照教材或考研大纲进行安排,这样很容易造成10个知识点都有所涉猎,但每个知识点学生都只能理解50%。这样还不如只深刻地教授3个核心的知识点,学生可以从这三个核心的知识点理解整个课程的关键与本质,同时可以由自我学习的途径去掌握其它知识点。现在,许多高校的教学形式是针对同一门课程,多个教师对不同班级进行教学,同时,在期末进行统一的期末考试。这种统一的考核形式有利有弊,其利在于可以比较客观地衡量不同教师的教学效果;但其弊在于各个教师倾向于按教学大纲撒大网式地教学,因为教师们害怕统一考试中有自己未讲到的知识点而遭到学生抱怨。久而久之,教师们就会形成不是按教学内容的核心与重点,而是按教学大纲(而非大刀阔斧地有所取舍)死板地安排教学计划,或者按统一期末考试可能的考点进行安排教学。而这样的危害是非常大的。
1.2教学形式
现状强调多媒体形式教学(比如利用powerpoint),但某些内容不适合PPT。例如,某些算法或代码,其思维的产生可能不是从前往后过程化的,比如可能是先写后面一段,再写前面一段;又比如一些情况下需先写while循环内部的循环代码,再添加上面的循环条件判断语句。让学生了解思维的正常产生过程极其重要。因此,如果教师能不依赖PPT,即使在没有PPT的情况下也能依靠一页提纲和一只粉笔讲完整堂课,那么基本可以判断这个教师对该门课理解地很透彻了。当然,PPT的好处在于描述清晰与完整,节省时间。所以如何利用PPT的长处,同时避免依赖PPT是教师值得思考的问题。
1.3实验形式
现有高校的数据结构实验通常是教师发放给学生实验指导书,然后学生按实验指导书进行编程实验,最后撰写实验报告并上交。教师最终根据学生的实验报告给出实验分数。这种实验形式弊端非常大,其一易导致学生互相抄袭,教师不得不浪费大量精力去鉴别是否抄袭;其二易导致学生把大量宝贵时间花在撰写死板的实验报告上,而忽视了实验本身的意义。笔者针对这些弊端,采取了一些相应对策。一是鼓励学生当场提交(实验指导书已提前发给学生),同时当场提交的学生需接受教师的提问。二是禁止学生在课堂上撰写实验报告。同时,若学生当场提交并回答教师提问的话,学生可以将实验报告极简要地撰写。教师可以通过这个方法很好地了解学生的情况并避免实验考核的形式化。
1.4考核形式
上文提到,许多高校针对同一门课程,安排多个教师对不同班级进行教学,同时,在期末进行统一的期末考试。这种课程考核方式有利有弊。当然,笔者注意到,不由各个老师自由安排各自班级的考试,其目的还可能有防止个别教师因进行应付式的教学而轻率删减教学内容的原因。但是,我们认为,为了防止个别教师的应付式教学,利用本专业的教授委员会进行听课与评判,同时结合学生对教师的评价意见,是一个较好的方法。对于考核的形式,现在很多高校强调考试的标准化(比如要求题型分布多样,要求有选择题、判断题、简答题、编程题等。同时要求各题型分值分布均匀)。笔者认为,这种所谓的考试题型标准化,其弊远远大于利。不同学科有各自不同的特点。比如数据结构,如果是书面考核,很容易由一道算法设计题知道学生的大致水平。如果是上机考核,诸如算法设计并编程的题就更容易测试出学生的真实水平了。从教学实践上,学习考核对于学生学习什么内容、按什么方式学习、对学科知识理解到多少深度有着非常大的影响。比如,侧重于记忆性概念的考核则会引导学生花大量时间去死背概念,而不会注意思考概念背后的本质。所以笔者在教学过程中,加大平时实验在课程考核中的比重,让当场完成并能回答教师问题的学生得到更高成绩。另外,谈一下对教师的考核。从现状看,考核压力对教师的教学积极性影响很小。这是因为:督导和学生评价确实会突出一些教学方式优秀的教师,但并不绝对。因为确实存在因科目差异因素而导致评价与教师素质背离的现象(某些偏理论化和难度较大的科目,评分会普遍偏低;某些“观赏性”较强、较少公式推导的科目则会偏高)。而现有高校的教学考评往往会集中在上课是否缺席迟到、评卷是否分数有误这些易于把握,但和教师深层次的教学素质联系不强的考核标准上。因此,探讨有效的教师考评机制也是一个值得思考的问题。如前文所述,笔者认为让本专业的教授委员会听课并结合学生意见进行评价是一个效果不错的方法。
1.5教学关键点
笔者在数据结构课程的教学过程中,对某些教学关键点有一些体会,在此简单列举。
1)工具背景与设计思路。表、堆栈、队列、树、图等基本数据结构实际上是人们经过实践,抽象总结出来的常用数据模型工具。这些数据结构的出现背景与应用场景、设计思路与设计关键体现了数据结构课程的思维核心。
2)工具接口的标准化。这些工具,抽象成某个数据结构类型的描述后,其接口(或者称ADT描述)应该是标准的。这就意味着接口描述(对应程序中的接口函数申明)不应随内部实现的形式不同而出现差异。这不仅是ADT描述标准化的要求,也是程序模块标准化的需求。但笔者注意到,在某些数据结构教材中,针对同一种数据结构,比如堆栈,顺序实现的堆栈和链式实现的堆栈却有着不同的函数申明。更具体地,用C语言描述,若顺序堆栈的pop接口申明是ErrorCodepop(Stack&S,ElementType&e),而链式堆栈的pop接口申明是ErrorCodepop(Stack*S,ElementType&e),那么这是明显不合适的。
关键词:数据结构;实践;多维;教材
“数据结构”是在20世纪60年代中期才设立的一门课程。它主要讨论在软件开发过程中的分析、设计与实现中的若干基本问题[1]:1)问题的建模。如何把客观世界的问题映射到计算机世界中?如何在计算机世界中表述和存储客观世界中的对象?它是算法处理的对象。2)问题的求解方法,即算法。3)算法的评价。评价算法的优劣。算法是数据结构的主要研究内容。算法是计算机科学的核心,也是一种一般性的智能工具。“学习算法有助于人们对其他学科的理解,不管是化学、控制、甚至音乐,即使非计算机专业的学生,学习算法的理由也是非常充分的[2]。”因此,数据结构是高级程序设计、编译原理、操作系统、数据库、人工智能等课程的基础,它不仅被作为计算机相关专业(如计算机科学与技术、软件工程、网络工程等)的一门核心的专业基础课;也是工科、理科、医科等学科中许多专业的必修或选修专业基础课。
“数据结构”课程具有抽象性和实践性。客观世界中的问题在计算机中的表示与算法描述是抽象的,但算法的实现是实践的,惟有通过实践才能真正掌握课程内容,达到学习目标。通常在有限的课时内,教师主要讲授的是抽象部分,此种情况下如果没有相应的实践,课程的学习将如同在沙漠建房,难以落成。
因此,如何构建能够有效的实践环节,一直是教师关注的问题。
笔者结合“数据结构”课程建设,就多维一体的“数据结构”实践教学系统的构建与实现进行总结,以期为“数据结构”实践教学提供一定的参考和借鉴。
1 “数据结构”实践活动层次
实践是一切认识活动和知识的前提[3],学生的认识主要是在实践活动中发展起来的[4]。笔者根据由浅入深、循序渐进和创新能力获得的规律,将课程实践活动按层次由低到高分为验证型实践、设计型实践、综合型实践和创新型实践。
1.1验证型实践
荀子说:“闻之,不若见之;见之,不若知之;知之,不若行之……行之,明也。”验证型实践指通过运行已实现的算法对书本知识及算法进行对错性的验证。验证理论的实践活动使学生充分领悟知识的内在意蕴,加深学生对基础知识的理解,掌握基本实验技能,为后续较高层次的实践活动奠定基础。验证型实践活动从内容上来讲,它依附于课堂教学,是课堂教学的延伸和补充。
1.2设计型实践
设计型实践指用所学的一个或若干个知识点去解决特定的问题。通过对问题的求解,了解知识的应用场景,获取知识的初步应用能力。智慧来源于知识,但知识不会自然而然地达成智慧,需要通过实践活动对知识“内化”和“活化”,起关键作用的是人的实践经验[5]。这里的知识是局部的,是一个个知识点。大量的设计练习是解决较复杂的问题的基础。
1.3综合型实践
综合型实践是指将所学的数据结构思想与方法,应用到软件开发的分析、设计与实现等方面。综合型实践要用到课程的许多知识点。能力与智慧的获得,绝不是简单的累积,此处,1+1≠2。学习者可能掌握各个知识点及其各自的应用,但不等于具备解决复杂问题的能力,盲人摸象的典故正说明这一点。通过综合实践,引导学生从全局的观点,认识数据结构课程的精髓和本质;指导学生如何综合地将所学的知识应用于软件开发过程中。
1.4创新型实践
创新型实践是指能够激发和培养学生创新能力的实践活动。培养具有创新精神和实践能力的有较高综合素质的人才是当代教育的目标,也是学校教学的出发点和归宿。但“人的发展以人在不同经验方式中发展为前提[5]”,创新型实践旨在通过实践活动培养学生的创新能力,由旧知识建构新知识,达到学习的目标。
2数据结构实践活动的实施
实践活动的参与者有教师和学生两方。学生是实践的主体,旨在运用所学的知识和理论发现问题、分析问题、尝试解决问题,目的是提高解决问题的能力。教师是引导者,为学生提供必要的实践环境和条件,当学生遇到困难时,给予指导;对学生的实践成果给予评定,使他们不断进取。
2.1验证型实践
对验证型实践的处理方式有两种。一种是作为课程实验内容。此法的不妥之处在于:1)在有限的实验课时内,只能完成验证工作的很少一部分;2)如果把验证作为课程实验的主要内容,那高一层次的设计型实验就没有时间了。另一种方式是完全由学生自我解决。持该观点者认为,算法的实现是学生在学过高级程序设计语言后应该能解决的问题,不是本课程应该关注的。其实,算法描述和算法实现之间是有距离的,这如同一台机器的构造和机器生产工艺流程之间的区别一样,能够跨越这个距离的学生很少,即使有的学生具备这个能力,但因时间、精力所限,也不可能实现教材中的所有算法。
一个人接受科学教育的最大收获是那些能够受用一生的智能工具。数据结构正属于这类教育的内容。通过学习算法,学生一方面开扩眼界,培养正确的思维方法,更重要的是数据结构介绍的典型数据模型和实现,是一种可以用于解决复杂问题的工具。如果学习者的学习只是纸上谈兵,就不可能学会工具的使用,就无法用工具去解决问题呢?所以,无论从学习者的认知所需还是从课程的学习目的来看,以适当的方式帮助学生掌握典型的数据模型的实现是必须的。因此,上述两种方法均不可取。我们的做法是由教师实现这些数据模型并把源程序提供给学生,学生利用课余时间自行进行验证实验,具体任务如下。
1) 教师。①给出教材中相应算法实现后的源程序;②给出程序设计说明,方便学生理解程序的结构与功能;③给出思考题,引导学生阅读源程序和理解源程序;④给出操作说明和测试用例,引导学生进行正确性地验证和更全面地理解算法。
2) 学生。①理解相关背景知识;②根据程序设计说明和思考题阅读源程序;③根据操作说明运行源程序的测试用例,并进行结果分析;④回答思考题。
为了督促学生进行验证实践,要求学生将任务③、④的工作记录作为作业上交;教师利用课堂提问,抽检和讨论部分源程序的运行结论。
2.2设计型实践
设计型实践活动分为两个部分,一是课程实验,二是作业。
2.2.1课程实验
鉴于实践对数据结构学习的重要作用,一般会拿出课时的1/5~1/4用于课程实验。针对课程实验,教师与学生的工作分别如下。
1) 教师。①给出问题描述,提出问题解决的基本要求,如采用的知识点、输入输出要求、算法复杂度等;②对问题进行初步分析,必要时给出逻辑设计和存储设计的建议;③酌情给出算法描述;④给出若干测试用例,引导学生进行功能测试,领会健壮的程序设计;⑤给出实验报告撰写要求,包含问题描述、数据结构设计、功能划分和算法设计、界面设计、运行与测试、总结与心得、源程序等。
2) 学生。①分析问题;②定义数据结构;③给出算法描述;④编程实现算法;⑤用测试用例测试程序,记录运行结果;⑥写出符合要求的实验报告。
教师通过检查源程序运行情况和批阅实验报告,了解和评定学生的实验情况。
2.2.2作业
作业题分为两类:基本概念题和算法设计题。部分算法设计题要求学生编程实现,以弥补课堂设计实验的不足。对于这部分实践活动,教师布置题目,通过批改作业,检查学生的完成情况。学生编程实现题目,将设计思路、算法和运行结果形成作业上交。
2.3课程设计
课程设计对应于综合实践活动。对于计算机相关专业的学生来说,在“数据结构”课程学习结束后,通过前期的验证和设计实践,具备一定的综合使用课程知识解决问题的能力和规范的程序设计能力。所以,一般在课程结束后,单独有1~2周的“数据结构”课程设计,教师与学生的工作分别如下。
1) 教师。①制定课程设计实施计划书。给出课程设计的目的和要求、日程安排、考核方法及分组情况等。②给出问题描述。区别于设计题,这里的问题一般较复杂,实现的源码,一般均在500行以上,甚至千余行。③提出设计要求,引导学生进行概要分析。可分为基本要求和较高要求,与不同层次的学生的能力相对应。④设计提示。综合设计的问题解决,通常包含多个算法,对其别难的、学生不易想到的要点给出提示。⑤提出课程设计报告的写作要求。包含需求分析、概要设计、详细设计、调试分析、测试分析、总结与体会、使用说明及源程序等。
2) 学生。①根据实施计划书的进度要求、问题描述和设计要求进行“概要设计详细设计调试测试”的问题求解;②接受系统检查;③撰写符合要求的课程设计报告。
教师通过作品检查和批阅课程设计报告给出学生的课程设计成绩。教师通常在课程设计的最后一天,通过运行系统和提问,检查学生的系统设计与完成情况。
2.4科技活动
学生的创新能力来自科研实践。科研实践要因人而异,针对学有余力的学生,通过下列三种途径提供科研实践活动。
2.4.1项目开发
通过项目锻炼,培养学生进行科学研究的工作方法和相互协作的精神。
1) 辅研。教师积极向学生介绍自己的研究方向和课题,吸纳有特长和兴趣的学生参加自己的项目研究,根据其知识结构,给学生布置力所能及的任务,逐步深入。
2) 项目申报。积极鼓励学生参与各级项目的申报。学生作为申报人并获得资金的资助,能有效增加其完成项目的责任感与投入其中的热情。
2.4.2社会实践
“没有经验”被企业视为大学毕业生的最大弱项。参加社会实践,是学生获取经验的最好途径。学习数据结构的学生基本上是大二和大三的,这样,他们有1~2个暑假,可以进行社会实践。教师向学生宣传社会实践的好处,介绍社会实践场所。学生在寒暑假或平时课余时间,到某个单位短期工作或兼职工作,参与单位具体项目的工发。
2.4.3竞赛
竞赛是学生用理论知识解决实际问题的有效载体,是检验、锻炼、提高和展示学生科技创新能力的很好平台。竞赛所带来的荣誉感,能够有效激励学生的创新热情。常见的竞赛有:校级的“希盟杯”电脑技能设计大赛、网页设计大赛等;市级的“天翼杯”电脑技能大赛、科技创新大赛等;省级的“富士通”杯网页网站设计大赛、大学生软件设计大赛等;国家级的数学建模大赛、“挑战杯”全国大学生科技作品竞赛、软件人才设计大赛等。
教师及时地把各种竞赛信息通报给学生并组织学生申报;组织好竞赛作品的创作与指导工作;对参赛者和获奖者给予一定的奖励,并对参赛作品进行展示和宣传,扩大活动效果,以吸引更多的学生参与竞赛活动。
3 “数据结构”实践平台
为了使数据结构的实践活动能够顺利进行,我们编写了《数据结构实践教程》[6],创建了“数据结构实践教学网站”作为实践教学实施平台。
3.1 《数据结构实践教程》教材建设
本书含盖了1―3层的实践活动的素材和实施指导。全书分为三篇:验证篇、设计篇和综合篇。
1) 验证篇。详述《数据结构》[1]教材中相关算法的实现。本篇首章介绍算法到程序转换的基本步骤及需要注意的问题;给出了进行验证性实验的步骤;同时介绍了实验环境。其余各章按教材教学内容进行编排。每个应用程序的叙述采用一致的结构,由如下四个部分组成:①程序设计。给出数据的类定义和程序结构图。②源程序。方便学习者研习程序设计思路、程序结构、改进程序以及更好地操作程序。③程序运行。给出程序操作方法介绍及程序运行界面。④思考题。引导学习者更深入地理解程序、程序所实现的算法、程序所采用的存储结构以及可改进之处。
2) 设计篇。针对一定的知识点给出不同难易程度的设计题,作为课程实验和课后程序设计素材。本篇介绍了设计型实验的实验步骤、设计内容;提供了实验报告格式,并给出一个实验报告案例。其余各章按教材教学内容进行编排,每个设计题由以下五个部分组成:①问题描述。给出问题背景,提出需要解决的问题。②基本要求。给出算法实现时对数据逻辑结构、存储结构、功能设计、数据输入或输出上的要求。③实现提示。对算法设计给出必要的提示或伪码描述。④测试与运行。给出测试案例。⑤思考题。提出相关问题或更高设计要求。
3) 综合篇。针对一个以上的知识点给出综合设计题,可以作为课程设计素材。全篇首章给出有关综合设计项目涵盖的内容、综合设计报告格式以及综合设计成绩评定准则等。其余各章按设计任务编排,每个项目任务的叙述由以下三个部分组成:①问题描述。给出问题背景,提出需要解决的问题。②设计要求。提出项目设计与实现时功能上需求,分为基本要求和较高要求。③实现提示。对数据组成形式、相关算法设计上给出必要的提示。
该教材充分考虑了学习者进行1―3层次的实践活动的可能需求。验证程序使用菜单界面,结构统一,操作简单;设计篇和综合篇内容丰富,提供了各种难易程度、且有一定实用性或趣味性的题目,可以为学习者提供全程指导。
3.2数据结构实践教学网站
该网站分为用户管理、学生主页和老师主页三个部分,其功能如图1所示。
图1 “数据结构实践教学平台”系统功能
3.2.1学生主页
以学生身份登录系统后进入学生主页,从中查看实践教学内容、联系教师,上传作业、在线交流等。页面中包括课程实验、课程实训、课程设计、作品展示等。
1) 课程实验:提供实验教学大纲、实验指导书及实验上传功能。
2) 作品展示:提供经典算法设计案例、优秀学生作品展示、典型数据结构及其基本操作的算法动画演示等。
3) 课程实训:提供习题、试题、典型题解、最新题库等。
4) 课程设计:提供课程设计指导书、课程设计作品上传等。
3.2.2教师界面
以教师身份登录系统后进入教师主页。教师通过该页面,公告,进行实验、实训(即课外设计)、课程设计、作品、学生、教师等相关信息的管理。
1) 公告管理:实施公告的编辑、及公告的数据库管理等。
2) 课程实验:实验指导相关内容;查看学生上传的课程实验源程序与报告。
3) 课程实训:实训设计问题及对问题库的数据库管理。
4) 课程设计:课设指导相关材料;对学生上传作业进行管理。
数据结构实践教学系统的开发为学生和教师带来了很大的方便,通过网络突破时间和空间的限制,方便教师与学生之间、学生与学生之间的专题交流,为学生提供丰富的素材。
4结语
实践教学是“数据结构”教学中不可缺少的环节,对课程学习成效起着决定性的作用。笔者根据课程特点和创新人才培养目标,提出按验证、设计、综合和创新四个层次的实践活动,对教材和网站的建设进行了积极探索,构建了一个多维一体的数据结构实践教学体系。经过多年的实践,已经取得了明显的成效,考研率逐年提高;学生在各级比赛中获奖越来越多,等级也逐步提高。
参考文献:
[1] 管致锦,徐慧,陈德裕. 数据结构[M]. 北京:清华大学出版社,2010:3.
[2] 王道俊,郭文安. 主体教育论[M]. 北京:人民教育出版社,2005:309-310.
[3] 张英彦. 论实践教学的理论基础[J]. 教育科学,2006,22(4):34-36.
[4] 张英彦. 论高校实践教学目标[J]. 教育研究,2006(5):46-49.
[5] 陈佑清. 论活动与发展之间的相关对应性[J]. 教育研究,2005(2):77-82.
[6] 徐慧. 数据结构实践教程[M]. 北京:清华大学出版社,2010.
Multidimensional Practice Teaching System of Data Structure
XU Hui, GUO Rongxiang, ZHOU Jianmei
(School of Computer Sci. & Tech., Nantong University , Nantong 2260019, China)
Abstract: Practice in teaching of Data Structure is a key to affect learning. In this paper, the practice actives are divided into four level from easy to complication, they are test and verify, design, integration and innovation. The division is corresponded to the aim of the course learning and creative ability of students as a precondition. The implementation method of the practice is discussed from the role of teachers and students respectively and auxiliary textbook and website is introduced. The multidimensional one of Data Structure practice teaching system is constructed based on these ideas and materials.
关键词:数据结构与算法分析;课程体系;研究型大学;创新性教学
为落实教育部“高等学校教学质量与教学改革工程”,湖南大学肩负着为建设创新型国家而培养创新型拔尖人才的重大历史使命[1]。湖南大学计算机与通信学院为进一步贯彻以人为本、因材施教的办学理念,加速培养基础宽厚、学科知识交叉的复合型人才,充分调动学生学习积极性,以精品课程为目标,进行研究型大学创新性课程建设,实施设计与创新型人才培养模式的本科教学质量工程[2]。在学院制定的新本科教学计划中,“数据结构与算法分析”是四门学科通识教育课之一。课程教学团队结合学校和学院的教学质量工程要求,对课程进行了全面的创新建设。
1 “数据结构与算法分析”课程的地位
计算机专业的学生今后无论是从事硬件方向的工作,还是从事软件方向的工作,其程序设计和算法设计与分析的能力都是非常重要的!随着计算机应用领域的扩大和软硬件的发展,计算机加工处理的数据越来越庞大和复杂,而且对其处理的效率也提出了更高的需求[3]。“数据结构与算法分析”就是随着处理对象的复杂性不断增加而发展起来的一门课程,作为计算机专业的核心课程,它在专业人才培养链条中占有举足轻重的地位,它是一门承上启下的枢纽课程,同时也是一门实践性很强的专业技术基础课程[4]。
2研究创新性“数据结构与算法分析”课程的目标
研究型大学既要培养研究型人才,也必须培养高质量的应用型人才,即必须多目标培养人才[5]。同时为贯彻教育部本科教学质量工程提出的显著增强学生的实践能力和创新精神的要求。我们制定研究创新性“数据结构与算法分析”课程的目标是:激发创新意识,培养研究兴趣,训练两种能力,提高实践技能。
研究数据结构的目的是为了学会编写更高效的程序,基于追求更有效率程序的创新理念,引入并加强“权衡”的概念,培养学生研究数据结构相关的代价和效益的兴趣和方法。通过课程教学和实验,训练数据结构的设计和算法分析两种能力。这两种能力有以下三个层次:1)学会常用的数据结构,形成一个程序员的基本数据结构工具箱,在解决实际问题时,能熟练使用数据结构来表示和存储问题中待处理的数据元素。2)熟练地应用各种常用的数据结构。掌握对每一个数据结构和相关基本操作算法所花费的时间和空间代价的分析方法。针对实际问题所要求的资源限制,能确定工具箱中的哪一个数据结构对于该问题是最合适的,即解决方案是最有效率的。3)了解研究数据结构和算法分析的方法,培养研究数据结构的兴趣,为在解决实际问题中,能发明新的数据结构和进行正确的算法分析打下良好的基础。
通过该课程的学习,我们不仅要让学生掌握数据的逻辑结构、存储结构及其相应的算法,更重要的是激发学生的研究创新意识,培养学生研究问题和解决问题的能力,即能够把现实世界中的客观问题变换为在计算机内的表示形式,学会组织数据、选择算法、养成良好的程序设计风格。所以,“数据结构与算法分析”的教学要以培养学生的实践能力为核心,重点提高学生的分析设计能力和编程能力,进而提高学生的系统的认知、设计、开发、应用能力,为研究数据处理的科学问题和创新解决问题的科学方法打下坚实的基础。
3研究创新性“数据结构与算法分析”课程建设
3.1教学计划
在创新与设计型人才培养模式探索过程中,学院基于基础厚实、学以致用、知识技能并重的理念,大胆重设课程体系,实现通识教育基础上的宽口径专业教育的两阶段培养模式,并将实验教学组成相对独立体系,提出了“课程实验――实验课程――工程设计训练――毕业设计”四级实验体系[2]。学院选出“数据结构与算法分析”等四门专业基础课程作为专业学科通识教育平台课程。要求课程相对稳定,安排足够学时,力求讲透讲深,夯实专业学科的理论基础。安排足够的课程实验学时,通过课程实验使学生巩固加深对理论知识的理解;以及通过相应的实验课程,训练和增强学生综合运用知识的能力。图1 给出了本科教学计划的部分运行图。由图可知,“数据结构与算法分析”在课程体系中的安排,凸显了其作为培养学生专业基本能力的地位和作用,强调计算思维能力、算法设计与分析能力和程序设计与实现能力的训练和培养,为全面培养学生的创新与设计能力打下坚实基础。
3.2教学大纲
课程教学大纲根据近年全国硕士研究生入学统一考试计算机科学与技术学科综合考试大纲中的要求,参考全国著名高等院校近几年使用的教材以及期末考试、研究生入学考试试题编制而成。教学内容包括54个知识点,分为:数据结构绪论,算法分析,线性表,栈、队列和数组,树和二叉树,图,查找和内部排序八个部分。每个知识点根据课程目标中三个能力层次要求分为基础知识,重点知识,提高知识,并为其设计相应的教学内容,教学进度,作业题或实验题以及考查评价要求。
如教学大纲中线性表部分。通过这部分的课堂和实验教学,要求学生熟练掌握线性表的基本性质,及其顺序存储结构和链式存储结构的描述方法,以及线性表的各种基本操作的实现,这是该部分的基础知识,注重课程目标中能力层次一的培养。理解线性表的两类存储结构的特点,能够从时间和空间复杂度的角度综合比较两类存储结构和各种基本操作性能的不同特点及其适用场合,这是该部分的重点知识,注重课程目标中能力层次二的培养。了解从实际应用问题的需求分析中发现待处理数据具有线性关系的方法,以及如何设计合适的基本操作,这是该部分的提高知识,注重课程目标中能力层次三的培养。重点考查学生对线性表的基本概念和基本应用的掌握,以及对线性表两种存储结构实现(尤其是链表实现)的特点的理解情况。通过实验和算法设计题考查学生对线性表灵活运用的程度。
3.3教材建设
由于计算机科学是一门快速发展的新兴科学,数据结构与算法分析的理论、概念和方法随着程序设计方法学和程序设计语言的发展不断发展和更新。这些情况给课程的教材建设提出了更高的要求:必须紧跟计算机科学技术发展的步伐[6]。在选材上,我们始终坚持统一要求和因材施教的原则,确保教材内容的组织科学、合理,体系得当。选取的课堂教学教材,内容涵盖了教学大纲中确定的所有知识点,并根据课程的培养目标,以及学生的学习基础和兴趣需求,选用了三本高水平教材――严蔚编的《数据结构(C语言版)》、Clifford A. Shaffer主编的《数据结构与算法分析(C++版)》和Sartaj Sahni主编的《数据结构、算法与应用(C++语言描述)》。经过几年的教学实践,学生普遍反映严老师的书在讲解知识点时,能够把抽象的内容表述得更明确、更具体、更便于学生理解和把握。两位美国教授编写的教材都使用C++语言描述数据结构和算法,使得数据结构与面向对象的思想紧密结合。Shaffer的书还结合算法分析来讨论各种存储方法和算法的利弊,如何设计出有效率的算法,如何根据应用需求选择最佳方案,这种“授人以渔”的思想极大激发学生的思考热情。Sartaj Sahni的书最大特色就是强调应用,通过现实生活中的许多应用实例具体演示了各种数据结构和算法设计方法,使学生能了解学习数据结构后如何应用到实际工作中去,学以致用。
只靠读书是不能学会灵活使用数据结构的。课程的教学目的不仅是让学生掌握各种数据结构,更重要的是培养学生解决实际问题的能力。因此,上机实验是课程教学的重要环节。为了帮助学生进行有效的实验训练,我们积累多年实验教学改革经验,编写了《数据结构与算法分析课程实践》讲义,用于指导学生的课程实验教学。在讲义中不仅精心设计题目,紧扣理论内容,由浅入深,循序渐进地培养学生计算思维能力、算法设计与实现能力,而且给出了实习步骤和实习报告的规范,训练学生软件工程的能力。教学实践表明,学生通过上机训练和完成实验报告,不仅加深了对理论知识的理解,提高了复杂程序设计的技能,而且培养了良好程序设计的习惯和工作作风。
数据结构与算法分析是实践性很强的课程,仅靠上课和上机中学习是绝对不够的。为了给学生在课外自学和练习中提供指导,我们编写了《ACM程序设计培训教程》,并提供在线评测系统供学生随时测试。这样做可以充分调动学生的学习积极性和主动性,并使其钻研更深、更新、更难的问题,提高研究创新能力。
3.4教学组织
多年来,本课程教学团队已积累了一套“课堂―课程实验―实验课程―课外自学辅导”四个环节相互配合,提倡激发兴趣,精讲多练,重点突出,培养专业基本能力和研究创新的教学实施方案。
课堂环节注重计算思维能力的训练。在讲授具体课程内容时,要精讲,把重点要讲透彻,把难点加以分解,让学生能理解。要串讲:把前后相互关联的多个知识点串讲,总结其中的共性,突出各自的特点,分析相互的差别。要活讲,除了讲解基本的知识,更要授人以渔,要把“分析问题中待处理的数据建立抽象数据类型、根据物理存储特点建立物理数据结构、设计有效率的存储结构和基本操作算法、分析各种数据结构和基本操作算法特点和适用性”这样一条学习主线给予详细的介绍,引导学生有效地学习理论知识,进行计算思维能力的训练,使学生掌握创新地学习的能力,以激发学生对问题的探索精神。
实验注重算法、程序设计与分析能力的训练。通过实验报告文档,训练学生的算法设计和分析能力,通过上机实践,训练学生的程序设计和调试能力。实验实践环节由简单到复杂,通过精心挑选的验证型、技能型、创新与设计型三类实验题目,提升学生对理论知识的理解和应用能力,促进学生的创新研究思维。对每次实验的目的、原理、实验步骤、注意事项和实验要求都做出了详细的说明,突出了实验的重点,并编写了详细的实习指导书,包括实习报告范例、难度不同的程序范例,便于学生从模板开始,快速入门与提高。实验报告包括需求分析,概要设计,详细设计,调试分析,测试结果,使用说明和实验心得七个方面。严格实施这些貌似繁琐的规范,对于学生基本程序设计素养的培养和研究问题方法的训练,将能起到显著的促进作用。
课外自学辅导注重因材施教,满足不同的学习需求。学生的兴趣、专长,接受能力、自学能力都有差异,课堂上“均等和有限”的教学不能达到因材施教的目的。在课堂上,教师只能针对程度一般的多数学生的情况进行教学,对于程度差的学生要靠个别的辅导,帮助其积累知识和提高理解能力,跟上一般学生的进度。对于优等生,也要进行个别的指导,指定课外读物,加大信息量,布置思考题,调动其潜能,引导其创新。对于尖子生,我们还有一条措施,让其参加程序设计竞赛,组织和指导他们参加全国性的学科竞赛,促使他们脱颖而出。
3.5教学研究
为实现培养“宽口径、厚基础、强能力、高素质”的研究型人才的教学理念,学院对包括数据结构与算法分析在内的四门学科通识教育课程进行重点建设,组织专业教师认真总结多年来的教学经验,深入开展教学研究,提出一系列合理的教改方案。
1) 优化调整专业培养计划。
2009年初,为配合学校的人才培养模式向研究型转变的本科教育培养计划改革,学院制定了新的旨在培养设计与创新型人才的课程体系和实验体系,把“数据结构与算法分析”课程定位在学科通识教育课程,全院所有专业的学生必修。同时把该课程从第四学期提前到第三学期,并与第一学期开设的程序设计基础,第二学期开设的高等程序设计和软件基础实验1,以及第四学期的软件基础实验2,构成一组课程体系,保证本科生在通识教育培养的两年中,每个学期都开设程序设计方面的课程,为培养设计与创新型人才夯实学科基础。
2) 基于课程责任制的师资队伍建设。
近几年,学院在教学改革中大力实施定岗定编和课程责任制改革。根据教师的科研方向分配教学任务,同时按照课程特色组合多个教学团队,并与教师所属的科研团队互相关联,达到科研与教学相结合促进教学质量提高的目的。
3) 以申报精品课程为契机加速课程信息化建设。
以课程建设促进专业建设,打造精品课程是学院对每门专业核心课程的要求。根据精品课程建设的要求,开发了课程网站,学生可以随时访问网站获取课程资源、在线播放课件、习题指导等;开发实验与实践在线评测系统,学生可随时上网提交软件在线评测,并在学习园地学习交流。开发ACM竞赛培训网站,为喜爱编程的学生提供交流和切磋的平台。
4) 培养设计与创新人才的实践教学体系建设。
学院提出了“课程实验―实验课程―工程设计训练―毕业设计”的新型特色实践教学体系。明确“课程实验”和“实验课程”的内涵与目标,要求所有核心课程必有此环节[2]。“数据结构与算法分析”作为训练学生计算思维、算法设计和分析能力和程序设计与实现能力的重要课程,对课程实验和实验课程的实践教学环节不断改革创新,如教学团队积累多年实践教学经验,编写了《数据结构与算法分析课程实践》讲义,用于指导学生的课程实践教学。申请多个SIT项目,为学生提供研究创新平台。编写了《ACM程序设计培训教程》教材,对喜欢算法和程序设计的学生进行指导,使学生在各类与程序设计相关的学科竞赛中频获佳绩。
4结语
“数据结构与算法分析”是计算机专业的一门核心课程,学习数据结构和算法设计分析不仅为学习后续课程建立基础,也有益于创新与设计型人才的培养。
为了不使教学过程过于抽象和枯燥,我们要充分调动学生主动学习的积极性,提高教学的趣味性;大力提高学生的实践能力和知识应用能力,注重创新研究能力的培养。借着学院新型课程体系和新型特色实践教学体系改革的春风,我们明确了培养创新与设计人才的理念,针对数据结构与算法分析课程能力培养三层目标,在继承原有教学体系中关注课堂教学的基础上,加强实践教学环节和课外辅导提高环节,使这门课程的教学更加系统和全面。实践证明,这种新模式对提升教学质量非常必要,近几年,学生和校督导团的评教成绩在学院名列前茅,该课程已通过省精品课程评审,用新模式培养出来的学生陆续在全国各种大赛上获得较好名次,在2010年ACM亚洲区比赛中我院学生获得两个金奖。
按照学院提出的“创新与设计型人才”培养目标。“数据结构与算法分析”课程教学工作从课堂教学和实践教学两个方面进行建设和完善,精品课程网站和实验与实践在线评测系统已经投入使用,课程教学辅助课件在逐步建设中,符合创新与设计型人才培养目标的教材正在编写中,相信“数据结构与算法分析”这门课的教学质量在教学改革中将不断得到提高。
参考文献:
[1] 钟秉林,董奇,葛岳静,等. 创新型人才培养体系的构建与实践[J]. 中国大学教育,2009(11):22-24.
[2] 赵欢,骆嘉伟,李仁发,等. 计算机专业设计与创新型人才培养模式及课程体系研究[R]. 武汉:第八届全国计算机系主任论坛,2005,10.
[3] Gregory Goth. Turning Data Into Knowledge [J]. Communications on the ACM,2010,53(11):13-15.
[4] 教育部高等学校计算机科学与技术教学指导委员会. 高等学校计算机科学与技术专业人才专业能力构成与培养[M]. 北京:机械工业出版社,2010.
[5] 张思东,张有根,高万英,等. 重点大学既要培养研究型人才也必须培养高质量的应用型人才[R]. 深圳:全国电子高等教育学术研讨会,2003,11.
[6] 张乃孝. 编写“数据结构”教材的几点体会[R]. 南京:第二届大学计算机课程报告论坛,2006,7.
Constructing Innovative Curriculum of Data Structures and Algorithm Analysis
in Research-oriented University
LI Xiaohong, LUO Jiawei, YAN Hua, WU Hao
(School of Computer and Communication, Hunan University, Changsha 410082, China)
【关键词】数据结构;基本知识;课程实验;方法;改革
中图分类号:G423.07 文献标志码:A 文章编号:1673-8500(2014)01-0068-01
一、数据结构内涵
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。目前,对数据结构研究已经成为世界上一些非数值量的信息结构及其处理方法,它被定为计算机科学与技术相关专的重要课程,同时也是应用数学、管理科学等很多专业的一门基础课程。为了更好有成效的使用计算机、让计算机的性能得到充分发挥,数据结构的有关知识的学习和掌握是非常必要的,大量的很难的算法存在于数据结构中,分解与抽象是它的核心技术,要想让学生掌握这门核心技术,就要认真扎实的通过对课程内容的学习与实践,构造性思维训练的特征得到有效的体现,提高学生的操作能力和实际应用水平。
二、数据结构课程设计改革
通过课程设计来让学生进一步掌握数据结构的整体框架和知识层次,课程设计的内容主要是根据三种逻辑结构(线性、树型和图型)把课程分成三部分贯穿下来,对每一部分又采用层次结构,即逻辑结构、存储结构和在该存储结构上的操作及相应的算法。结合讲过的一个和几个典型的算法给学生留一个实际问题,让学生编程序上计算机去处理。如:讲线性问题的插入和删除这部分时,就留一作业题:把学生成绩按学号录入进计算机中,一涉及到实际问题就会用到许多的相关知识,需要查阅大量的书籍和网站。不过,得到的收获也是可观的。
三、数据结构教学手段和教学方法的改革
实现以教师主导下的以学生为主体的教学模式。在具体的教学手法方面,把学生为教学的主体,坚持实行任务驱动的教学手段,诱导学生主动学习,相互协助学习,共同进行探索与研究,这种教学方式学生很容易接受并受到好评,取得成效很显著。研究算法的具体法则是给学生的算法实现的有关程序和算法实现的思路。每一节课上完后,对讨论过的内容作出总结,对本节极容易出错的状况做好归纳,梳理出具体条款。学生对每一种数据结构的特点和实现都能够牢牢地掌握。除此之外,做好与学生沟通协调工作,重视课后辅导。课下辅导除在课堂中以及学生上机进行辅导之外,还有一种办法是和学生取得联系,利用网上交谈的手段,利用这种手段,掌握学生的思想动态、学习状况,迅速回应学生在自主学习及课后学习时遇到的疑难问题。教师在数据结构教学手段上,要精心设计教学内容,对较困难的算法制作以及收集了大量FIASH演示动画方面的材料。把抽象的概念和空间结构加以具体化、形象化,使所教的数据结构内容直观、生动、提高了学生的学习的积极性,同时提高数据结构教学质量和学生的学习效果。
四、数据结构基本知识部分教学的改革
数据结构的基本知识是这门课程的重点,包括数据的逻辑结构,相应逻辑结构的存储结构,以及在此存储结构上的相关操作及算法等,这些内容必须要讲,也很枯燥,教学时可以根据实际情况做一些调整。
教授学生理解数据结构这门课,同时也是提高学生的学习兴趣的实践过程。通过举例分类、总结学生参与进来的办法来帮助学生理解数据的逻辑结构和存储结构等概念。首先从实际情况入手来引出逻辑结构的概念:学生都知道计算机能进行图书管理,能和人对弈,可是学生要明白计算机之所以能干这些事是靠人工编的程序输入到计算机中来支配计算机工作的,程序怎么编,不同的问题有不同的编程思路,那么实际中的问题基本上就是这么三类;线性问题、树型问题和图型问题。接着通过分析上面图书管理问题,下棋问题,以及修路问题来让学生明白什么是线性、树型和图型问题,接着给一定的时间让学生每人想出一个线性、树型和图型关系的例子,在生动活泼的气氛中把实际问题过渡到这门课中来,实际生活活跃了学生的课堂气氛。反过来,学生也把数据结构的理论知识应用到了实际中去,最后总结到实际问题的线性、树型和图型的逻辑关系是人类对实际问题的逻辑思维。在数据结构这门课中把这种逻辑关系叫做逻辑结构。要让计算机处理实际问题必须把从实际问题中抽象出来的数据和它们之间的逻辑结构存储到计算机中,计算机才能够对实际问题进行处理,那么怎么存储呢?逻辑结构在计算机中的存储方式在数据结构中就叫存储结构。逻辑结构和存储结构这两个概念学生就顺其自然地接受下来。
五、数据结构课程实验部分教学的改革
进行实验教学改革,加强实践教学环节。让学生学以致用是教师传授知识的目的,因此明确教学目标,把培养学生的能力放到重要位置,重视数据结构实践性环节。数据结构课程的让学生上机实习,是对学生极有利全面综合训练,它与课堂上听老师的讲解、自主学习和独立训练是相辅相成的,也是教学中不可或缺的一个教学环节。因此为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,制定了实验大纲,实验指导书,实验手册等设计了系统的有效的实验项目,规范实验报告,提高学生编程能力和专业技术水平。
在学生理解了数据结构的逻辑结构和存储结构这两个概念的基础上,接着让学生学习计算机对数据的操作和算法。算法一般都是用C语言来描述的,要想让学生掌握好每个操作的算法,一定要学生自己编出完整的程序,直接上机训练每个算法。在理论课上把每种逻辑机构联系到的操作进行初步归类后,接着讲每种操作的算法。讲算法时主要采用以下方式帮助学生理解和掌握:
【关键词】数据结构 学习方法 理论性 概念性
【中图分类号】G642 【文献标识码】A 【文章编号】1006-9682(2012)10-0086-02
一、引 言
“数据结构”是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课程,而且已成为其他理工专业的热门选修课。[1]通过“数据结构”课程的学习使学生学会分析、研究计算机加工的数据机构特性。以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析技术。另外,本课程的学习过程也是复杂程序设计的训练过程。通过本课程的学习提高学生进行软件设计开发的能力,也为操作系统和数据库等后续课程奠定基础。[1]
二、数据结构课程的特点
从课程性质上讲,“数据结构”是一门综合性的专业基础课,是介于数学、计算机硬件和计算机软件之间的核心课程。因此,在学习本课程的过程中不仅考虑数据本身的数学性质,而且还必须考虑数据的存储结构。为了研究数据结构课程的学习方法,我们可以先分析本课程的特点,该课程具有以下特点:
1.很强的理论性
本课程不是以掌握应用性知识为目的,而是以掌握基本理论、基本方法、基本技能为目的。让学生把握解决什么样的问题,用什么思想,采用什么方法解决,以及用什么方法最优等一系列问题。
2.很强的概念性
本课程要求学生不但深刻理解某些概念的所有要素,同时也要求理解为什么要引入某些概念,这些概念的形成过程,以及引入这些概念解决什么样的问题。在学习各个数据结构(线性表、栈等数据结构)时要考虑为什么要引入这些数据结构,这些数据结构在什么样的场合中使用。例如“栈和队列”这章中在“数制转换”、“括号匹配的检验”和“行编辑程序”等应用中,由于栈的引入极大地简化了程序设计的问题。
3.很强的连贯性
本课程结构紧凑,每部分所述问题层层推进,逐步深入。全课程始终是以数据间的关系即“结构”为主线展开。其中“基本数据结构”部分围饶数据结构三要素即逻辑结构、物理结构、运算特性展开,辅以一定该数据结构基本应用的讲述;而“应用数据结构部分”以基本概念、基本方法、性能分析的顺序展开,使全课程大量庞杂的内容条理分明,轮廓分明。
4.易混淆性
本课程中有一些易混淆的基本概念,也有很多算法、状态等一系列问题都易混淆。比如要解决某类问题,也许有很多方法和途径,每种方法和途径适用于什么场合,各自存在什么优缺点(例如“内部排序”这一章中各种内排方法的比较与应用),都易产生相互混淆。
三、数据结构课程的学习方法
1.循序渐进学习法
由于本课程很强的理论性、概念性和连贯性,所以学习过程中要从概念入手,逐段、逐节、逐章深刻理解和掌握,层层推进,从基础到应用,最后达到完全掌握该课程内容的要求,培养学生分析问题、解决问题的能力。加强上机实践环节非常必要,能增强对数据结构的理解和应用能力。
注重上机实践环节,上机实践是提高学生操作能力的一种直接有效的方法:
从时间角度可以把上机过程分为三个阶段:上机前、上机和上机后。我们从这三个阶段对学生和教师的要求来说明如何做好上机实践这个环节:
上机前,老师要把每次上机题目提前给学生,并让学生了解本次上机所要用到的数据结构的理论知识、C语言相关的知识和开发工具所需要熟悉的内容。学生根据本次实验的要求,做好上机的准备,不要等到上机时还一头雾水。由于C语言的学习已经经过了一段时间,有些学生可能对C语言的所学的东西有些模糊,例如:一些语法的标准使用、类型的使用范围等。所以在上机前需要学生对C语言的知识进行巩固。
上机,在进行实际的上机操作时,教师要时刻在学生周围辅导,一是能及时帮助学生解决问题,二是能监督学生认真做实验。使学生明白上机实践的意义,使学生的上机实践能够规范化,认真编写程序,通过程序的编写和调试,不但能更深刻的理解理论知识(如:通过一元多项式的加减的例子,学生才能真正理解链表的使用,并体会到采用链表这种数据结构能极大的简化程序的设计与实现),还可以培养学生良好的程序设计习惯。
上机后,要求学生写出完整的实验报告,并对自己的上机实习情况进行总结,指出成功之处和不足之处。通过这种实验方式,能有效地提高学生的编程能力、分析问题和解决问题的能力。
2.概括提炼学习法
每学完一节、一章内容,都要从中概括提炼出本部分内容的要点和重点。一则可以达到内容总结、有效复习的目的,二则可以自检学习中存在的问题。
课堂的讲解只是让学生有了一个系统的概念,为了让学生巩固课堂所学到的知识和深入理解基本概念和算法,教师应根据各章节的教学目的和具体内容,精选习题,让学生练习。例如,学过单链表的插入、删除基本操作以后,可通过让学生多做习题,反复练习指针的修改情况,从而深刻掌握链表的操作,为后面的学习打下良好的基础。同时教师要认真批改作业,从学生的作业中发现问题,然后针学生存在的问题进行讲解。所以,习题不但是促使学生掌握所讲授内容的一种手段,也是老师与学生之间的一种互动方式。[2]
3.归纳对比学习法
针对课程中容易混淆的概念以及课程中同类、非同类容易混淆的问题,进行归纳和比较,从中找出它们的异同点、优缺点。这种方法不仅能搞清楚容易混淆的问题,而且能更深刻理解本课程的内容实质。
4.循环学习法
由于课程中许多基本概念和复杂算法在顺序地学习过程中并不能达到准确、透彻地理解的程度,有些概念和方法可以应用于多种场合,对这些内容,在学习时就需要循环往复,借助后续内容的信息来全面把握。
四、结束语
数据结构是一门专业技术基础课,本文分析了数据结构课程的特点,并针对这些特点提出了几种学习方法。这些方法已在教学实践中得到了初步验证,但数据结构的教学方法还需进一步研究。
参考文献
关键词:数据结构;实践教学体系;教学改革;教学模式
“十一五”期间,教育部计算机科学与技术教学指导委员会发表了《高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)》。提出了“专业方向分类”发展的基本思想和三个辅助提议[1],其中建议之一是“加强学生实践和动手能力的培养”。程序设计能力是计算机科学技术相关专业最为重要的专业技能,它是评价本专业本科生培养质量的首要指标。计算机科学技术专业中开设了高级语言程序设计、数据结构等程序设计类专业基础课程,这些课程的教学质量直接决定了学生程序设计能力的高低。数据结构是最为重要的程序设计基础课程,是设计和实现各种应用软件的学科基础,课程教学效果对学生专业素养的形成具有重要的影响作用。
我校数据结构课程是江西省首批精品课程,为进一步提高课程教学质量,增强计算机专业学生程序设计综合能力,课程组在江西省高等学校教学研究立项课题“数据结构综合性课程设计探索与实践”和江西师大实验教改重点课题“数据结构新型实践教学体系的开发、设计与探索”的资助下,对数据结构实践教学体系进行了优化设计与教学实践。实践表明,该体系对提高学生程序设计综合能力起到了重要的作用。
1数据结构实践教学改革的必要性
数据结构教学中长期存在一部分老师重理论轻实践的现象,而且由于该课程内容比较抽象,有时教师即使花了很多的时间准备,也常出现学生看似明白算法思想,可是却无法真正实现算法的情况。主观上,学生对这门课程的认识仅停留在此门课是研究生入学考试的必考课程,知道这门课程是非常重要的,起初并不能体会到这门课程在专业学习中的作用,对它在软件设计与开发中的作用更是缺乏感性认识,学生学习的兴趣有待于提高。
数据结构作为实践性很强的计算机专业基础课,教学中必然离不开实践。大部分高校采用验证性实验作为课程实践的主要内容,即布置针对课堂教学内容的小型练习题,让学生去完成程序设计与实现。由于学生可以采用教材中现成的方法实现这类实验,因此其计算思维并没得到有效的锻炼[2]。另外,这类小型的实验一般都是由学生独立完成,团队协作精神在实践过程中也没有得到有效的锻炼。为了在课程实践环节加强团队协作,尽早地让学生接受软件工程训练,必须对传统的实践环节进行改革。
2数据结构实践教学体系
2.1数据结构实践体系的设计
我校数据结构实践环节的教学改革最早从2000年开始,当时制定的该课程的教学目标是:“通过实践巩固理论知识,培养学生的程序设计能力”。具体做法是在教学计划中增加实践考核内容,经过3年实践,虽然学生程序调试能力有了普遍的提高,但学生的综合性程序设计能力有待进一步提高。2003年本课程获批江西省首批精品课程后,课程组对课程理论与实践教学进行了一系列的教学改革,到2006年,课程组开展的“基于网络协作模式的教学改革与实践”项目获江西省教学成果二等奖,精品课程建设初显成效。但如何进一步提高课程建设质量,提高学生综合性程序设计能力成为课程组面临的又一新课题。为此,课程组全面改革数据结构实践教学体系,在数据结构课程中引入了综合实验及综合性课程设计,修改后的课程实验体系如图1所示。
其中“基础实验”与课堂讲授同步,目的是加深对某个知识点的理解;综合实验是对多个知识点进行综合训练,加深对课程内容的整体认识,要求学生提交实验报告;课程设计是在课程结束后进行,要求学生以项目组的形式合作完成大型程序,以培养学生的综合程序设计能力及团队合作精神。教师提供了一些基本选题如表1所示,学生也可以自拟综合设计题目。课程组确定的综合性课程设计训练目标是:通过大型程序的编程训练,进一步培养学生程序设计综合能力、增强团队协作意识。课程设计安排在本课程的后期进行,此时学生已具备一定的程序设计基础,具有完成项目的能力。
2008年教育部高等学校计算机科学与技术教学指导委员会编制出版了《高等学校计算机科学与技术专业公共核心知识体系与课程》和《高等学校计算机科学技术专业实践体系与规范》两个指导性纲要,我们开展的教学改革思路与其指导思想完全吻合。
2.2数据结构实践教学体系的实施
具体实施方法如下:
1) 基础实验与课堂教学同步进行,学生在实验课中完成该部分内容。
2) 综合实验与每一章的教学同步,一般要求学生完成“线性表顺序存储及其应用”,“线性表链式存储及其应用”,“栈与队列”,“树与应用”、“图”、“排序与检索”等综合性实验[3-4]。
3) 对于综合性课程设计,由于涉及一些课外知识,所以需要向学生介绍一些基于软件工程的大型程序开发方法,通过解析若干个大型程序范例,引导学生学习和掌握大型程序的设计思想和开发方法;对大型程序的训练题目给出问题的描述以及基本要求和高级要求,使学生可以根据实际情况进行不同层次要求的训练。项目实施时要注意设计题目的趣味性,鼓励学生在功能点上创新,并要求学生提交课程设计报告(如图2所示)。
4) 以项目式教学模式指导实践环节中的综合性课程设计[5-6],教师在数据结构课程中以项目教学模式流程为主线来设计教师和学生所从事的各类活动。为帮助学生选定题目,教师除了在日常的课程教学中引导学生选题外,还开展专题讲座,目的是引发学生对某一个或若干专题感兴趣,期间也可以给学生感兴趣的专题讲授一些概括性的知识。例如,教师结合数据结构介绍“互联网搜索引擎原理”等热点问题,极大地激发了学生的学习兴趣。
5) 采用软件工程思想指导项目教学模式。在项目教学模式中,教师按照软件工程的思想,要求学生进行需求分析、确定时间计划,确定行动方案、确定最终作品的形式、确定小组内的任务分工,教师负责审定项目计划,并进行必要的修改。项目实施过程中,上一届留下的资源可以给下一届学生借鉴,上一届学生中选拔的优秀学生可以作为我们开展项目教学的“学生助教”,让他们参与项目的审定,一方面节省了任课教师大量的时间,另一方面也提高了“学生助教”的实际工作能力。项目组在确定题目后,在“助教”和老师的共同参与下制定项目实施计划,开展项目研究,定期提交项目阶段性的研究成果或文档报告。
6) 改革成绩评价机制,充分调动学生的学习主动性。为了让学生有激情参与到实验教学中来,课程组改革了传统的教学成绩评定机制,期末理论成绩考试只占总成绩的50%,另外50%成绩来源于学生的项目实践成绩,图3是学生集中上机考试现场。学院建有机器人开放实验室、ACM程序设计竞赛组等学生创新实验平台。实验室成员从数据结构与算法方面具有较强动手能力的学生中选拔,ACM程序设计竞赛队的成员也基本上来自其中的优秀学生。在课程项目中表现突出的学生有更多的机会参与到学院各类横向或纵向课题的研究梯队。以上激励措施,极大的调动了学生的学习主观能动性。
3实践教学改革成效
在数据结构实践体系中,综合性课程设计通过问题建模培养学生将所学知识和实际问题联系起来的能力与意识;数据结构设计体现数据的组织结构对问题求解的差异;算法设计与实现根据具体问题的要求设计出合理的算法;测试帮助发现设计中所存在的问题,体现设计的性能。经过综合性课程设计的训练的学生,在后续软件开发课程的学习中表现出明显的优势。课程组经过3年的教学改革,主要取得了以下教学改革成效:
1) 出版《数据结构C语言版(第二版)》教材一部[3],出版《数据结构实验》教材一部[4];
2) 培养了学生的自主学习能力,培养了学生团队合作的精神,训练了学生的组织管理能力,一些学生的科研能力得到了早期的培养,参与过项目设计的学生在学校科研立项中获得好成绩,学生撰写的研究论文多篇发表在核心期刊上。
3) 煅炼了学生大型程序设计的开发能力,学生成绩显著提升,图4是学生连续三年考试的试卷分析情况,从中可以看出实践教学改革对学生成绩提升具有积极的作用;
4) 为学院ACM程序设计竞赛队和机器人实验室提供了后备力量。本校ACM队是江西高校唯一一支三年内迅速成长起来,每年都有资格和能力参赛,并与国内众多名校同台竞技的队伍。图5是我院学生在第33届ACM国际大学程序设计竞赛亚洲区现场赛比赛情况。
此外,课程组将本课程实践教学改革方法在“高级语言程序设计”等课程中推广,2009年课程组主持申报的“程序设计教学改革与创新”项目获批江西师大第十一批教学成果二等奖。
4结语
通过改革实验教学体系,学院学生程序设计能力得到了大幅度提高,学生多次在ACM程序设计竞赛与广茂达杯机器人大赛上获得好成绩。当然,由于学生个体差异性较大,较好地完成大型课程设计的同学所占比例还不高,课程设计指导教师的力量还比较薄弱,不能满足学生的辅导需求。实践教学改革的最大的受益者是学生,实践表明,较好完成实践环节训练的学生其程序设计能力、后续自主学习能力都得到了很大的提高。图6是学生自发地通过网络给教师留言,表达了学习体会。今后,课程组将进一步总结实践教学改革方法,努力提高学生软件开发综合能力,为计算机专业人才培养作出更大的贡献。
参考文献:
[1] 教育部高等学校计算机科学与技术教学指导委员会. 高等学校计算机科学与技术专业实践教学体系与规范[M]. 清华大学出版社,2008:7-9.
[2] 陈越,何钦铭,冯雁.数据结构综合性课程设计教学探索与实践[J]. 计算机教育,2008(4):54-55.
[3] 李云清,杨庆红,揭安全.数据结构(C语言版)[M]. 北京:人民邮电出版社,2009(6):130-160.
[4] 刘芳,揭安全. 数据结构实验[M]. 重庆:西南师范大学出版社,2010(1):1-40.
[5] 揭安全,李云清,杨庆红,等. 项目教学模式指导的“数据结构与算法”教学改革[J]. 计算机教育,2008(11):21-23
[6] Jie Anquan,Gan Dengwen,Yang Qinghong,et al. Research and Practice of the PBL Model for Data Structure Curriculum[C]// Proceedings of 2009 4th International Conference on computer Science & Education. 厦门:厦门大学出版社, 2009:1512-1515.
Design and Implement of Practical Teaching System for Data Structure
JIE An-quan, LI Yun-qing, YANG Qing-hong, HUA Zhi-zhang, WANG Lan
(College of Computer Information & Engineering, Jiangxi Normal University, Nanchang 330022, China)
关键词:数据结构;实践;教学方法
中图分类号:G642文献标识码:B
1引言
社会经济成分、组织形式、就业方式、利益关系、分配方式的多样化,对人才素质提出了更高的要求,社会也需求大批应用型技术和技能人才。高等学校教育也为适应社会需求培养面向基层、面向生产、面向服务和管理第一线需要的技术应用型人才。
我校致力于技术本科教育理念,深化教学改革是一条提高教学质量的有效途径,在教学改革中扬弃传统的“以教为中心”的教学结构,逐步建立“学教并重”和“学致以用”的教学结构。考虑到目前我校教育的现状,我们在“数据结构”实践教学中做了有益的探讨,让学生知道学习完成后能够实际应用,激发学生的学习主动性,培养富有技术应用性的人才,对我校技术应用性本科教育都具有深远的意义。
2 “数据结构”教学的现状
“数据结构”课程主要研究非数值性、结构性数据,具体涉及数据的逻辑结构、存储结构、算法和算法复杂性分析等内容。它不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统等系统程序和大型应用程序的重要基础。学习“数据结构”课程的目的是为了了解计算机处理对象的特性,将实际问题中所涉及的处理对象在计算机中表示出来并对它们进行处理。同时,通过算法训练来提高学生的思维能力,通过程序设计的技能训练来促进学生的综合应用能力和专业素质的提高。
目前大多数高校越来越重视在实际教学中,在“数据结构”教学中进行许多新的教学模式进行教学,根据目前所拥有的资料来看,国内外有影响的现代教学模式主要有:讲授模式、互动模式、任务驱动模式、范例模式等。这些教学模式体现教师为中心、学生为主体的教学关系,通过教师提问、学生发问、课堂讨论等多种教学方法让学
生参与互动,充分调动学生学习的积极性和主动性,对于提高教学质量和教学效果都能起到一定的积极作用。由于种种原因,学生掌握的情况并不十分理想。这其中一个非常重要的原因,是实践环节的不足。学生在学完理论后,不能及时通过实践来检验和巩固所学知识,导致越学越糊涂,也越加深了对这门课程的畏难心理。
下面是目前“数据结构”教学中存在一些不足的原因:
(1) 概念多
“数据结构”课程内容的特点是概念多、逻辑性强、综合性强、技巧性强。在教学过程中发现,对于学生来说,刚接触这门课程时,不知怎么去学,等这门课程结束时,也不知道自己学了些什么,对学过的也不知道如何应用。
(2) 基础差
目前数据结构算法是通过计算机语言来实现,很多学生在对这门课程前导课程序设计语言掌握不好,目前大部分数据结构教材算法是用C语言(也有C++语言和JAVA语言)来实现,大部分学生对C语言指针知识掌握不牢,用起来生疏,很多使学生对算法的思路是清晰的,但也难以用C语言(C++语言和JAVA语言)将算法描述出来。
(3) 实践效果不显著
人们已经普遍认识到计算机程序设计课程是实践性、技术性非常强的课程,需要大力加强实践性教学环节,因此实践课课时的比例也越来越大。当前实践课内容、形式虽然能在一定程度上提高了学生的动手实践能力,但并不一定能提升学生解决实际问题的能力。其一,实验内容大多是课堂教学内容的验证性实验,学生往往是照着葫芦画个瓢,知其然不知其所以然,实验的时候对所学习内容没有充分理解,只是充当的打字员,结果出来后就万事大吉。其二,各个实验内容各不相关,互相脱节,不能形成一个问题的全部,在以后遇到同类问题,不能从全局的角度分析解决,只能部分的解决局部问题,不利于能力的提高。其三,对所学知识内容,由于程序设计语言掌握不好数据结构概念不是很清晰,不能完整的串起来,如二叉树操作,从建一个二叉树,到遍历二叉树、求叶结点数、求总结点数、求树的深度完整的串起来,对知识点掌握和理解要有直观的认识。
3实践教学改进
在“数据结构”课程的学习过程中,学生比较困扰的是理论脱离实践,对“数据结构”潜在的应用价值难以有深刻的认识。在课程建设中,在努力提高课堂教学效果和抓好习作的同时,下大力气对上机实验的要求和管理进行重点建设。在第一次上实验课程时,除了给问题和要求外,还给出问题分析、总体结构设计、部分详细设计,最后要求学生进行主要算法程序设计及调试。这样做的目的是让所有的学生对“数据结构”实验有初步了解,在给出的整体框架上将主要算法及应用实现出来,达到学习“数据结构”的效果。同时,还考虑到学生的学习程度不同,有些学生底子较薄,对实验认识也不够,认为“数据结构”只是理论上的学习,根本无法编写程序和实际应用。根据这种情况,我们给出部分详细设计就是要使这部分学生增强用程序实现算法的自信心,继而模仿编程,最终实现将理论知识应用到解决实际问题中去,提高应用与创新能力。对每个实验都有具体要求,并鼓励学生课下多编程、上机调试,每次试验结束后要求学生完成实验报告及调试分析,算法的时空分析以及经验体会,为将来进行软件开发打下坚实的基础。
以下是我们在“数据结构”课程教学中的几点做法:
(1) 引发学生兴趣,明确实验内容
学生普遍认为“数据结构”实验难于上手,而且不知道它的应用。这就需让学生了解数据结构的重要性,告诉学生,在计算机科学中,数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。从而引发学生学习的主动性。
在课堂授课中,还要向学生介绍各章节内容的意义、算法的思想以及实验的内容。笔者在授课时,将各章实验内容分成以下几个部分:顺序表、单链表、双向循环链表、顺序栈、链队列、循环队列、串、压缩矩阵、树与二叉树、图、查找与排序。在开始阶段,教师最好给出一些简单程序的源代码,以供学生参考,激发学生上机的积极性。笔者在授课的开始阶段就前几章节的算法实现,都亲自编写源程序,供学生参考,并上机讲解,帮助学生调试成功,增强学生自信,从而激发了学生的上机兴趣。
(2) 强化程序设计语言的程序开发能力
“工欲善其事,必先利其器。”在“数据结构”的实验教学中,上机实现程序,必须先对所使用的程序设计语言工具有所精通。教师可根据学生对C语言(或其他语言)掌握的情况,有目的地讲授一些数据结构所涉及的C程序语言的疑难点,如动态存储函数使用、静态数组、指针等知识,帮助学生尽快上机编程,从而也更好地配合数据结构的实验教学,达到事半功倍的效果。否则,学生不能参与实践,对课程就渐渐失去兴趣。
首先教师给出程序案例的框架结构,学生经过思考,选择合适的算法和指令语句,经互相讨论,完善和丰富程序案例,然后上机调试,通过运行来检验结果。程序案例的教学法是从兴趣入手,首先给人们编程的乐趣,继而带领学生进入程序的天地,提高了探索的欲望,使学习编程变得生动而有趣。
(3) 精选实验内容,编程实现典型算法
“数据结构”教学中的上机是理论联系实际的重要教学环节,针对具体的教学内容和目前的学生能力,专门设计出“数据结构上机实验系统”,在选择典型算法的时候,从以下三个方面进行考虑:
代表性:算法应该能够集中体现某个数据结构的基本特征。
难度适中:算法既不是很简单,也不应该很难,要使多数学生经过努力可以实现。
综合性:算法要有一定理论深度。既有助学习数据结构,又有助于提高编程能力。
该系统为学生精选的、难度适当的大约50个典型算法为基础,包括顺序表、链表、堆栈、队列、串、矩阵和广义表、二叉树、图、查找和排序等部分,系统对每种数据结构都设计了相应的基本操作及应用操作,组装一个数据结构实验演示系统,完成一个数据结构课程的实训。
该系统具体内容是:
实验1线性表子系统:主要算法有建表、插入、删除、显示。
实验2栈队子系统:主要算法有建栈、进栈、出栈、显示、数制转换、逆波兰式。
实验3队列子系统:主要算法有建队列、进队、出队、读队头、显示双向队。
实验4串子系统:主要算法有建串、连接两串、取出子串、删除子串、插入子串、模式匹配、比较大小、显示。
实验5稀疏矩阵和广义表子系统:主要算法有稀疏矩阵建立、转置、显示、广义表建立、查找和显示。
实验6树子系统:主要算法有建二叉树、凹入显示、先序遍历、中序遍历、后序遍历、层次遍历、叶结点数、总结点数、树的深度。
实验7图子系统:主要算法图的建立、建立邻接矩阵、深度优先遍历、广度优先遍历。
实验8子系统:主要算法有建立查找表、顺序查找、二分查找、二叉排序树、建排序树、查找结点、插入结点、删除结点、输出。
实验9排序子系统:主要算法有数据输入、插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序、堆排序。
实践表明,多数学生经过努力,大部分同学都可完成以上的算法。通过这九个实验,就等于学习一个小型系统开发的全过程,所以它既不同于一个大型的完整的数据结构演示软件,也不是一般意义上的复杂的系统开发指导。
4结束语
在本课程教学设置上,我们既要考虑到本科教育的基础性和阶段性,也要充分考虑到技术应用型人才适应第一线工作的要求,体现了既要有一定的学术性,又要有一定的实践性。在教学方式上除要加强正常教学外,重视实践教学环节和通过项目活动过程突出应用专业技术能力的培养,使技术本科学生不但知其然,而且能知其所以然。培养基础扎实、动手操作能力强、综合素质高的应用型人才,已成为高等教育工作的重心。
实践表明,只有将理论教学和实践教学密切结合,才能使学生掌握好各种数据结构和算法,从而切实提高教学质量,贯彻完成大纲要求。
参考文献:
[1] 曾立庆,童怀水.《数据结构》实验教学探讨[J]. 职业教育研究,2006(11):160-161.
[2] 陈元春,王淮亭. 基于Internet的数据结构教学设计[J]. 上海电机学院学报,2005,8(2):67-70.
[3] 郭业才.“数据结构”课程建设与教学改革实践[J]. 高等理科教育,2006(6):100-102.
论文关键词:数据结构 双语 教学 师资 方法
论文摘要:我校(包头师范学院)目前还未实施双语教学,文章提出在我校开展数据结构课程双语教学在师资、学生水平等方面存在的问题,进而给出了在培养师资、教学实施等方面解决问题的思路和办法。
关于双语教学的重要性,国家教育部早在2001年《关于加强高等学校本科教学提高教学质量的若干意见》中就提到本科教育要创造条件使用英语等外语进行公共课和专业课教学,使外语教学课程达到所开课程的5%~10%。2007年《关于进一步深化本科教学改革全面提高教学质量的若干意见》中再次提及要“鼓励开展双语教学工作,提高大学生的专业英语水平和能力”。
数据结构是计算机相关专业的核心课程,主要讨论各种数据的逻辑结构、存储结构及相关运算。做为一门活跃的学科,我国与发达国家相比有较大差距,新内容、新成果往往会在英文原版教材中率先得到反映,以该课程做为切入点开展双语教学,对提高学生的专业素质和英语应用能力更有裨益。
1 目前存在的主要问题
1.1 双语师资方面
承担双语教学课程的教师需要具备深厚的专业功底还要有较好的英语口语表达和交流能力,能熟练应用两种语言进行教学。从全国来看,完全符合双语教学标准的老师不多。就我校的情况来看,目前,在我校担任“数据结构”课程教学的老师还是中文教学,英语整体水平不高。同其它一类学校相比,无论从双语教学的师资水平、师资培养和师资引进方面,我校还有较大的差距。
1.2 学生方面
近年来,由于高校扩招和录取率的提高导致学生素质整体下滑,学生的外语水平参差不齐,我校做为西部的二类院校,情况更是如此。此外,习惯母语授课、长期以来我国外语教育体制下培养出来的学生听说能力差等问题都是实施双语教学前需要思考的。
1.3 相关配套
双语教学的实施是一个周密细致的工程。根据我校计算机相关专业人才培养方案和数据结构课程教学要求及双语教学的特定要求,在充分调查了解师资和学生的情况下,要制定符合教学要求的数据结构课程的双语教学大纲、双语教学计划,选定适合的双语教材、制作或选用适合的英文课件等。英文习题、英文实践题目、英文试卷等相关教学资源都未做好充分的准备。
此外,在教学方式、考试方式、实验指导、教学评价等方面都要根据教学大纲制定详尽的规范和要求。
2 解决的问题的思路
2.1 双语师资的培养
双语教学成败的关键在师资,双语教学的师资来源主要有以下几种途径:① 如华南理工大学国家示范性软件学院等一类大学,聘请国外专家或归国华人等国内外优秀人才担任双语教师,这些具有较高学术造诣和国外背景,又体现工业化背景师资队伍对双语教学的成功起了决定性的作用。就我校目前的发展水平来看,这个途径行不通;② 校内选拔,自己培养。选拔专业水平高、责任心强、教学效果好、英语口语表达能力强的教师但任双语课程的主讲教师,定期在校内及在相关院校交流学习,定期输送教师到国外进行双语教学的培训。做好这一点,经过一个时期,我校会培养出自己的合格的双语教师。
2.2 学生方面
双语教学的过程中必须要重视学生的个体差异,针对学生英语水平参差不齐的情况,可采取以下措施:① 注意培养学生的学习兴趣,兴趣是最好的老师。如果学生对一门课程建立了浓厚的学习兴趣,就会具有主动学习的精神和学好这门课程的动力。教师的个人魅力和专业素养是影响学生学习兴趣的重要因素之一,这就要求教师不仅专业素养高,而且愿意为双语教学作出更多努力,深刻领会概念实质,深入浅出地讲解教学内容,关注学生的学习基础和对课程学习的反馈,使学生能感受到学习的乐趣。此外,数据结构课程内容众多,许多成果源于世界著名计算机科学大师的创新。教师在教学中注意引导,让学生感受到经典的分析问题和解决问题的逻辑思维,引导学生在理解的基础上积极创新,也会提升学生对课程的学习兴趣。② 采用分级教学。数据结构课程本身比较难学,再加入双语教学,对于一些学生一定吃不消,可考虑分级教学。根据考核学生的英语水平、根据教学要求等分汉授和双语授课两个班。
2.3 教材方面
双语教学的学校、师资、学生的整体水平决定了在双语教材的选择上会有很大的差异。一类大学多数采用的是英文原版教材,如华南理工大学计算机科学与工程学院采用Clifford A. Shaffer:A Practical Induction to Data Structures and Algorithm Analysis, Publishing House of Electronics Industry;东南大学的计算机科学与工程系采用Computer Science Express 版的国际著名原版英文教材Fundamentals of Data Structure in C++。根据我校的实际情况,适合的教材策略应该是选用中英文双语经典教材配合使用,如国家教育部推荐的信息类专业双语教学国外经典原版教材Robert L. Kruse Data Structures and Program Design in C++,这样的对照教材,便于学生理解,特别是在双语教学启动阶段。 转贴于 2.4 其它几个关键点
2.4.1 客观科学制定课程大纲
要在充分调研数据结构课程教学要求的基础上, 根据我校计算机相关专业人才培养方案及本课程在整个专业课程体系中的作用,并考虑双语教学的特定要求, 制定数据结构课程双语教学大纲, 大纲应强调学生对基本概念与方法的理解, 注重培养学生的独立思考解决问题的能力。
2.4.2 加强多媒体教学
面对数据结构课程中大量的经典、难理解的算法,加之双语教学,必定会增加学生学习理解的难度。可以试想这样一种教学情境:在讲授新算法之前,先播放相关动画及相关媒体资源,使学生对此算法先有感性认识,然后教师提出问题,使学生带着问题听课,这样的亲近的教学手段,有利于减少对陌生算法的排斥,加深加快对算法的理解。目前,要做的工作一是对自做的好的中文多媒体课件做翻译,二是下载最新的国内外优秀的多媒体课件。
2.4.3 双语并用
双语教学并非只能用英语教学,在讲授课程内容时,考虑到我校学生的外语水平,对于课程中涉及到的重要概念、术语,做到使用英语讲授,使学生在学习过程中逐步具备计算机专业术语的语言优势。对于较难的算法可穿插使用汉语,注意使用简单句和专业词汇,避免使用过多的定语和复杂的从句,教师可充分利用非语言行为,直观、形象地提示和帮助学生理解教学内容,降低学生在英语理解上的难度。同时还要随时根据学生掌握的程度,调整英文和中文的授课比例。
2.4.4 注重实践环节
数据结构是一门实践性很强的课程,实践环节必不可少。双语环境下的实践还要做到:用英语描述实践的作业、全英文的实验软件环境、学生分组协作完成、英语提交实验报告,如此,一是锻炼学生的动手实践、团队协作能力,二是锻炼学生的英语表述能力。考虑到学生不同的层次水平,在实验题目上也可分难易层次,使全部学生都可在实践中得到适合的锻炼。
3 结论
双语教学是专业教学发展的趋势,无论对教师还是学生都需要一个逐步适应的过程。就我校的目前的情况来看,开展数据结构课程的双语教学,要充分认识以上需要着手解决的问题,待各方面条件成熟,可以考虑开设数据结构的双语教学。
参考文献
[1] 杨捷,霍党泽.“数据结构”课程双语教学的研究与实现[J]. 北京大学学报(哲学社会科学版), 2007(5).
[2] 蔡英. 数据结构双语教学的探索性实践[J]. 实验室研究与探索, 2007(12).
[3] 金远平,王茜,徐冬梅. “数据结构”课程双语教学的研究与实践[J]. 电气电子教学学报2005(8).
关键词:案例教学;数据结构;教学法
0.引言
当前高校教学改革的主要目标之一,是改变传统的以教师为中心的教学模式,构建一种既能发挥教师的指导作用,又能充分体现学生学习主体作用和个性化学习的新型教学模式。为实现这个目标,教师应积极利用计算机进行教学活动,并在此基础上逐步实现教学模式、教学内容和教学方法的改革。同时,多媒体和网络技术为构建新型的教学模式及实现网络教学中“以问题为中心”的教学模式提供了基础。另外,以问题为中心的案例教学是目前比较流行的一种教学方法,即学生利用所学的知识和技能解决一系列实际问题,从而达到建构经验的目的。案例教学强调把学习设置到有意义的问题情境中,通过学习者的相互协作来解决真正的问题,从而有效地学习隐含在问题背后的科学知识,增强解决问题的技能和自主学习的能力。
1.数据结构与算法课程知识体系
数据结构与算法是程序设计、操作系统、数据库原理与设计等课程的重要基础,在计算机科学与技术专业课程体系中占据非常重要的地位,是一门理论与实践并重的课程。该课程内容丰富、概念多、高度抽象、综合性和实践性强,这些因素给教学带来了较大难度,教学效果是否良好将直接影响学生数据抽象能力和程序设计能力的培养。以问题为中心的教学法,综合了自主学习、发现学习、协作学习、综合学习等多种学习方式的优势,对激发学生学习兴趣、学习自主性和创造性,培养学生的协作精神与自学能力均有较好的效果。为了帮助学生在掌握课程知识的同时获得探究式学习和团队协作能力,提高教学效果,我们在此课程中开展了以问题为中心的案例教学研究。
该课程的教学体系以数据元素之间的逻辑关系为主线,以线性表、树、图等为分支,以不同逻辑关系的逻辑结构特点、存储结构以及操作算法和算法实现作为基本知识点,每种逻辑结构都有其实际应用,知识体系结构层次清晰,示例丰富,适合开展以问题为中心的案例教学。因此,我们从中选取了“栈”“队列”“二叉树”及“图”的应用等内容作为教学单元开展教学研究。
2.以问题为中心的案例教学实施过程
我们在教学过程中选取适合以问题为中心的案例教学单元进行方案设计,针对数据结构与算法课程创设教学环境,借助网络教学平台实施案例教学,最后进行教学效果的评测与总结。在具体的工作过程中,我们按照探究未知知识领域的途径,通过提出问题、分析问题、创造性地解决问题、知识迁移等步骤对该教学方式予以实施,如图1所示。该课题已于2011年9月至2011年12月、2012年9月至2012年12月分别开展了2个学期、4个班的教学实践。
下面以“哈夫曼算法的应用”为例阐述以问题为中心的案例教学过程。
(1)明确学习目标与要求。本单元的教学要求为掌握树的带权外部路径长度的计算,掌握哈夫曼算法的主要思想及哈夫曼树的构造,掌握哈夫曼编码。
(2)创设情境,提出问题。问题情境指学生在问题教学中所面临的一种“有目的但不知如何达到”的心理困境。问题情境就是一种心理状态,即学生接触到的学习内容与原有认知水平不和谐、不平衡时,学生急需解决疑难问题的心理状态。例如,教师提出在电文发送系统中,如何设计电文编码,使发送的码长最短?发送邮件附件的时候,经常进行文件压缩,如何实现文件压缩?
(3)分析问题。学生明确要探究的问题之后,在网络教学平台上学习“哈夫曼算法”相关知识,如二叉树、树的带权外部路径长度、哈夫曼算法思想、哈夫曼编码等,拟订出问题的解决方案。
(4)解决问题。学生通过自主学习,明确哈夫曼树是带权路径长度最短的二叉树,并作哈夫曼编码,得到的码长最短。因此,在电文发送系统中,利用哈夫曼算法设计电文编码,使发送的码长最短。同理,也可以使用哈夫曼算法对文件进行压缩。
(5)知识的迁移。哈夫曼编码在数据编码中的应用是哈夫曼算法应用于各项技术中的典型实例。此外,由于哈夫曼树具有带权路径长度最小的特性,它还能应用于其他具体的事物决策中。
①图像压缩问题。大数据量的图像信息会给存储器的存储容量、通信干线信道的带宽、计算机的处理速度带来极大的压力。单纯靠增加存储器容量、提高信道带宽和计算机的处理速度等方法来解决这个问题是不现实的。此时需要考虑压缩,压缩的关键在于编码。对于数据进行编码时出现频率较高的数据,编码器输出较短的码字,而对于出现频率较低的数据,则用较长的码字表示,从而实现压缩。通过对哈夫曼树的原理及应用的研究,我们可以在遇到某些具体应用问题时获得启示和解决思路。
②二叉查找树。例如,成绩表有10000个分数,学生成绩在5个等级的分布如表1所示,要求设计查找树。
根据分数比例(当做权值)设计出哈夫曼树,如图2所示,即为二叉查找树,靠近根的结点表示大比例分数段。通过计算,在查找成绩时时间性能上有很大的提高,类似的问题可以通过二叉树对此进行更深入的研究。
(6)教学实验。教学实验是对学生综合素质进行训练的一种基本方法,是课堂教学的一种延伸,是必不可少的一个教学环节。编程中的问题往往比平时的习题复杂得多,也更接近实际。编程能使学生所学的知识“活”起来,达到深化理解和灵活掌握教学内容的目的。同时,编程也是对学生软件设计综合能力的训练。本单元教学任务完成后,学生以小组为单位进行综合实验。
①实验目的:了解哈夫曼树的应用,掌握哈夫曼树的构造方法及哈夫曼编码的应用。
②实验步骤:
a)输入一串字符,模拟电文发送系统中的发送字符,统计其中所有的不同字符及其个数,得出每个不同字符在文中出现的频率。
b)根据每个字符频率建立哈夫曼树,输出字符的编码,模拟电文系统中的编码系统。
c)输入一个0.1字串,得出其译码,模拟电文系统中的译码系统。
③实验要求:按组完成实验,填写实验报告,汇报程序运行过程、结果等。
(7)对本次案例教学结果进行检验。教师完成一个阶段的教学任务后,应重点检查学生对知识点的掌握情况。另外,教师还应该定期检查每个小组的团队学习情况并打分,对协作效率较高的小组给予肯定和表扬。
教师在收集、整理分析教学结果的基础上,要对本单元专题的教学试验进行反思,肯定成功的经验并推广;对存在的问题认真分析原因,并提出改进措施和解决办法;依据反思结果,及时调整和修改后续学习单元的教学方案和教学策略,以期在下次教学试验中取得更好的教学效果。
3.教学效果测评
在课题的实践中,我们对案例教学效果的评价包含两个方面:对学生而言,主要从知识点的掌握程度、理解程度和是否能独立地应用数据结构与算法解决实际问题,以及能否动手实现具体的应用等指标来进行评价;对教师而言,主要从教学效果方面进行评价,综合评价各个因素。因此,提高对案例教学重要性的认识,客观准确地评估案例教学的效果,培养学生综合能力,促进案例教学质量的提高,具有十分重要的意义。
在数据结构与算法课程中开展以问题为中心的案例教学方式深受学生欢迎,也获得教师们的好评。
1)学生成绩评价。
(1)总结性评价——期末考试情况。图3是2008-2010级计算机科学与技术专业学生数据结构与算法期末考试成绩的比较图。
从图3可以看出,采用以问题为中心案例教学法的2010级学生总体考试成绩比2008级和2009级要好,及格率及平均分普遍都高。
(2)形成性评价——实验作业及分组汇报情况。图4是2008-2011级计算机科学与技术专业学生数据结构与算法课程实验作业及汇报情况比较图。
从图4可以看出,采用以问题为中心的案例教学的2010和2011级学生平时学习表现总体比2008和2009级要好,优秀率及良好率占的比例都较高。
2)教师表现评价。
经过课题研究组成员的多次探讨,教师们编写了许多有代表性的教学案例,并在课堂上加以实施。学生在网上评教时给相关任课教师的评价达到优秀等级,课题研究组教师授课表现也得到上级领导及教学专家的好评。例如,2010年,案例教学“二叉树”获得学院讲课比赛第一名;2011年,以问题为中心的案例教学“图的应用”获得学院讲课比赛第二名;2012年,课题组一位老师以问题为中心的案例教学“Kinect的应用”在学校讲课比赛中获得全校第二名。