首页 优秀范文 数据结构与算法

数据结构与算法赏析八篇

时间:2023-03-07 15:05:58

数据结构与算法

数据结构与算法第1篇

关键词:数据结构与算法;教学改革;应用型人才培养

中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2017)23-0128-02

一、引言

1.地方高等院校应用型人才培养改革。地方高等院校的教学目标正逐步转型为以培养应用型人才为目标,课程教学方法及设置要求学生在学习过程中能学到与社会接轨的知识,从而能提高学生的学习兴趣,且在系统学习后,即毕业后进入社会能较快上手,从而培养出适应社会需求的应用型人才。

2.《数据结构与算法》课程地位。《数据结构与算法》是信息与计算科学专业的核心基础课程。数据结构的研究范围主要涉及数据的逻辑结构、存储结构和操作的实现,内容是程序设计(特别是非数值计算的程序设计)的基础,也是设计和实现编译程序、操作系统、数据系统及其他系统程序和大型应用程序的重要基础,是一门理论性强且实践性强的课程。通过这门课程的学习,学生在程序编写的过程中能够正确、合理地选择数据的存储结构,有效地设计算法,从而提高软件整体质量和效率。

3.本文研究方向。本文着重研究如何针对信息与计算科学专业的特点,地方院校培养应用型人才的教育模式,学生基础相对薄弱的情况,设计合理的教学方法,达到应用型人才培养的目的。

二、传统教学中存在的问题

笔者多年从事数据结构与算法课程的教学,经与学生进行沟通后,总结出传统教学中存在的问题有如下几点:

1.理论性强,知识点多。数据结构与算法课程的知识点多,理论性和实践性均较强,且有高度抽象的特点。故要求学生对程序设计语言和相应的数学知识掌握要足够深入,才能较好地学习。信息计算科学专业的学生数学基础较薄弱,学生反映,理论过于抽象且内容较多,越学后面越不懂,内容枯燥不易理解。

2.上机动手能力差。数据结构与算法课程中一个重要部分是上机编写程序实现算法,学生由于上一门程序设计课程还未理解,难将算法实现,体会不到编程的乐趣、算法的优美,在学习中易失去信心。

在上机实践观察中学生常出现两种情形:一种是理论尚未理解透彻,后续上机实践根本毫无头绪,不能灵活应用推广;一种是理论可以明白,但程序设计的能力跟不上,无法独立完现算法编写实现和调试,甚至无从入手去完成伪代码的书写。这两类学生占绝大多数,只有少部分学生可以较顺利地掌握教学内容并实现完整算法。

3.学生对数据结构的认识不够。外面有些培训机构的速成模式对学生的影响大,它们往往针对某一具体工具软件的使用,工具软件已经将许多知识进行了集成封装,使用者只需调用即可,不用关心具体实现步骤、方法和效率。而这些步骤、方法、算法效率的讨论都是数据结构中要学习的内容。学生认识不到数据结构的重要性,于是觉得这门课程没有应用的前途和学习的动力,不肯多花时间在上面去练习和实践,从而限制了自己后续能力的提高,比如改进算法的效率,优化程序等。

三、改革方法探讨

1.以理论教学为主,案例式教学为辅。针对应用型人才培养的目的和学生普遍反映的课本内容过于抽象的问题,可以选择一本以案例式教学为主的教材作为教学辅助教材。在讲授某个知识点前,布置学生在辅助教材中阅读,了解相关的应用背景。在预习过程中学生往往能发现一些问题,于是在课堂学习中将更有目的性和积极性去学习理论知识,有能力者甚至可以在课外尝试实现案例、发现问题。通过案例学习可以提高学生的学习兴趣,符合应用型人才改革的目标。学生也通过案例学习了解现实中出现的问题有哪些解决方法。当理论具体化后,在工作或后续学习中遇上实际问题将更有解决的方法和思路,而且再进行类比推广应用就比较容易。

但教学中又不能简单的以案例式教学为主。因为案例式教学的一个缺点是案例中涉及到的应用理论未必完全,而是某种模型结构的某些方面的具体应用。如树的教学,一般的课本对树的应用讲了六七方面,采用案例教学法,可能只面对几种应用。故教师在课堂上要将案例抽象出对应的结构,与理论结合在一起,详细讲解理论,即课堂上仍是以理论教学为主。

2.理论教学中知识点的筛选和难易处理。考虑到学院的学生基础问题,学生相应的数学知识掌握不够深入,若面面俱到地将所有理论全部讲完,将知其然而不知其所以然,也不符合应用型人才培养的目标,故课程内容要进行一定的筛选,后续课程中将出现的问题,不妨留到后续课程后再详细讨论。

比如,图的关键路径问题,对于基础掌握好的学生经过课堂学习确实可以掌握,但大部分学生或是不理解,或是理解后不能上机实现,而这一问题在离散数学课程中图论一章后有详细论述,那在数据结构中有限的课时中就不妨先简讲,多花时间在图的存储、遍历算法、最小生成树等算法上,效果会更好。

另外,教师在理论讲解中注意难易的处理。学生要是产生了畏难情绪,就容易造成前面的知识未消化,后面的知识更无从理解的学习障碍。据过往经验,数据结构线性表一章是比较简单的,其难点在于链表,接着的队和栈一章与线性表是一致的,仅操作方法不同。若学生在线性表上卡住了,再学栈和队列会觉得更难。于是教师授课时对一些基础又简单的问题,讲深入、讲透彻,配合传统的黑板结合粉笔效果更好,学生能有效跟着教师进行思考,注意归纳总结,虽然花时间多,但再学习后续知识时会触类旁通,学习自信心能提高,有利于形成良性的促进作用。

3.上机实践的难易处理和互动改革。上机实践主要是将伪代码的算法用具体程序语言实现、运行。应用型人才培养的目的就是要培养学生将理论知识用于实践,即能实现运行具体算法。故培养学生的动手能力是学好这门课程的关键。

在整个学期的实践处理上,实践难度安排由易至难。在前面的章实践作业中,给出的可运行代码应该较完整,留下关键部分让学生去编写,尤其是学会调试。随着章节的推进,给出的可运行代码逐步减少至不给。这样处理是可以让学生在初学时不至于无从入手,而且可以让程序设计基础不牢的学生有时间通过实践强化巩固,让学生获得编程乐趣。

另外,上机实践时可将学生分成若干小组,每个小组选出一个学习较好的学生为组长,上机中组长可以帮助组员进行程序的调试和讲解,使学生能够阅读程序理解程序所表达的意义。学生对知识点理解的角度和教师的角度可能不同,有时候同学请教比教师更能让他们接受,从现实课堂中反映,学生确实更愿意向同学请教。

组员们在讨论中产生解决不了的问题,再与教师讨论得到解答,这样的互动改革既可以有效解决教师逐一回答时间有限的问题,又可以提高学生的学习热情,学生之间不断相互学习共同提高,真正让大家都能动起手来,锻炼编程能力和举一反三的自学能力,为将来到社会工作打下扎实的基础。

教师在指导中要引导学生学会读懂程序错误提示,自己调试修改程序,提高学生实践水平。加强对学生举一反三能力的培训,让实践教学反哺理论教学,使学生对理论有更深层次的理解。培养学生良好的程序编写习惯和风格,注重程序注解。

4.开展课外讲座。在课外,邀请已学过这门课程的学生和正在学习的学生进行经验交流。尤其是一些已经参加工作的学生,他们可以带来更多的实际案例,这些案例比教材中提供的更新颖、更具体,涉及到更全面知识的融会贯通,而且他们可以提供工作中有关《数据结构与算法》这门课程的经验,可以让学生们了解与社会接轨的知识,提高学生的学习兴趣。

四、总结

近年毕业生就业问题日趋严重,通过上述讨论发现,传统数据结构与算法课程的教学形式已不能满足现阶段实际要求,地方高等院校如何进行应用型人才培养改革,培养出适应社会需求的应用型人才成为研究重点。本文以地方院校信息与计算科学专业的《数据结构与算法》课程为例,探讨一系列的教学改革措施,以达到应用型人才培养的目标。

参考文献:

[1]余腊生.石献.基于创新理念的数据结构教学方法探讨[J].计算机与信息技术,2006,(11):110-114.

[2]李克清.《数据结构》课程中的案例教学初探[J].长江大学学报(自科版),2004,12(1)4:135-136.

[3]严蔚敏.吴敏民.数据结构(C语言版)[M].北京:清华大学出版社,1997.

A Study on "Data Structure and Algorithm" Curriculum Reformation

LI Ting,XU Hong-ru

(School of Mathematics,Jiaying University,Meizhou,Guangdong 514015,China)

数据结构与算法第2篇

近年来,我们在多门计算机课程的教学实践中,摸索出一套“把实验实践环节与理论教学相融合,抓实验实践教学促进学科理论知识学习”的教学方法,有效地提高了学生的学习兴趣,以此来提高大众化高等教育背景下计算机专业课程的教学效果和教学质量。这个教学方法可以简单地概括为“先做后说”。这里的“先做”,就是教师依据相关课程的知识体系和教学要求精心设计前导实验,学生在实验设计的指导下,通过实验方法来了解和实践课程知识;这里的“后说”,就是在学生具备了一定的感性认识的基础上,在课堂教学环节中答疑解惑,系统地提高学科知识的理论水平。本文中,我们结合“数据结构与算法”(以下简称“数据结构”) 课程来探讨新的教育形势下计算机课程教学方法的改革。

1“数据结构”的教学现状

任何实际问题只有建立了数学模型才可以被计算机计算,而数据结构就是实际问题中元素的数学抽象,算法则是建立和解决数学模型的方法。

“数据结构”这个术语在整个计算机科学与技术领域得到广泛使用,它被用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成,呈什么样的结构等。数据结构是数据存在的形式,也是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。

“数据结构”是计算机以及相关专业的一门核心课程,具有承上启下的地位和作用,“程序设计语言”(例如C或C++) 和“离散数学”是它的先导课程,“操作系统”、“数据库原理”、“软件工程”等则是它的后续课程。“数据结构”课程既有相当的理论抽象性,又有鲜明的应用特色,是专业基础课程中的一门有一定教与学难度的课程。

“数据结构”课程一向都有上机实验的要求,但主体通常还是课堂教学,无论是实验设计还是实验强度都远远不够,带有强烈的“验证性”色彩。但是鉴于以下原因:(1) 由于低年级程序设计语言教与学所存在的问题,学生普遍不能顺利地运用程序设计语言工具;(2)对于应用型院校以及许多专业的学生来说,学习数据结构与算法的主要目的应该是在理解的基础之上更好地从事计算机软件的设计与运用。因此,“数据结构”课程的教师必须决定其课程是集中于问题和理论,还是为学生提供一个能够对其进行充分实验的环境,让学生在实践的环节中增加感性认识,产生对相关理论知识的需求。

2教学内容的分层次设计

从1999年开始,经过几年的大规模扩张,人们对大面积扩招后形成的新的高等教育态势进行了重新认识,并把普通高等学校一般地分为研究型大学、教学科研型大学、教学型本科院校、高等专科院校和高等职业院校等几种办学类型。随着高等教育大众化、普及化时期的到来,初步形成了各类大学相对稳定的分层次办学的格局。

根据教育部计算机科学与技术专业教学指导分委员会的“中国计算机本科专业发展战略研究报告”,我们至少可以认为:所在院校的办学类型不同、培养目标不同、所在地及其周边地区社会需求的不同,这些计算机专业的教学内容应该有所不同。作为一门重要的计算机的专业基础课程,针对不同院校不同的教学目的,“数据结构”应该有不同的,分层次的教学设计。

我们认为:对于大多数计算机专业以及IT相关专业的学生,尤其是非研究性院校的学生,应该把数据结构的学习定位在理解、熟悉和能够灵活运用的基础上,而把那些“考研”所需要的更深层次理论性内容放在选修或者考研复习阶段来解决。从长远看,应该对各层次院校的计算机专业所开设的“数据结构”课程的教学内容进行研究,对其教学方法进行积极的探索。

数据结构与算法的应用面广,涉及技术领域宽泛,也被人们赋予了很高的期望值,对于计算机及其相关专业的一般学生和读者来说,肯定是需要掌握的重要专业基础知识之一。另一方面,虽然全部计算机应用技术都有实践性的要求,但数据结构与算法对于应用基础理论来指导开发实践却有着特别的需求,单凭课堂教学和一般作业,要真正领会数据结构与算法课程所介绍的概念、原理、方法和技巧等,是很困难的。因此,要让学生真正理解数据结构与算法的基本知识,具备将数据结构知识应用于社会实践的能力,积极加强数据结构课程的实验环节是至关重要的。

3教学改革、实验创新与成果

根据以上思考,我们在教学内容的安排、实验项目的选择、实验步骤的设计和实验文档的组织等诸方面都做了精心的考虑和安排,尝试为“数据结构与算法”课程编写了主要用于实验也可用于课堂教学的教材《数据结构与算法实验教程》。该教材依据课程教学大纲,充分理解课程的大多数主教材,遵循课程教学的规律和节奏,体现了实验的可操作性,帮助学生切实把握本课程的知识内涵和理论与实践的水平。

《数据结构与算法实验教程》采用C语言作为描述语言,通过一系列与课程单元知识密切相关的实验练习,把数据结构的概念、理论知识与技术融入到实际应用中,从而加深对本课程的认识和理解,逐步熟悉和掌握结构化程序设计方法,提高编程能力和综合分析能力,并为今后学习面向对象程序设计作一些铺垫。实验练习覆盖了“数据结构”课程教学的各个方面,内容涉及数据结构和算法分析基础、线性表、栈和队列、串、树和二叉树、图,以及查找与内部排序等,全书共16个实验练习、1个实验总结和1个附录实验,如表一所示。

实验1:数据结构和算法分析基础。包括数据结构和算法的计算环境、抽象数据类型的表示和实现、算法和算法分析等实验。通过实验来理解抽象数据类型的特点、定义方法和在C语言环境下实现的方法;掌握算法的主要特征和描述方法;尝试通过具体的算法结构,计算算法的时间复杂度和空间复杂度,并对算法进行定性或定量评价。

实验2:线性表。包括线性表的顺序表示和实现、线性表的链式表示和实现等实验。通过实验,掌握顺序表和链表的存储结构定义;实现基本操作算法的描述和分析;进一步理解实现复杂操作的C语言程序的结构,从而更深入理解结构化程序设计的方法;与此同时,加深理解C语言中函数和结构体的结构、语法和使用方法。

实验3:栈和队列。包括栈、队列和递归算法等实验。通过实验,掌握顺序栈和链式栈、顺序队列和链式队列的存储结构定义;掌握栈和队列基本操作的过程及实现的方法;理解递归算法的思路、使用条件以及设计方法,并且了解由递归算法到非递归算法的转换过程中栈的作用;通过实例,进一步加深对栈和队列特点的理解,并区别这两种结构在解决实际问题时的区别,从而更合理地选择适当的数据结构解决实际运用。

实验4:串。包括串的3种常见的存储结构定义、在具体的定义下串的基本操作和实现。通过这个实验,加深理解串这种常见的数据结构的特点和存储结构定义方法;掌握串的基本操作算法的描述,并根据算法的结构评价算法;理解串操作的实现方法,理解一个合理的存储结构定义对具体操作实现的重要性,并注重提高算法的健壮性,从而能更好理会一个好算法所需要的各种综合因素。

实验5:树和二叉树。包括二叉树及其基本操作、哈夫曼树和哈夫曼编码等实验。通过实验,掌握二叉树的不同存储结构定义,并理会在具体的应用中采用合理的存储结构的思路;理解二叉树的先序、中序及后序三种遍历的递归与非递归算法实现过程,加深理解递归算法的设计思路,体会栈在递归算法中的作用,以及在非递归算法中栈和队列的作用;理解哈夫曼树的特点和存储结构的定义思路、哈夫曼树建立的算法和实现,并在此基础上体验哈夫曼编码的特点和设计过程,弄清实现哈夫曼编码程序的结构,从而加深对C语言中字符串和指针的理解和灵活运用。

实验6:图。包括图的表示和实现、图的应用、贪心算法等实验。通过实验,掌握图的各种存储结构的定义方法,从而更进一步理解如何根据实际问题设计合理的数据结构;掌握图的两种遍历方法,即图的深度优先搜索和广度优先搜索,并根据这两种操作的实现过程确定算法中所需要采用的辅助数据结构;能根据实际问题选择图的类型,并采用合理的存储结构,理解解决最小生成树、拓扑排序、关键路径和最短路径等实际应用的算法描述,并能根据算法写出相应的程序代码。根据贪心算法的核心思想理解贪心算法的特点,并学会设计简单的贪心算法。

实验7:查找与内部排序。包括查找、内部排序等实验。通过实验,掌握查找表的特点,并能根据具体的查找方法定义合理的查找表的存储结构;掌握各种查找表的实现思路,能根据查找思路写出算法的描述,并对算法进行评价;掌握哈希查找的特点和影响哈希查找的因素,从而构造合理的哈希函数、采用适当的解决冲突的方法,加深理解C语言中指向函数的指针的具体应用。通过实验,熟悉各种排序方法的特点,并能根据具体的实现方法定义合理的待排序数据的存储结构;掌握各种排序方法的实现思路,能根据排序思路写出算法的描述,并对相应算法进行时间复杂度和空间复杂度计算;体会各种排序算法在最好情况下和最坏情况下的算法评价,并能根据待排序数据的实际分布,制订相应的排序方法。

实验8:数据结构与算法实验总结。全部实验完成后,要求学生回顾所有实验内容,进行一次系统的概括、评价和总结,以巩固通过实验所了解和掌握的数据结构与算法相关知识和技术。

附录:算法描述绘图工具Visio实验。学会在Visio环境下制作算法的程序流程图和N-S图等。

各个实验练习的难易程度不同,实验练习之间的难度不断增加,循序渐进,学生在实验中遇到困难,还可以搜索更早的实验来帮助解决问题。每个实验完成后,要求学生根据个人感受完成实验总结;师生通过“实验总结”和“教师评价”部分,交流对学科知识、实验内容的理解与体会。

4认识与提高

数据结构与算法第3篇

关键词:数据结构;课程设计;创新能力;团队精神

中图分类号:G642 文献标识码:A 文章编号:1009-3044(2016)32-0139-02

算法与数据结构课程设计是在理论课程之后的综合性实践教学环节,是理论教学的补充与延伸,是一门非常重要的开放性实验课程。该实践教学是软件设计的综合训练,包括如何分析实际问题、如何进行总体结构设计、如何进行用户界面设计等。要求学生在课程设计中逐步提高程序设计能力、调试能力,逐步培养算法分析能力、创新能力和团队协作精神,并初步培养科学的软件工作方法和撰写规范的软件文档的能力。

1 课程设计中存在的问题

课程设计的教学是整个数据结构教学环节别重要的一个环节,其重要性已得到了普遍的认可,但实际教学效果往往不太理想,主要存在以下几个方面的问题。

1.1 编程基础差、软件开发思想欠缺

C/C++语言程序设计是数据结构的先导课程。尽管之前学生已学过这些课程,但由于语言本身规则复杂,面向对象的思想更是不容易掌握,再加上学生没经过系统的软件开发训练,导致学生普遍存在编程基础差、调试能力弱、代码编写可读性差、拿到问题不事先做需求做规划就急于写代码等,这些都制约着学生完成任务的质量。

1.2 时间安排不合理

一般数据结构课程设计的时间安排在学期末的1-2周内,但是由于这个时候各门功课的复习及考试工作已经展开,学生为了备考,往往应付了事,能力差的学生为了考试不挂科,往往选择最基础的题目;能力强的为了考试考出好成绩,也会选择难度系数较低的题目,都是只求顺利过关,用在课程设计上的时间和精力非常有限,能够真正将心思花在课程设计上的学生更是少之又少,这样就根本谈不上创新能力和团队协作能力的培养。

1.3 选题缺乏统一标准

现有的课程设计教材很难适应所有的院校,而且选题难度区别不大,并未形成应有的层次。其中一些选题还能直接从网上或从资料上获得解答,导致学生中抄袭现象明显,课程设计并不能达到我们事先预期的教学效果。

1.4 教师的指导或多或少

整个课程设计中,教师的指导不可缺少但又不能面面俱到。而在现行的课程设计教学中,有的教师,什么都讲得清清楚楚却制约了学生的创新能力;有的教师公布选题后,由学生根据选题自己独立完成设计工作,对自己对学生完成设计的过程关注指导太少,这样学生遇到问题后不能及时解决,就会去拷贝一个,从而失去了做课程设计的意义。

1.5 课程设计报告缺乏统一规范

规范文档的撰写能力是课程设计需要培养的又一大能力。有些教师一开始不给学生规范的设计文本,学生交上来的报告五花八门,根本不像软件设计文档。

1.6 考核机制不完善

一直以来,课程设计报告被很多教师作为评定课程成绩的重要依据,而对学生完成课程设计的课程关注不多,这样就不能考察出学生的真正实践操作能力,从某种程度上讲,可以说是轻重倒置了,课程设计的教学效果自然不理想。

2 实施方案和问题对策

为了实现教学目标,我校制定了规范的课程设计流程,如下。(1)任课教师先布置课程选题,提出实现要求和完成任务流程,然后选取有针对性的问题,跟学生进行示范性、启迪性地剖析与讲解,要求学生必须按流程一步一步进行;(2)学生根据老师提供的选题,填好选题表并提交;(3)学生根据选题,写出需求分析――完成概要设计――详细设计――码与测试;(4)分组答辩,采用组长主要负责制;(5)提交课程设计报告。实践表明,这样的教学方法有助于培养学生的独立思考能力、讲述交流能力,规范文档的撰写能力,提高学生的积极性、创造性与团队协作精神,教学效果不错。

2.1 调整课程设计时间

我院将课程设计时间推到期末考试之后的假期进行,这样学生就能够一门心思将精力扑在课程设计上,分组去选择难度较大的选题,使自我挑战成为一种可能,也才能够更好地培养团队合作精神。

2.2 分层次精心设计选题

为了防止学生互相抄袭程序,课程设计的选题按照老师提供题目,学生自由选择或者随机抽取的方式来进行。

在课程设计题目的拟定上,为了能够更好地激发学习较好、动手能力较强学生的学习兴趣,同时兼顾学习较差,动手能力较弱的学生,使各层次的学生都能得到提高和锻炼,将课题按照难易程度分成了三种级别(一星级,二星级,三星级)。其中,三星级难度相对较大的题目,可由课程学习成绩较好的学生选择。

2.3 培养学生团队合作精神

学生自主组建课程设计小组,然后共同协商选择合适的选题。由小组组长负责(建议优秀的学生主动担任组长,带动组内基础和动手能力较弱的学生),小组成员自行对模块进行划分和任务安排,要求每个成员都有自己需要独立完成的模块,填好选题表。在任务实施的各个重要环节,要求每个组员都要积极参加讨论,出谋划策,相互帮助,形成一个良好的团队氛围,最后齐心协力完成设计任务。当然小组之间也可以相互帮助,共同攻克难题,这样一个任务完成后,学生的团队合作精神在不知不觉中就培养起来了。

2.4 培养学生交流表达能力

在课程设计的最后阶段,我们要求学生分小组集中答辩。答辩的主要目的是训练学生的表达能力。各小组先由小组长指派一位同学对整个项目进行综合性讲解,包括项目研究意义、整体设计思想、主要功能模块以及各成员的分工,展示设计成果,回答老师提问;再由小组成员针对自己完成的模块进行讲解,重点要讲出自己是如何根据实际问题定义相应的数据结构并解决问题的。

2.5 培养撰写文档的能力

培养学生按要点写出规范文档是课程设计需要培养学生的又一大能力,教师不光是要给出规范文档的要求和范例,还要给学生讲清楚为什么要这样写。我院的文档要求主要包括以下几个方面:

(1)问题描述;(2)ADT抽象数据类型定义;(3)模块调用关系;(4)详细设计:结构的定义;算法的描述;(5)分析与讨论;(6)参考资料;(7)致谢

2.6 考核成绩的评定

课程设计的总评成绩应包括平时表现、课设检查(包括成果展示和答辩情况)和课设报告三部分,三部分所占总评的比例分别为20%,50%,30%。

平时表现的成绩从学生是否按时出勤、课设过程中是否存在玩游戏的情况、是否服从老师管理等方面酌情评定。课设检查的成绩根据学生完成课设的实际情况来考核。本次课程设计要求课设检查统一采取学生答辩的形式来进行,即要求学生在完成课设的题目后,演示并讲解自己的程序,且回答老师提出的问题。指导老师主要从:问题的理解及解决能力,设计过程中独立工作能力,设计说明书p程序清单p开发的程序质量与工作量,设计题目的难度、先进性和实用价值,创新能力等方面进行评价打分(难度系数为一星级分数60~75,难度系数为二星级分数75~85,难度系数为三星级分数85~95)。要严格控制90分以上的高分人数,我们鼓励原创、鼓励创新、鼓励优化算法、鼓励扩展知识体系,只有做到了这些中的某些点才能给出90分以上的高分。课设报告的成绩根据学生完成的报告文档质量进行打分。课设报告若出现雷同或抄袭现象,报告的考核成绩一律为0分。

数据结构与算法第4篇

关键词:数据结构与算法;CDIO;工程教育

中图分类号:G642.0 文献标识码:A 文章编号:1002-4107(2014)12-0027-02

一、数据结构与算法教学存在的问题

倪光南院士指出,中国如果能发挥人才优势,不久就可成为仅次于美国的世界第二软件服务大国[1]。高素质的软件人才是我们成为软件大国的必要条件。目前国内软件设计相关专业毕业的工科生多数仅仅熟悉了一两项软件技术,存在专业基础不扎实、分析和解决问题的能力薄弱、动手能力不强等问题,导致了软件行业存在需求大于合格应聘者的尴尬现象。这一现象的根本原因在于学生在校期间没有夯实好专业“内功”,像数据结构与算法这样的专业基础课程没有取得良好学习效果。国内外相关专业在进行本课程教学中存在的主要问题如下。

(一)教学内容过于抽象

本课程涉及的知识面比较广,各章节的知识点有相互关联的逻辑关系,教学计划的制定多以理论知识点的讲解为主,选取的教材多数抽象难懂,缺少具体的实践案例的讲解,学生只能停留在理解层面,无法学以致用。

(二)教学模式僵化

老师课堂讲授侧重概念、理论,导致学生只能从理论上掌握基本的数据结构及其相关算法,但难以通过计算机编程语言(如:C/C++)实践相关理论,更不会用所学知识解决具体问题。很多学生在学习该课程的时候不知道在实际中如何应用各种数据结构和算法,仅仅学会一些“死”的理论来应对考试。

(三)实验教学环节薄弱

学生在实验的过程中,只停留在书本上,模仿书上的代码,存在理论脱离实际、实践环节薄弱问题,学生往往产生“学而无用”的思想。

(四)教学效果不佳

由于上述几个问题,学生只会机械地实践,没有领悟专业知识背后的思想,导致学生不清楚学习本课程的价值何在,分析问题、解决问题以及编程能力都没有从根本上得到培养,从而导致专业素质未得到提升。同时,学生的团队合作意识、良好的编码习惯等工程化思想未得到培养。

二、CDIO工程教育模式的特点

2000年10月,MIT联合瑞典的三所大学成立了以Edward Carwley教授为首的跨国高等工程教育改革研究组,创立了工程教育模型――CDIO(Conceive构思、Design设计、Implement实现、Operate运行),是“做中学”和“基于项目教育和学习”的集中体现[2]。

针对工程师的培养,CDIO提出的根本出发点就是为了设计造福于人类的软件产品,所以学生必须能发挥一个工程师的作用。表1显示了在企业/社会环境下,工程师“构思―设计―实施―运行”系统所必需的知识、技术及态度的组成模块。对于技术工作感兴趣的成熟的个体应具备个人和专业的技能,这是培养实践能力的核心。为了开发复杂的增值工程系统,学生应掌握最基本的技术知识和推理能力。为了在当今团队环境下工作,学生一定要发展团队合作和沟通的人际交往能力。最后,为了能够在企业/社会背景下创造和运行产品,一个工科生必须理解“构思―设计―实施―运行”系统的相关内容。

表1 工程师“构思―设计―实施―运行”系统所必需的能力模块

三、数据结构与算法课程教学改革的措施

教师培养学生实施软件项目都是围绕“构思―设计―实施―运行”这一背景进行的。表2显示了软件工程师参与工程设计的过程与CDIO之间是有对应关系的,可以看出,CDIO的理念是渗透在软件工程过程的每一个阶段。因此,基于CDIO的教育模式以及软件工程师进行“构思―设计―实施―运行”系统所必需的能力模块,提出了数据结构与算法教学改革的具体实施措施。

表2 软件工程师工程设计过程与CDIO之间的关系

(一)“构思”

教师授课时要明确培养“软件卓越工程师”的目标,而不是“软件外包程序员”,所以要强调数据结构与算法作为专业基础的重要性,可以让学生修炼以不变应对不断更新的软件技术的“内功”。在学习每个抽象的知识点前,一定要提出为什么要学习它,能解决什么问题。培养学生在软件工程设计过程中,能发现、分析和澄清一个问题的能力。

(二)“设计”

主要培养学生在工程设计过程中“提出―选择―实证”方案的能力,是软件工程师最重要的技能。课堂上多采用启发式教育方式,让学生自己提出解决问题的方案,如:拟采用的数据结构模型以及相对应的算法。然后通过算法的时间复杂度和空间复杂度进行事前比较分析,选择最优方案。最后,将要解决的问题通过“分而治之”的思想划分为子模块,并应用决定使用的方案,进行实证分析,看是否可以解决原问题。这个阶段也是培养学生逻辑推理和解决问题能力的阶段。

(三)“编码”

主要培养学生将分析设计的方案及相关抽象的理论知识用具体编程语言实现的能力。根据CDIO提出的“做中学”的工程教育理念,将授课中每一个抽象的理论知识渗透到具有实际意义的案例中,升华技术知识的运用。从而,使学生的学习更有效,能够学以致用,培养其实际运用的能力。除了专业知识和个人技能的培养,教师在案例教学和实践教学过程中,更要注重培养学生养成良好的编程习惯,形成良好的、符合软件设计规范的编程风格,从而使学生设计的数据结构与算法容易理解,具有较强的可读性,这也是一名优秀的软件工程师与人交流的“代码语言”,也是其人际交往能力的组成部分。

为了使学生通过本课程的学习,能够设计出时间上更高效、空间上更经济的程序,通过竞赛为载体进行教学,鼓励学生参加学院、学校组织的编程竞赛、ACM-ICPC省级大学生程序设计竞赛以及全国软件专业人才设计与开发大赛、软件大赛等。这些程序设计比赛解决问题的方式是“构思―设计―实施―运行”的模式,也需要学生具备工程师所必需的能力模块。通过这些竞赛平台,丰富了实践教学的形式,让学生拥有“学以致用”的平台,使学生的学习更有针对性,提高学生学习的主动性和参与性。通过“做中学”的方式有效地夯实专业基础的同时,提升其分析和解决问题的能力,实践动手能力也得到极大加强。

(四)“测试与维护”

培养学生在软件工程实践活动中创造、运行软件产品的能力。在教学中,将学生组成项目小组,并且根据学生的特点分配不同角色,各自经过“CDI”三个阶段,一起通过团队协作完成一个软件系统的开发。培养学生在设计、编写相关数据结构和算法的时候,本着“高内聚,低耦合”的思想,设计合理的接口,便于最终系统整合。同时,强调学生设计的程序要有通用性和灵活性,便于后期的修改和维护。

四、教学改革效果

哈尔滨理工大学软件学院将CDIO的工程教育理念应用到数据结构与算法的教学中,在教学的各个环节实施相应措施,培养学生“构思―设计―实施―运行”系统所必需的能力。图1显示了在数据结构与算法课程中实施CDIO教育模式两个年级学生期末考试成绩的对比。其中,平滑折线代表11级采用传统教学模式的数据结构与算法课程的成绩(67人,平均值=53.4),点划线代表12级实施CDIO教育模式后的数据结构与算法课程的成绩(65人,平均值=66.6)。可以看出采用CDIO模式后,学生整体成绩有明显幅度的提高。

由此,可以证明在数据结构与算法教学中实施CDIO工程教育模式是非常有效的。下一步将继续研究通过该模式的指导有效提高学生的工程实践能力,培养符合企业需求的软件人才。

图1 实施CDIO教育模式前后学生数据结构与算法课程成绩的对比

参考文献:

[1]靳晓燕.中国有望不久成第二软件大国[N].深圳特区

报,2013-11-17.

[2]Crawley,E.F.The CDIO Syllabus:A Statement of

数据结构与算法第5篇

关键词:离散数学;辐射作用;辐射体系;编译原理;数据库

中图分类号:TP3-4

离散数学是现代数学的一个重要分支,也是计算机科学与技术的理论基础,所以又称为计算机数学[1]。离散数学研究离散量的结构及其相互关系,通过离散数学的学习,不但可以掌握离散结构的描述工具和方法,为后续课程的学习创造条件,而且可以提高抽象思维和逻辑推理能力,为将来参与创新性的研究与开发工作打下坚实的基础。

离散数学课程所传授的思想、方法与工具,广泛地体现在计算机相关专业的诸领域,从科学计算到数据处理,从计算机科学理论基础到计算机应用技术,从计算机软件与理论到计算机硬件及体系结构,从人工智能到知识系统与工程,无不与离散数学密切相关。由于计算机本身是一个离散结构,它只能处理离散的或离散化了的对象及对象关系,因此,无论计算机科学理论本身,还是与计算机应用密切相关的现代科学的其它研究领域,都面临着如何对离散结构进行数学建模的问题;当然,也需要考虑如何将已建立的离散数学模型进行计算机应用的问题。

随着计算机专业研究生入学考试中专业课程统考的实行,很多高校的计算机专业对离散数学的教学投入开始缩减,减少课时,降低难度,避重就轻;学生也无法认识与理解离散数学在整个计算机专业课程体系中的重要性,致使离散数学的教学与学习在计算机专业越来越边缘化。实际上,离散数学在各学科领域,特别在计算机相关专业领域有着广泛的应用;离散数学是计算机专业许多专业基础课程,如数据结构、操作系统、编译原理、人工智能、数据库系统原理、算法设计与分析、理论计算机科学基础、软件工程等必不可少的先行课程[2]。

作为计算机相关专业数学基础的离散数学,对其它计算机专业基础课程有很强的知识辐射作用。本文致力于从一些计算机专业基础课内容中还原离散数学知识,从而体现离散数学核心内容在计算机专业系统知识中的辐射作用。通过对离散数学辐射作用的介绍,让计算机相关专业的本科生重新认识到离散数学对计算机专业系统知识学习的重要性,从而提高本科生学习离散数学的兴趣,重视自己数学理论基础的巩固和形式思维能力的培养。

1 离散数学辐射体系

离散数学是计算机及相关专业的一门核心课程,它不是一门纯数学课程,而是计算机学科的专业基础课程。离散数学是应计算机科学的发展而形成的一门交叉课程,主要内容涵盖了计算机相关专业对数学的一些基本要求。广义的离散数学主题包括集合论、数理逻辑、关系理论、图论、代数结构、数论、信息论、组合数学等,甚至包含拓扑学、运筹学的内容。有些高校将除拓扑学、运筹学等内容外的主题分为三门课程,即集合论与图论、代数结构与组合数学、数理逻辑。本文谈到的离散数学内容只涉及到数理逻辑、关系理论、集合论、图论以及代数结构。

离散数学课程与后续的计算机相关专业基础课程有着千丝万缕的联系,对其它专业基础课程的影响极其深远,在很多计算机专业课程内容中都会涉及到离散数学知识。无论计算机软件系列专业基础课程,还是计算机硬件相关基础课程,例如编译原理、数据结构、数据库、操作系统、软件工程和计算机组成原理。本文选择这六门计算机相关专业基础课程来阐述离散数学在专业系统知识中的辐射作用,如图1所示的离散数学辐射体系。

在图1中,编译原理的课程内容中就可以还原出全部的离散数学知识结构;数据库的课程内容则可还原出离散数学内容中的关系理论、代数结构、集合论与图论等内容;操作系统、软件工程、数据结构和计算机组成原路中都有离散数学知识辐射的印迹。

2 离散数学辐射作用

2.1 编译原理中的离散数学

编译原理是计算机相关专业的一门重要专业基础课[3],旨在介绍编译器构造的一般原理和基本方法,课程内容除了形式文法、有穷自动机等编译原理所涉及的基础知识外,其它内容基本上围绕处理程序设计语言的编译器应该具有的各功能模块展开,包括词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。

离散数学的数理逻辑中最重要的内容就是逻辑推理,由前提事实出发,采用相应的逻辑恒等式、永真蕴涵式、推理规则、推理方法等进行不停的推导演绎,最终得到想要的结论,这是一个严格的演绎分析过程。在编译原理中,与这一演绎分析过程相对应的则是语法自上而下分析方法,即从形式文法的开始符号(前提)出发,利用文法规则产生式(永真蕴涵式),采用相应的推理方法(最左或最右推导),最终得到想要的句型或句子(结论)。在推理证明中还有一种常用的证明方法,那就是从要求证的最终结论出发,依次为其找到相应的逻辑恒等式、永真蕴涵式、推理规则等作为最终结论或中间结论的依据,即从结论出发追本溯源到前提事实,这是一种典型的归纳逻辑。在编译原理的语法分析中,自底向上的语法分析方法则是归纳过程的代表,即从要得到的句型或句子出发,利用文法产生式规则和推理方法,进行不停的归约,一直到开始符号或失败至,这是一直明显的归纳逻辑推理过程,对应最右推导。

在离散数学的关系理论中,等价关系尤为重要。而在编译原理中,处处有等价原理辐射的痕迹,例如形式文法等价、有穷自动机等价、中间代码表示形式等价等。在编译原理的内容中,有关等价的部分还包括正规文法与正则表达式的等价性、正则表达式与有穷自动机的等价性、正规文法与有穷自动机的等价性。实际上,有穷自动机等价是进行非确定有穷自动机确定化、确定有穷自动机化简的理论基础。

编译原理的很多内容中都使用了形式化技术,最典型的就是状态图刻画有穷自动机、语法树表示语法分析过程,当然在LL(1)文法FIRST集与FOLLOW集计算、算符优先文法的优先函数关系图以及基本块有向图中都体现了离散数学的集合论与图论。在编译原理全部内容中都贯穿了符号串运算,符号串与其上的运算则构成了一个完整的代数系统。

2.2 数据库中的离散数学

数据库技术和系统已经成为信息基础设施的核心技术和重要基础,数据库技术作为数据管理的最有效的手段,极大的促进了计算机应用的发展[4]。数据库的数据模型中的关系模型就经典地体现了离散数学中的关系理论,尤其是关系模型中的参照完整性。数据库概念模型描述中使用的实体-联系模型(图)更是生动地呈现了实体型之间的关系。在离散数学中,函数是一类特殊关系,而关系数据理论中的函数依赖则描述了关系模式属性(集)之间的语义关联。数据库中的查询处理与优化的理论基础则是离散数学中等价原理,查询被处理或优化前后在功能和语义上必须满足等价关系。

与关系模型紧密相连的则是关系代数,这是一类典型的代数系统。关系数据结构是其运算对象,关系操作则是定义在关系上的具体运算,如选择、投影、连接、除等,这些运算都满足封闭性,关系操作的输入与输出则都是表示关系数据的集合,因此集合运算中的并、交、差、笛卡尔积等也是关系操作的一部分。关系数据模型中常用的SQL语言则是关系代数的一种具体实现,即一种具体的代数系统。

数据库理论中被集合论与图论辐射到的内容包括:(1)一个关系数据库是关系模式(二维表)的集合;(2)一个关系模式(二维表)就是一个实体集,表中每一个就是一个具体的实体元素;(3)在概念世界中描述实体型以及实体型间关系的实体-联系图;(4)关系查询处理与优化中的查询树。

2.3 其它课程中的离散数学

数据结构是计算机程序设计的重要理论技术基础[5],也是计算机存储与组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,因而,数据结构课程中很多具体的数据结构都是集合,如队列、栈、线性表等。数据结构除描述集合中数据元素的特性外,还要刻画集合中数据元素之间的关系,因此,一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的,对数据元素间逻辑关系的描述称为数据的逻辑结构。数据结构课程内容中的树、二叉树以及图等结构则是离散数学图论内容的延续,基于图结构的各种算法,如最短路径、最小生成树、关键路径等,在离散数学和数据结构中都有不同深度的描述。

操作系统课程中的进程状态图为典型的图论内容;操作系统在对进程等对象进行管理时,很多内容涉及到对象间关系,如死锁中进程间时序上的先后关系;操作系统中很多算法都使用到了集合概念,如死锁的解锁算法等。离散数学的核心内容辐射到了操作系统的管理与控制中。

软件工程最终的产物是软件系统,既然是软件系统,在进行软件系统分析与设计时,不可避免要研究系统各部分之间的关系。在结构化分析方法中,有自顶而下和自底而上两类分析方法,自顶而下对应数理逻辑中的演绎逻辑,而自底而上则表示数理逻辑中的归纳逻辑。软件工程内容中同图论有关的包括软件开发模型、软件模块间关系表示、软件测试等。

计算机组成原理作为计算机专业硬件方面的基础课,在学生对计算机的认知方面有着举足轻重的作用。计算机硬件的基础组成单元“逻辑门”等以离散数学中的命题逻辑为基础;计算机处理器的结构形式化等都离不开集合论与图论的参与。实际上,在让学生认知软件与硬件的功能等价性时,则充分体现了软硬件的逻辑等价原理。

3 结论

针对离散数学课程在计算机专业课程体系中越来越边缘化的问题,本文以编译原理、数据库、数据结构、操作系统、软件工程和计算机组成原理计算机专业基础课为例,论述了离散数学在计算机专业综合知识体系中的辐射作用,从而体现离散数学在计算机专业教育中的重要性和必要性。

参考文献:

[1]傅彦,顾小丰,王庆先等.离散数学及其应用[M].北京:高等教育出版社,2007.

[2]耿素云,屈婉玲,王捍贫.离散数学教程[M].北京:北京大学出版社,2002.

[3]张素琴,吕映芝,蒋维杜等.编译原理(第二版)[M].北京:清华大学出版社,2005.

[4]王珊,萨师煊.数据库系统概论(第4版)[M].北京:高等教育出版社,2006.

[5]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2011.

作者简介:胡慧君(1976-),女,讲师,研究方向:智能信息处理;刘茂福(1977-),男,教授,研究方向:自然语言处理。

数据结构与算法第6篇

【关键词】数据结构;基本知识;课程实验;方法;改革

中图分类号:G423.07 文献标志码:A 文章编号:1673-8500(2014)01-0068-01

一、数据结构内涵

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。目前,对数据结构研究已经成为世界上一些非数值量的信息结构及其处理方法,它被定为计算机科学与技术相关专的重要课程,同时也是应用数学、管理科学等很多专业的一门基础课程。为了更好有成效的使用计算机、让计算机的性能得到充分发挥,数据结构的有关知识的学习和掌握是非常必要的,大量的很难的算法存在于数据结构中,分解与抽象是它的核心技术,要想让学生掌握这门核心技术,就要认真扎实的通过对课程内容的学习与实践,构造性思维训练的特征得到有效的体现,提高学生的操作能力和实际应用水平。

二、数据结构课程设计改革

通过课程设计来让学生进一步掌握数据结构的整体框架和知识层次,课程设计的内容主要是根据三种逻辑结构(线性、树型和图型)把课程分成三部分贯穿下来,对每一部分又采用层次结构,即逻辑结构、存储结构和在该存储结构上的操作及相应的算法。结合讲过的一个和几个典型的算法给学生留一个实际问题,让学生编程序上计算机去处理。如:讲线性问题的插入和删除这部分时,就留一作业题:把学生成绩按学号录入进计算机中,一涉及到实际问题就会用到许多的相关知识,需要查阅大量的书籍和网站。不过,得到的收获也是可观的。

三、数据结构教学手段和教学方法的改革

实现以教师主导下的以学生为主体的教学模式。在具体的教学手法方面,把学生为教学的主体,坚持实行任务驱动的教学手段,诱导学生主动学习,相互协助学习,共同进行探索与研究,这种教学方式学生很容易接受并受到好评,取得成效很显著。研究算法的具体法则是给学生的算法实现的有关程序和算法实现的思路。每一节课上完后,对讨论过的内容作出总结,对本节极容易出错的状况做好归纳,梳理出具体条款。学生对每一种数据结构的特点和实现都能够牢牢地掌握。除此之外,做好与学生沟通协调工作,重视课后辅导。课下辅导除在课堂中以及学生上机进行辅导之外,还有一种办法是和学生取得联系,利用网上交谈的手段,利用这种手段,掌握学生的思想动态、学习状况,迅速回应学生在自主学习及课后学习时遇到的疑难问题。教师在数据结构教学手段上,要精心设计教学内容,对较困难的算法制作以及收集了大量FIASH演示动画方面的材料。把抽象的概念和空间结构加以具体化、形象化,使所教的数据结构内容直观、生动、提高了学生的学习的积极性,同时提高数据结构教学质量和学生的学习效果。

四、数据结构基本知识部分教学的改革

数据结构的基本知识是这门课程的重点,包括数据的逻辑结构,相应逻辑结构的存储结构,以及在此存储结构上的相关操作及算法等,这些内容必须要讲,也很枯燥,教学时可以根据实际情况做一些调整。

教授学生理解数据结构这门课,同时也是提高学生的学习兴趣的实践过程。通过举例分类、总结学生参与进来的办法来帮助学生理解数据的逻辑结构和存储结构等概念。首先从实际情况入手来引出逻辑结构的概念:学生都知道计算机能进行图书管理,能和人对弈,可是学生要明白计算机之所以能干这些事是靠人工编的程序输入到计算机中来支配计算机工作的,程序怎么编,不同的问题有不同的编程思路,那么实际中的问题基本上就是这么三类;线性问题、树型问题和图型问题。接着通过分析上面图书管理问题,下棋问题,以及修路问题来让学生明白什么是线性、树型和图型问题,接着给一定的时间让学生每人想出一个线性、树型和图型关系的例子,在生动活泼的气氛中把实际问题过渡到这门课中来,实际生活活跃了学生的课堂气氛。反过来,学生也把数据结构的理论知识应用到了实际中去,最后总结到实际问题的线性、树型和图型的逻辑关系是人类对实际问题的逻辑思维。在数据结构这门课中把这种逻辑关系叫做逻辑结构。要让计算机处理实际问题必须把从实际问题中抽象出来的数据和它们之间的逻辑结构存储到计算机中,计算机才能够对实际问题进行处理,那么怎么存储呢?逻辑结构在计算机中的存储方式在数据结构中就叫存储结构。逻辑结构和存储结构这两个概念学生就顺其自然地接受下来。

五、数据结构课程实验部分教学的改革

进行实验教学改革,加强实践教学环节。让学生学以致用是教师传授知识的目的,因此明确教学目标,把培养学生的能力放到重要位置,重视数据结构实践性环节。数据结构课程的让学生上机实习,是对学生极有利全面综合训练,它与课堂上听老师的讲解、自主学习和独立训练是相辅相成的,也是教学中不可或缺的一个教学环节。因此为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,制定了实验大纲,实验指导书,实验手册等设计了系统的有效的实验项目,规范实验报告,提高学生编程能力和专业技术水平。

在学生理解了数据结构的逻辑结构和存储结构这两个概念的基础上,接着让学生学习计算机对数据的操作和算法。算法一般都是用C语言来描述的,要想让学生掌握好每个操作的算法,一定要学生自己编出完整的程序,直接上机训练每个算法。在理论课上把每种逻辑机构联系到的操作进行初步归类后,接着讲每种操作的算法。讲算法时主要采用以下方式帮助学生理解和掌握:

数据结构与算法第7篇

【关键词】数据结构 地理信息科学专业 教学内容改革

一、前言

数据结构是计算机专业的一门综合性专业基础课,算法和数据结构是计算机科学的两大支柱。地理信息系统(GIS)是在计算机硬、软件系统支持下,对地理空间数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。作为计算机专业核心课程的数据结构是GIS专业的核心课程。然而,计算机专业和GIS专业学生专业背景不同,学习重点也不同。因此,在GIS专业数据结构教学过程中,根据本专业的需求,并结合专业特点,设计合理的教学内容是十分必要的。

二、GIS专业数据结构课程教学存在问题

通过数据结构的学习,要求学生掌握:数据的各种逻辑结构和物理结构,包括线性表、栈、队列、串、树、图等;基于各种数据结构的各种运算,如插入、删除、检索等;基于各种数据结构的算法,例如基于图的最短路径分析、查找算法等;分析算法的效率,主要指算法的时间和空间复杂度[1]。

GIS专业是一门集地理学、计算机、遥感技术和地图学于一体的新型专业。GIS专业的学生不仅要有深厚的计算机功底,而且还应该具有较强的空间思维能力,能够处理和分析二维/三维的地理空间数据。然而教师在当前的数据结构教学过程中,普遍重视非空间数据的处理,较少涉及空间数据的组织和管理。同时,学生对于数据结构与GIS专业的关系非常疑惑,特别是常规的教学内容与方法,不能与专业相结合,学习起来就比较困难。

通过近几年的教学研究,笔者在数据结构教学过程引入空间数据存储、空间数据管理、空间关系、空间分析等与GIS专业关系密切的教学内容,使得学生对数据结构有了更好的理解,对GIS的学习也有了很好的促进作用。

三、GIS专业的数据结构教学内容改革实践

(一)数据结构用于空间数据存储和运算

数据结构研究内容包括线性表、栈、队列、串、树、图等结构。它们不仅能够对非空间数据进行表达,也能够对空间数据进行表达。在数据结构教学过程中,对数据结构存储的内容进行扩展,数据结构中存储的不再是整型、浮点型、字符型等简单类型,还可以是各种各样的空间数据。

在数据结构课程教学中,要求学生能够独立设计点、线和面等不同维度的矢量和栅格空间数据、影像空间数据的结构体(或类),并实现线性表、栈、队列、串、树、图等结构的定义和运算,使数据结构能够处理各种类型的空间数据。

(二)树结构用于空间数据管理

在数据结构课程教学中,要求学生能够利用树结构,设计典型的空间数据索引。空间数据的一个非常重要的特性是其海量特征。海量的空间数据管理,需要设计相应的空间索引。作为一种辅的空间数据结构,空间索引介于空间操作算法和空间对象之间,它通过筛选作用,排除大量与特定空间操作无关的空间对象,从而提高空间操作的速度和效率。比较有代表性的空间索引有格网索引、四叉树索引、R树和R+树索引、CELL树索引。

空间索引的设计需要树结构的支持。例如,四叉树空间索引的构建可以用树结构进行描述。通过建立树结构表示,表达地理空间对象,能够实现对空间数据的快速检索。

(三)图结构用于空间关系表示

GIS不仅关心空间目标自身的几何特征及属性,还必须能够处理其与所处环境间的关系。因此,在数据结构课程教学中,要求学生掌握空间关系的基本理论并设计相应的图结构,使图数据结构能够对各种空间关系进行计算机表达。

空间关系是GIS的核心研究内容之一,主要包含拓扑、方位和度量空间关系。拓扑关系描述了空间对象在拓扑变换下的拓扑不变量;方位关系描述了空间对象之间的相对位置信息;度量空间关系是用某种度量空间中的度量来描述对象间的关系。因此,数据结构支持空间关系的计算机表达,也是数据结构教学过程中的重点。

空间关系可以通过图数据结构来表达。图G是由集合V(G)和E(G)组成,记为G=(V,E),其中V(G)是顶点的非空有限集合,E(G)是边的有限集合,边是点的无序对或有序对。在空间关系的表达过程中,采用顶点表示地理空间对象,边表示地理空间对象之间的空间关系。V(G)表示地理空间对象集合,E(G)表示地理空间对象关系的集合。然而,地理空间对象之间存在多种空间关系,例如,地理空间对象A和B之间的拓扑关系为相离、方位关系为东、度量关系为10米。这就需要定义多种子图,分别表达不同的空间关系,然后将各种子图进行合并,形成一更高级别的图集合。可以定义图的集合:,其中,表示图的集合,分别表示各种子图。

(四)数据结构应用于空间分析

GIS包含很多空间分析方法,如叠置分析、网络分析、地形分析等。其中,网络分析通过研究网络的状态以及模拟和分析资源在网络上的流动和分配情况,对网络结构及其资源的优化问题进行研究。在数据结构课程教学中,要求学生掌握空间分析的基本理论并设计相应的图结构和改进的Dijkstra算法进行路径选择、资源分配和网流量分析。

网络分析可以通过图数据结构实现。例如,基于图数据结构和改进的Dijkstra算法能够进行网络分析。进行网络分析,能够选取一条最优的路径,也可以选择合理的资源配置中心,同样可以选择最佳的布局中心。

四、结论和展望

空间数据存储、空间数据管理、空间关系、空间分析是GIS专业的核心研究内容。教师结合GIS专业特色,对数据结构课程内容进行适当调整,强调数据结构在GIS方面的应用,使教学内容更具有针对性,既有利于增强GIS专业学生学习数据结构的兴趣,又有利于GIS专业人才培养。

【参考文献】

[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,1997.

[2]胡学钢,张晶,周红鹃,等.数据结构实践教学体系设计[J].吉林大学学报(信息科学版),2005,23(S2):138-141.

[3]姜跃.《数据结构》课程的教改与实践探索[J].云南师范大学学报(自然科学版),2011,31(03): 71-73.

数据结构与算法第8篇

该课程研究的内容主要包含两部分:一是现实世界中的信息如何抽象并用数据的形式在计算机内的存储问题,也就是数据的结构;二是对存储的数据进行加工处理以获取新的信息的方法,也就是算法。这种课程既有很强的抽象性,同时也有很强的逻辑性和目标性。该类课程很适合采用任务驱动的教学模式。

2数学建模引领和促进“数据结构”课堂教学改革

2.1数学建模流程指导“数据结构”课堂教学过程的优化数学建模一般要经过分析问题、建立模型、模型求解、解决问题四个环节,而且后三个环节可以多次循环进行以便得到令人满意的结果。“数据结构”教学过程中可以按这样的思路来引出问题,进一步给出更好的算法,这样可以引导学生创新意识的培养和逻辑思维能力的提高。下面结合课程中排序部分讲到了“冒泡排序”算法来展示这个过程:}这样一个算法对任何一个10数据组都能进行正确排序,看似问题已经解决了,但这时应该让学生考虑:如果给出的一组数据2.2数学建模团队的协作模式启发“数据结构”课堂教学模式变革数学建模时问题复杂、信息多样、计算量大等特点决定了整个任务不是一人能完成的,需要一个分工协作较好的团队。只有准备充分、分工明确、精诚合作的团队才能取得好的成绩。受此启发,教学过程中,可以对于部分内容采用分组学习和讨论的方式进行。如在学习“队列”的时候,可以让学生分成几组,每一组首先通过资料查询等方法提出一个可以抽象为队列的实际问题(如火车调度问题、银行排队问题等),然后针对实际问题小组内展开讨论,进一步写出算法并验证。教师可以分时段地参与到不同的小组中讨论。2.3数学建模结果的实用性和高效性指导“数据结构”课堂教学评价数学建模的最终结果要求实用和高效。实用就是要求最终建立的数学模型及其算法能针对具体的问题给出正确的结果,否则就是错误的模型,整个过程是失败的。高效就是要求针对具体的问题提出的模型特别是算法所用时间是最短的,所需要的条件是最少的。“数据结构”课堂教学效果如何需要做出判断,如何判断才是合理的?课堂教学后可以通过考试或课程作业汇报等形式,针对具体的问题,看学生给出的算法是否真的能把问题解决了,将多个同类问题的算法做比较和评价,看是否有改进或创新。

3“数据结构”课堂教学为数学建模提供必要的能力储备

3.1在“数据结构”课堂教学中培养学生的抽象思维能力课堂教学中涉及到了数据组织的三大逻辑结构(即线性结构、树状结构和网状结构),在教学过程中多提出一些实际问题,然后针对这些问题引导学生利用所学知识进行问题抽象,最终把实际问题涉及到的对象用某种逻辑结构表示出来。这样学生的抽象思维能力会不断提高。下面讲一个例子:多叉路口交通灯管理问题[10]:某个城市的某一路口的道路交叉情况现状如图1所示,要求给出一个针对该路口的红绿灯管理方案,既要能高效地顺利通行又不会发生交通事故。图1路口的道路交叉情况示意图对于这个问题,如果只是针对图1宏观地去分析比较复杂而且不具备通用性,提出的问题应该是解决一类问题。结合“数据结构”的内容很容易想到用图状结构来解决,关键问题是怎样抽象为图状结构。抽象过程之一可以是这样:因为是通行道路交叉问题,因此通路是数据元素,不能通行可以抽象为关系,结合图1展示的现场情况,可以给出图2所示的通行关系图。图中颜色不同的顶点所代表的通路不能同时放行。3.2在“数据结构”课堂教学中培养学生的算法分析和创新能力“数据结构”课程一开始就提出算法效率以及分析方法,可见算法的效率的重要性。因此,后续经典算法讲解完都给出了算法分析思路,课堂教学中,也要重视这一点。在教学过程中应该有意识地通过讲解或讨论的形式,让学生习惯于这种算的的比较和分析,并在此基础上提出自己新的想法。比如文中第二部分第1点提到的“冒泡排序”算法的改进问题,就是一个很好的例子。再比如针对排序问题,课程中还提出了其它的算法,其中“选择排序”算法更为经典。算法如下:3.3在“数据结构”课堂教学中培养学生的动手能力“数据结构”课程一般有配套的实验课程,实验课程的主要内容就是课堂教学过程给出的算法的验证以及改进或新提出的算法的实现。实验过程需要学生用自己熟练掌握的语言工具通过在计算机上编写和调试对应的程序,通过程序的结果来检验算法的正确性与否。从这个角度来讲,锻炼和提高了学生的动手能力,这也正是数学建模中两个重要环节(即模型求解、解决问题)所必须的一种能力。