2023年数据结构与算法【五篇】(全文完整)

时间:2023-07-13 09:30:05 来源:网友投稿

算法与数据结构包含了选取的算法、存储必备的方法、拟定的操作规程。解析数据结构,这类思路有着凸显的导向,它关系到培育的抽象认知。构建精准的某一程序不可缺失算法、搭配的数据结构。辨识了二者的多重关联,设定下面是小编为大家整理的2023年数据结构与算法【五篇】(全文完整),供大家参考。

数据结构与算法【五篇】

数据结构与算法范文第1篇

关键词:算法;
数据结构;
相关性

中图分类号:TP311 文献标识码:A

算法与数据结构包含了选取的算法、存储必备的方法、拟定的操作规程。解析数据结构,这类思路有着凸显的导向,它关系到培育的抽象认知。构建精准的某一程序不可缺失算法、搭配的数据结构。辨识了二者的多重关联,设定最适宜的逻辑框架以此来便于拟定程序。把控各类的算法,侧重去养成合适的设计风格,适应日渐复杂的新算法。

一、选取线性链表的实例

计算机科目包含了选取的算法、相关数据结构。从实质上看,算法及特有的数据结构并非没有关联,它们是联系的。变更了分开的思路,侧重了相关性。依循了算法的主线,多样的数据结构都被融汇于设定的这一算法。解析了相关性,借助于预设的程序语言来区分二者。经过探究可得:数据结构及算法拥有内在的深层关联,二者不可割裂。把控根本的某一数据结构、辨析存储结构,还要关联着可控的算法。这样做揭示了深层的二者关联,符合了变化的科目需要。

二、算法编程的语言

设计算法含有:初期拟定的模式、面向对象状态下的编程、泛型的编程。融汇这样的要素,构建可得适宜的算法。设定某个二元组,用它来代表数据结构。在二元组内整合了多重的数据元素,这样的基础上又创设了集合关系。经由抽象可得细化的数据类别。这类算法添加了灵活优势,且很易被调用。

相关性涵盖着泛型编程特有的途径,它被设定成典型。泛型编程抽象可得更完备的、精细的新集合,借助于它来代表算法。整合了多态模板,可被重复去调用,获取了更高水准的算法组件。经由自主的定义,明晰了数组内的一切元素,集合可得新类别。数据类型含有:堆栈及常见的表、二叉树、队列及图形等。表述这样的抽象数据,依循了面向对象的表述途径,支持表述语言。提炼获取了算法模式,遇有近似的数据结构都可依照凝练的这一算法予以运算。先要预设模块,拟定细化的类别及关联的行为。

三、算法的演示流程

线性链表的算法依循了面向对象路径下的解析,选取单链表整合了细化的较多数据项。归结了线性表、树形图及队列等。依循继承的演算即可获取双向架构的这类链表,演算的流程为:

四、探析实现的路径

构建神经网络依照的根本思路为:最小二乘算法。要调整拟定的权值,借助于梯度搜索来平衡输入及输出的误差。从现状看,BP网络是最为常见的一类神经网络,它整合了输入及输出,构建了双重的映射。数据结构及算法凸显了实践的特性,侧重培育本源的抽象思路,增添了实践类的新技能。创设新颖的算法,要考量真实的关联。实现的路径为:解析某一疑难、设计可用的算法、设定编程。

算法及创设的数据结构可延展至自动检索馆内的书目、调配交通灯、求解某一迷宫。这类算法都不可脱离生活,增添了真实性。针对于线性表,要验证它关联的链式流程。模拟退耕还林,解析最适宜的需求。这样的基础上,创设了彼此关联的精准数据结构。经由后续的细化设计,编码而后再次去调试。例如:在选修课程时,要拟定明晰的科目名称、依循的次序等。设定拓扑次序来指引后续的选修流程,可创设AOV特有的算法网络,布设顶点次序用作表述可筛选的课程。

探析相关性还可选取压力传感器,它含有噪声的干扰、振动这类的干扰信号。可构建采样电路,压力传感器增设了输出信号。BP网络可采纳任一精度来逼近连续函数,只要选取了适宜的神经元数即可。它包含着隐层,神经网络在任一精度层级内都能表现出非线性的映射。可以先去生成初始的加权系数,采纳梯度搜索以便修正原有的系数。不断予以修正,直至误差的均方符合了拟定要求,才可终结这一流程。为滤除干扰,经由EMD这样的滤波以此来获取信号。经过后续的分解,可得测重必备的稳态单值信号。

结语

算法关系着数据结构,解析现有的课节内涵,增添探究中的浓厚兴趣。演示某一算法要侧重相应的数据结构。经由慎重的演算才能缩减后续编程的偏差,培育审慎严谨的风格。授课中要增设必备的指引,提出某一疑难而后摸索并化解。归结零散的现有知识点,做好举一反三。

参考文献

[1]李晓鸿,骆嘉伟,季洁.“数据结构与算法分析”研究型实践教学的探索[J].实验室研究与探索,2012(01):121-125.

[2]刘晓静,黄维通,王晓英.西部地区CDIO理念下的数据结构与算法课程建设[J].计算机教育,2013(17):107-111.

数据结构与算法范文第2篇

关键词:数据结构;算法;换位思考法;问题求解

数据结构与算法是计算机科学与技术专业的核心基础课程之一,同时,它也是算法分析与设计、操作系统、软件工程、数据库概论、编译技术、计算机图形学、人机交互等专业基础课和专业课的先行课程。本课程主要以抽象数据类型为主线,研究常用数据结构的逻辑结构、存储结构及其所支持的运算操作;研究能够解决实际问题的经典算法;学习基本的算法分析方法。它为学生后续课程的学习以及进行计算机软件的设计和开发打下良好的基础。

1教学过程中存在的问题

数据结构与算法课程是计算机专业教学的难点。在教学过程中,我们发现学生对这门课不仅感到入门困难,而且难于驾驭,其主要表现有以下几点。

1) 高职高专学生的先导知识学习储备不足。由于高职高专的教学以“理论够用”为教学原则,因此,学生掌握基础理论知识的程度无法与本科院校学生相比。例如,数据结构与算法需要学生具备结构体类型和指针的知识,甚至能够掌握内存模型的运行机制,而对于高职高专学生来说,其先导课程C语言程序设计属于非重点或选学内容。

2) 概念过多,不利于高职高专的学生掌握。本课程涉及的基本结构包括顺序表、树、图,以及查找、排序等算法内容。特别是树和图两项内容包含大量概念和理论,其中许多必须掌握的内容使学生产生畏难情绪。

3) 高职高专学生在实践课中没有养成阅读英文文档的习惯。学习编程的最好方法是阅读和查看MSDN,但高职高专的学生英语底子差,不太愿意阅读英文文档,这影响了实践课的教学效果。

从高职高专院校的教师角度来看,存在以下问题。

1) 高职高专院校的老师的教学模式过于单一,较少传授学生解决现实问题的方法。在数据结构教学过程中,高职教师一般将授课重点放在讲授数据的基本结构上,选择的案例只能用于数据结构算法的验证和说明[1]。这种教学模式对高职学生非常不利,因为,仅从基本结构这个单一的角度进行教学,只能使大多数学生在学习过程 “依葫芦画瓢”,一旦遇到问题就束手无策,乃至产生畏难和厌学情绪。很多学生常常觉得教科书的内容与具体的项目设计相距甚远,给人一种无从下手的感觉。在学完数据结构与算法课程后,学生既不能灵活运用所学知识,也难以实现从数据结构基础知识的掌握到实际应用的飞跃,这与高职院校“实用为主”的教学原则不符,也不利于应用型人才的培养。

2) 高职高专院校的老师的教学手段丰富,但是往往不涉及具体问题的分析,以及基于问题提出对应的解决方法,只是一味地追求直观效果。有些老师甚至根本不讲数据结构的抽象表示,在数据结构算法的处理上也不考虑应用场合,而是直接提供代码给学生。当然,这样做似乎对初学者有一定好处,但无助于学生培养正确的思考方法,另外,它让学生只注重实现程序,而不考虑如何进行算法设计以及怎样选择合适的数据结构来表达自己的算法思想。我们认为,在“够用为度”的教学原则下,教师只能在教学内容上进行适当的删减,而不能仅局限于“简单地教,简单地学”。

3) 对于高职高专院校而言,很多老师不具备完整的教学体系思想,不知道如何处理数据结构、算法和实现代码之间的联系和区别。有些老师对课程内容的理解不够深入,特别是没有把理论与实际应用问题联系起来。这势必造成学生不能理解学习数据结构课程的意义,不能形成对课程内容的整体概念,也不知道学习这门课程有什么用,不知道这门课程在专业体系中的位置。对于高职学生而言,数据结构为什么存在?在项目实践中如何灵活应用?这些问题如果不得到解决,那么在高职院校开设这门课程就变得毫无意义。

2教学改革中的几点建议

对于高职高专院校的学生来说,提高他们的学习兴趣至关重要。虽然高职生的基础知识薄弱、学习动力不足、自信心不强,自我管理以及自我约束力较差,但是,他们思想比较活跃,动手能力和社会适应性较强。因此,他们更需要老师耐心、正确的引导。对此,我们可以从以下几个方面进行改进。

2.1激发学生的学习兴趣

“兴趣是最好的老师”。培养学生的兴趣和维持前期的学习热情,并让学生在以后的项目实践中主动运用本门课程中学习到的知识,这是每个高职教师的责任和义务。我们知道,在这门课程中存在很多经典算法,而每一个经典算法的背后都有一个计算机界的传奇人物[2]。例如KMP算法中的D.E.Knuth,最短路径算法中的Dijkstra,等等,他们每个人都有一个传奇人生,上课时,教师可以通过讲述他们对计算机发展所作的突出贡献,鼓励学生,激发学生的学习热情。而在实践课程中,我们主要采用“换位思考法”,锻炼学生独立编程能力。梁肇新在《编程高手箴言》一书中提到:我就是程序,程序就是我。学生在上实践课时,很多程序细节问题都搞不清楚,这严重挫伤了学生的学习积极性。由于这些编程问题不可能在上课时被一一解答,所以,学生只能通过平时积累和应用,逐步提高自己的动手能力。上这门课时,教师要多鼓励学生把自己想象成“编译器”,不要只是简单地把它作为一个工具,而要把我们的编程工具“人性化”,编程过程只是我们在和一个“法官”聊天而已,而这个法官又无比“公正”。如果把自己想象成“编译器”,在学习语法时就可以很好地进行“换位”思考,知道自己需要什么,如何做才能编译和调试成功,学习兴趣也会随之提高。

2.2选取合适的教学内容

高职院校在开设数据结构与算法课程时,考虑到学校和学生的特殊性,总课时一般安排为64个课时,理论和实践各32个课时。内容多、课时少这对矛盾如何解决?如何在比较短的时间内培养学生独立解决问题的能力?这都是值得研究和探讨的问题[3]。

众所周知,本门课程包括表、树、图3种数据结构,而每一种数据结构又包括3个方面的内容――逻辑结构/存储结构/操作实现;还包括两类典型算法――查找/排序。这么多教学内容不可能在一个学期内完全教授给学生,所以,我们对教学内容进行了适当的删减,以便重点突出。在不影响高职院校教学原则的前提下,我们将教学重点放在线性表结构和通过时间复杂度分析选择合适的数据结构这两部分内容上(如图1所示)。对于非线性结构这部分内容,我们着重

讲解概念,具体用法可以留给学生作为课外作业。这种选择可以使学生养成良好的思维习惯和正确的学习方法,以求达到“运用之妙,存乎一心”。

2.3巩固先导课程的基础

在先导课程C语言程序设计中,学生没有系统地学习结构体和指针类型,也没有掌握动态内存分配的知识,所以,在本门课程教学中必须首先弥补以前的不足,但我们又面临新的问题,即系统学习与学时数不足的矛盾。对此,我们有如下建议:讲解在运行期时程序在内存中的分布区域,以及各个内存区的作用就足够学生理解本课程知识(如图2所示)。图2中模型[4]的讲解适合贯穿整个实践课程的教学过程,把这个模型讲深讲透,让学生彻底掌握,有利于高职学生独立思考和解决问题能力的培养。这个程序内存分布模型可以很好地满足高职院校的教学目标,让学生在具备较强编码和调试能力的同时,又具备解决实际问题的思想和技术。

2.4传统和现代教学手段相结合

高职院校一般硬件设施齐全,教学条件优越,给教师和学生提供了现代化的教学环境。不可否认,现代教学手段具有生动、直观和信息量大等特点,对于提高教学效果有促进作用,例如,多媒体教学课件(PPT课件和Flas等)和丰富的网络资源,等等。从本人多年的教学实践来看,现代媒体对提高某些课程的教学效果作用显著,但对于理论性很强的数据结构等课程而言,只能起到辅助作用。事实上,美国数据结构教学仍以讲授为主[5],所以,传统教育手段对本门课程不可或缺。在本门课程中,讲解三种数据结构的概念和性质时,可以多用PPT等现代教学手段;讲解算法的动态变化时,多用黑板+粉笔头的方式演示其动态变化过程[6-8]。

2.5问题驱动教学法

福州大学吴英杰等老师[9]在该校引入面向问题的教学模式,取得了良好的效果。在高职院校采用该教学模式,选择的问题必须具有代表意义,足够简单而且能够帮助学生快速入门。从图3可知,在传统的教学模式下,教师只是按照“逻辑结构存储结构编程实现”的流程讲解,学生并不能理解数据结构的意义。如果采用问题驱动的教学方法,教师必须按照“问题定义算法设计选择数据结构”的流程讲解,这种讲解方法可以帮助学生很快抓住数据结构的精髓,了解算法与数据结构之间的关系。在教学实践中,我们选择了3个典型问题:最大子序列和问题、二分搜索问题和快速排序问题。选择这3个问题的根本原因在于它们只需要用顺序表或数组就可以实现;第1个问题的引入在于其历史发展过程符合我们的思维习惯,就是一个不断深入理解问题,不断优化的过程;第2个问题的引入在于90%的计算机专家不能在2小时内写出完全正确的二分搜索算法;第3个问题的引入在于快速排序算法的实现只能选择顺序表或数组实现,而不能选择链表来实现。通过上面3个典型算法的实践课,高职学生能够很快地掌握验证和优化程序以及选择合适数据结构实现算法思想等能力。

2.6调整实践内容,提高学生能力

如果实践课只是使用枯燥的控制台程序界面,许多学生很快就会失去学习的兴趣和钻研的动力。实践课应该生动、活泼、有趣,因此,我们在实践课中引入简单游戏开发项目,例如走迷宫和5子棋等游戏。这些游戏都用到了顺序表等简单的数据结构和查找等算法知识,完全满足高职院校的教学要求。在教学实践中,我们一般提供游戏的整体框架代码,要求学生独立完成算法设计和代码实现。我们之所以这样做,一是因为实践课只有32个课时,没必要让学生设计软件的整体框架;二是因为不能让学生产生“程序=软件”的错误思想。

2.7改变考核方式

数据结构与算法课程一般采用最终卷面成绩的考核方式。根据高职院校的教学原则,应加大实践课在最终成绩的比重。通过实践,我们发现阶段性成果

的展示和分阶段打分在教学中有良好的教学效果,通过这种考核方法,在平时即对学生从严要求,高职学生的综合能力得到提高,潜力也能得到充分挖掘。

3结语

作为一所高职院校,我院在数据结构与算法教学改革与实践中取得了一系列丰硕的成果。我院ACM- ICPC代表队在2007、2008、2009年度亚洲区现场赛中曾获得优胜奖,2007、2008年四川省大学生程序设计大赛中曾获得二三等奖。同时,计算机科学与技术系的普通学生的出勤率和及格率得到提升,学习兴趣也有所提高。

数据结构与算法课程尽管难教难学,但如果采用正确有效的教学方法+生动活泼的学习方式+严格管理的考核方式,仍然可以取得良好的效果。

参考文献:

[1] 周泽辉. 浅谈高职学院数据结构课程的算法驱动教学[J]. 科教文汇(中旬刊),2009(3):121-122.

[2] 苏前敏. 计算机科学技术史的独特教育功能探讨[J]. 上海工程技术大学教育研究,2007(1):20-23.

[3] 卢洁,冯家勋. 理工科课程教学整体改革探索[J]. 高等工程教育研究,2009(2):137-139.

[4] 钱能. C++程序设计教程[M]. 2版. 北京:清华大学出版社,2005:145-149.

[5] 严莉,杨宗凯,刘三 . 关于高校教师与网络教学的研究综述[J]. 电化教育研究,2009(4):39-42.

[6] 蔡敏,郑尚志,梁宝华. 数据结构课程教学改革之我见[J]. 计算机教育,2009(4):50-51.

[7] 张桂芬,李海滨. 数据结构实验教学的改革与探索[J]. 高教论坛,2008(3):103-104.

[8] 周玉林,赖鑫生. 数据结构教改中的问题研究与探讨[J]. 上饶师范学院学报,2008(3):84-88.

[9] 吴英杰,王一蕾,王晓东. 面向问题求解的实践教学模式:算法与数据结构实践教学改革[J]. 计算机教育,2007(7):29-31.

Suggestions of Teaching and Learning Data Structures and Algorithms on the College

FAN Jun-qing1, CHEN Wen-fei2, XU Xue-feng3, YU Xin-qiao3, HOU Zong-hao3

(1. School of Computer, China University of Geosciences, Wuhan 430074, China; 2.Department of Computer Science, Wuhan

University, Wuhan 430072, China; 3.Department of Computer Science, Chengdu Neusoft Vocational Institute of Information

Technology, Dujiangyan 611844, China)

数据结构与算法范文第3篇

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

国内多数高校在数据结构与算法的教学中依然采用传统的教学模式,一般存在以下一些问题。

第一,师资方面。教师普遍具有高学历及较强的科研能力,所以课堂上的讲授以理论知识为基础,学科发展为导向,追求专业知识的完备性,不问软件行业的需求。

第二,讲授方法。教师在授课过程中容易只专专注于自顾自地讲解教材上的抽象的数据结构以及算法思想,不顾及学生的接受程度和融入课堂的积极性,更忽视学生课后学以致用的实践能力的培养,从而陷入“教师讲,学生被动接受”,甚至是“教师讲,学生睡”的填鸭式教学误区[1]。

第三,人才培养。缺乏与软件产业界的联系,依然把讲授理论放在首位,忽视工程实践性和应用环节,不利于学生对课程内容的掌握和工程实践能力的培养。

第四,教材内容。内容偏向理论,更新缓慢,由于内容较抽象,学生阅读后,通常只能停留在理解层面,难以付诸工程实践。

第五,实验环节。相对薄弱,通常实验的目的为验证书上的理论知识,缺乏创新能力和综合分析、解决问题能力的培养。

第六,素质培养。本门课程涉及的内容比较多,课上不可能涵盖所有知识点。学生由于惰性,多数只是掌握书本理论,机械地实践后,不再更多地领悟专业知识背后的思想。同时,缺乏团队合作意识,不能及时分享学习心得,导致专业素质提高的缓慢。

二CDIO工程教育模式在数据结构与算法中的实施方法

针对这样的情况,哈尔滨理工大学软件学院从2007年就开始研究CDIO教学模式的相关理论,在数据结构与算法的教学中取得了初步的研究成果。“CDIO”是构思(Conceive)、设计(Design)、实施(Implement)、运行(Operate)4个英文单词的首字母缩写,它是“做中学”原则和“基于项目的教育学习”的集中体现,是当今国际高等工程教育的一种创新模式[2]。我们学院CDIO工程化的教学理念的具体践行方法如下。

1建设具备高水平工程化素质的教师队伍

注重教师自身工程素质的提高,使其能够胜任CDIO课程体系的教育模式[3]。完善与国内外著名企业开展师资培训与交流合作的机制,一方面选派专职教师到企业研修,丰富专业教师的工程实践经历和经验,获取最新的技术信息,保证学生学以致用。另一方面建设由企业高级工程技术人员组成的兼职教师队伍,解决教师队伍工程实践经验薄弱的问题,提高工程教育教师队伍的整体素质。

2以培养软件卓越工程师为目标

基于CDIO的理念,我院提出“基于校企合作"2+1+1"模式软件卓越工程师教育培养的研究与实践”。面向软件行业,面向未来软件工程的需求和对未来软件工程师的素质要求,培养造就一大批能够适应和支撑软件产业发展、实践能力强、创新能力强、具有追求卓越的精神和态度、具有国际竞争力的高质量软件卓越工程师,建立社会主义市场经济条件下的现代高等工程教育体系。

3以学以致用为导向

学院每门专业课程的设置都是为了更好地培养软件卓越工程师。软件行业素有更新快的特点,而数据结构与算法这门课程是未来软件工程师以不变应对日新月异软件技术的内功。在教学中强调课程的重要性,在学习每一部分内容前,首先明确学习目标,告诉学生在什么地方应用,让同学们带着目的、本着学以致用的原则来汲取知识,减少学生学习中存在的迷茫,切实提高学生分析和解决实际问题的能力。

4以案例为中心的教学

为了切实提高学生专业学习的兴趣和解决实际问题的能力,依据CDIO工程化模式提出的“做中学”和“以案例为导向”的教学方法,数据结构与算法课程本身具有抽象难于理解的特点,结合应用相应理论的有实际意义的案例进行教学,使学生能够有目标地学习和实践,更好地掌握、完善和运用理论知识。数据结构与算法相关知识点及案例设置如下表1所示。

5以实战平台为驱动力实践教学

鼓励学生参加软件编程竞赛,激发学生的强烈的求知欲和自我学习兴趣。通过各种级别的比赛,丰富了实践教学的形式,让学生可以有针对性地学习,提高了学生的参与性和主动性。我们鼓励学生参加校、省级ACM比赛、全国软件专业人才设计与开发大赛软件大赛和全国大学生ITAT程序设计大赛等比赛。通过这些实战比赛,有效地提高了学生的工程实践能力,取得了很好的效果。本院学生在过去的三年里,在相关比赛中已经取得非常优异的成绩。通过比赛获得证书的同学,编程能力会有超出常人的进步,增加了他们就业的砝码,大赛获奖同学现在有的在百度、腾讯、华为等大公司工作,很好地适应了工作环境。我们学院这两年也组织了两届ACM程序设计大赛,通过大赛向广大同学宣传了软件设计比赛和相关数据结构与算法的知识,提高了他们学习这门课程的热情,更好地走上软件卓越工程师之路。在实验教学环节中,除了安排综合案例的设计之外,我们也从竞赛的试题中选择适合学生设计的题目,提高他们解决实际问题的能力,有效地夯实了他们的基本功。

6提高软件工程专业素质

首先,我们注重培养学生良好的软件开发习惯。在相关数据结构与算法的实施过程中,要养成加注释、“见名知意”、代码的可读性等良好习惯。其次,注重软件工程思想的培养,很重要的一个思想就是“分而治之”,问题定义、功能划分、数据结构选取、算法设计、编码和测试基本解决软件设计问题的工程化思想要时刻牢记。同时,还要培养学生的团队意识,让大家懂得分享知识的重要性,课下相互讨论,弥补思路上的盲点。我们为学生建立了网上的QQ群,如软件学院ACMer、哈理工大学软件设计群等。这些平台的搭建使学生更好地交流,培养了他们与人沟通的能力。最后,最重要的一点就是激发学生主动获取知识的求知欲,最重要的是我们用CDIO教育理念和培养软件卓越工程为目标完成教学之后,学生痴迷于键盘和鼠标,真正获取了能够捕食的“渔”和“猎枪”———工程实践的能力。

三教学效果

变被动学习为主动学习,提高了学生的参与度和主动性,明确了学习动机,学习效率大幅度提高。学生在课堂上积极主动地思考,课下能够主动找老师提出自己的设计方案,同老师讨论案例问题的优化思路。能够在老师的指导下,参与到实战性的程序竞赛中,把学到的数据结构与算法的知识应用到其中。通过2009和2010级两届学生的培养,使他们夯实了成为软件卓越工程师的基本功,为后续专业方向课程(如:J2EE、NET、嵌入式、物联网等)的开设打下坚实的基础,学生们也可以更快地在掌握相关方向,设计出相应软件。在CDIO工程化的教育理念下,学生的主观创新能力得到充分提高。在创新实验设计中有的同学将案例“旅游信息导航系统”拓展为“智能旅游一站式服务系统”,拓展了目前软件的功能,有很好的应用前景。

参考文献

[1]金静,杨朝霞.现代教学模式与CDIO理念在数据结构课程中的实践[J].高等教育,2011(5):144-146.

数据结构与算法范文第4篇

关键词:算法;数据结构;程序设计竞赛;实践教学;改革

“算法与数据结构”是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课程,也是一门实践性很强的专业技术基础课。其在计算机学科的课程体系中起着承上启下的作用,它为操作系统、编译原理、数据库原理、软件工程等后续课程的学习打下基础,学好“算法与数据结构”对于提高学生的理论认知水平和实践能力有着极为重要的作用。

ACM国际大学生程序设计竞赛(ACM/ICPC:ACM Internation Collegiate Programming Contest)是由美国计算机协会(ACM: Assiciation for Computing Machinery)组织的年度性竞赛,开始于1970年,是全球大学生计算机程序能力竞赛活动中最有影响力的一项赛事。ACM/ICP竞赛涉及学科知识面广,有助于培养学生自主学习的能力、创新能力,也有利于团队精神的培养。参加此竞赛能使学生将“算法与数据结构”课程所学充分应用于竞赛中,将理论转化为实践,用实践验证及加强理论知识,二者相得益彰。

1面向问题求解的实践教学模式

“算法与数据结构”是一门理论性和实践性都很强的课程。在传统的课程教学过程中,存在着理论教学与实践运用的矛盾。由于该课程内容较抽象,不好讲解,若非精心准备,很难取得好的课堂教学效果。学生学完该课程后,普遍存在理论知识不扎实、编程实践能力差的现象。

近年来,针对传统教学存在的问题,不少学校都在进行该课程的教学改革[1-3],其中很重要的一个改革就是实践教学改革,提倡要加强实践环节的训练,在每个章节的理论教学后要求学生完成若干上机实验作业,以此达到提高学生实践能力,深化理论教学的目的。

我校从2005年起开展课程实践教学改革,构建面向问题求解的实践教学模式[4]。面向问题求解的实践教学模式主要包括以下几个方面:(1)面向实际问题,精心设计实践教学内容;(2)作业自动评测;(3)解题报告交流;(4)优秀作业评选。

通过以上多方面的改革,学生的实践能力也得到了较大的提高。

2结合程序设计竞赛的数据结构课程实践教学改革

针对近几年来我校学生对参与ACM/ICPC竞赛热情高涨,而且该竞赛所涉及的很多知识与“算法与数据结构”课程息息相关等因素,自2007年以来,课程教学组将程序设计竞赛与课程实践教学改革相结合,依托程序设计竞赛,进一步推进“算法与数据结构”课程实践教学改革。具体措施主要有以下几个方面:

2.1与竞赛题目描述形式相同的课程实验作业

我们借鉴程序设计竞赛题目规范、求解目标明确和背景描述有趣等特点,将“算法与数据结构”课程实验作业题目描述成程序设计竞赛题目的形式,这样便于学生明确问题求解的目标以及结果的表示形式,为自动评测做了准备。同时,采用竞赛题的描述方式也大大激发了学生解决问题的兴趣,提高了学生学习的积极性和主动性。

2.2离线和在线评测相结合的作业评测方式

先用离线评测系统测试学生提交的作业,测出每次作业的成绩,并在网站上公布评测结果,平时作业成绩将是期末成绩的重要组成部分。成绩公布后,开放程序设计竞赛所用的在线评测系统,作业成绩不理想的学生可再次改进自己的作业,并利用在线评测系统实时进行评测。

2.3竞赛形式的课程半期考

福州大学每年的程序设计竞赛举办的时间都在四月下旬,时值“算法与数据结构”课程教学进行至中期。鉴于程序设计竞赛所涉及知识与“算法与数据结构”课程密切相关,我们将此竞赛当成课程的半期考试,要求每一位修读“算法与数据结构”的学生都要参加。

竞赛形式的半期考有如下几个好处:(1)通过竞赛可以检验学生对“算法与数据结构”课程内容的掌握情况;(2)由于此竞赛是全校性的赛事,各专业的学生均可参加,作为科班出身的计算机专业学生若在竞赛中输给非计算机专业学生,那将是一件很不光彩的事情,因此竞赛形式的半期考将给修读“算法与数据结构”的学生带来无形的压力,这必将促使他们在平时投入更多时间去学习;(4)竞赛形式的半期考也让学生亲身感受到程序设计竞赛的氛围,从而激发学生参赛的兴趣,为我校ACM/ICPC集训队员的选拔奠定坚实的基础。

2.4开展“有奖月赛”活动

为了让学生在课堂之外能自觉加强对“算法与数据结构”课程的学习,进一步提高他们分析、解决问题的能力,我们在每月末开展一次“有奖月赛”活动。

“有奖月赛”的奖励只颁发给大一、大二的学生,以此来激励修读“算法与数据结构”的学生参加该项活动,提高自身动手实践能力。该活动至今已开展两年多,取得了显著的效果。

3实践教学改革的成效

3.1激发了学生的学习兴趣

竞赛题有趣的背景描述在很大程度上激发了学生的学习兴趣和主动性。如利用循环链表解决猴子选大王问题,利用栈帮助小鼠走出迷宫,利用Huffman算法设计文件解压缩软件和利用图的最短路径算法寻找换车次数最少的公交线路问题、套汇问题等。

3.2深化理论教学

“算法与数据结构”是一门理论性和实践性都很强的课程。结合程序设计竞赛的实践教学改革不仅大大提高了学生的动手实践能力,而且也在很大程度上使学生加深对课堂教学内容的理解,达到通过实践教学深化理论教学的目的。

3.3提高了学生分析和解决实际问题的能力

从近几年的改革实践来看,大部分学生经过“算法与数据结构”课程的学习与实践训练,已经具备在一定的时间内独立解决问题的能力,能够在规定的时间内选择合适的数据结构和算法设计策略,并在计算机上编程实现。我校计算机专业学生在各类与程序设计相关的学科竞赛中频获佳绩。我校ACM/ICPC代表队先后在ACM/ICPC亚洲区预赛中共获9个银奖和11个铜奖,且成功晋级第30届ACM/ICPC全球总决赛,并喜获第39名。

3.4为各类与程序设计相关的学科竞赛培养大量人才

经过本课程的实践教学改革,我院学生的动手实践能力得到极大的提高,涌现出了许多编程好手。近年来,我院学生除了组队参加ACM/ICPC竞赛,许多学生纷纷加入到诸如数学建模、电子设计、机器人大赛等各大学科竞赛小组中,并在历年的学科竞赛中均取得很好的成绩,为学校赢得了荣誉,这些荣誉的取得都与“算法与数据结构”课程的实践教学改革是分不开的。

5结语

结合程序设计竞赛的实践教学模式的实施深化了课堂理论改革,大大提高了学生的实践能力和人才培养质量。此教学模式先后在我校计算机专业近三年的“算法与数据结构”课程教学中得以实施,取得了显著的效果。

注:本文为“算法与数据结构”国家精品课程建设项目。

参考文献:

[1] 刘亚波,刘大有,高滢. 以实验教学深化“数据结构”理论教学[J]. 吉林大学学报:信息科学版,2005,23(8):135-137.

[2] 殷人昆,邓俊辉. 清华大学“数据结构”精品课程介绍[J]. 计算机教育,2006(5):20-22.

[3] 廖明宏,张岩,李秀坤,等. 哈尔滨工业大学“数据结构与算法”精品课程介绍[J]. 计算机教育,2006(5):17-19.

[4] 吴英杰,王一蕾,王晓东. 面向问题求解的实践教学模式――“算法与数据结构”实践教学改革[J]. 计算机教育,2007(4):29-31.

Deepening the Practice Teaching Innovation of the Algorithm and Data Structure

Combining with Programming Contest

WU Ying-jie, Wang Yi-lei, FU Yang-geng, WANG Xiao-dong

(College of Mathematics and Computer Science, Fuzhou University, Fuzhou 350108, China)

数据结构与算法范文第5篇

关键词:数据结构;
算法;
软件设计

【中图分类号】TP311.12-4;
G642

一、数据结构与算法概述

1.1数据结构

数据结构是一门研究数据的逻辑结构和存储结构(物理结构)以及它们之间的关系的学科,且为该结构定义相应的运算设计相应的算法。这里的数据是指可输入到计算机能被程序处理的符号的集合。其中,数据的逻辑结构是指数据之间逻辑关系的描述,逻辑结构的分类有线性结构、树形结构和图结构。数据的存储结构是指数据在计算机中存储结构,也称为物理结构,在程序设计语言中,数据结构直接反映在数据类型上,比如一个整型变量就是一个节点,根据类型给他分配内存单元。

1.2算法

1.2.1算法是由基本运算及规定的运算顺序所构成的完整的解题步骤。计算机算法与数据结构之间的关系,算法最终依附于数据结构,数据结构直接影响算法的选择和运行效率。运算是计算机完成的,这就要设计计算机在操作时对相的一些操作模式,如插入、删除和修改的算法。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。

1.2.2算法与数据结构研究的目的简单地说就是优化代码,提高程序执行效率。比如,把一堆无顺的数据通过一个算法实现顺序排列实现方法太多太多,但是也许运行速率最快的占用的存储空间很大也许运行速率不是很快的占用的存储空间却很小,所以要通过算法与数据结构分析。

二、数据机构经典算法的选择

选择经典算法的重要性,PASCAL语言的创始人、著名的计算机科学家N.沃思说得好“程序=数据结构+算法”,足以见得算法在程序设计中的重要地位。在合理的数据结构基础上,算法是对数据结构的操作(运算),是数据处理的核心。数据结构中所讲的基本数据结构有线性表、堆栈、队列、数组、树、二叉树、图以及相应的算法。一个算法是建立在某种数据结构的基础上,一个算法不可能脱离数据结构而孤立存在。只有通过分析算法,才能真正掌握某种数据结构。一个经典算法往往能起到以一当十、以点带面的关键作用。选择好经典算法后下一步就是要对其展开综合分析,下面以具体的算法为例进行讨论。

三、利用经典算法说明基本原理

3.1经典算法应能体现某个数据结构的基本特征

我们知道线性表顺序存储时其优点是能够对每个数据元素随机访问,存储密度高,其缺点是插入、删除操作时需要移动大量的数据元素,操作效率低。“向有序(由小到大或由大到小)的线性表(顺序存储)插入一个新的数据元素”,这一经典算法集中反映了线性表顺序存储的这些特点。

分析:将一个值为X的数据元素插入到有序(由小到大或由大到小)的线性表(顺序存储)中,可以分两步进行,首先查找到值为X的数据元素在线性表中应有的位置,采用从头到尾循环比较的方法确定其位置I,然后,将第I个以后的全部数据元素向后移动一个存储单元,最后将值为X的数据元素存放到第I个位置上,线性表元素个数增1。

【算法1】

PROCEDUREINSERT(V,m,n,X)

//将值为X的数据元素插入到V数组中,(线性表顺序存贮在V中)m为最多元素个数,n为当前实际元素个数IF(m=n)THEN{“OVERFLOW”;
RETURN}FORI=1TOnDO

IF(X〈V(I))THENBREAK

FORJ=nTOIBY-1DOV(J+1)=V(J)V(I)=X

n=n+1

RETURN

分析:【算法1】的优点是简单,便于理解,缺点是:①循环体内有提前退出语句,不利于结构化程序设计;
②确定新数据元素位置和移动数据元素分两步进行,有重复操作,可以改进之,将两步合并一步完成,即将循环比较与移动数据元素同时进行。从线性表的尾部开始向前循环比较,比新数据元素大者后移,直到小于等于时停止。

【算法2】

PROCEDUREINSERT(V,m,n,X)

IF(m=n)THEN{“OVERFLOW”;
RETURN}

I=n

WHILE(I〉=1)AND(V(I)〉X)DO{V(I+1)=V(I);
I=I-1}V(I+1)=X

n=n+1

RETURN

分析:注意【算法2】中循环条件,当循环结束后I=0或V(I)〈=X,新数据元素的位置为I+1,【算法1】的时间复杂度为0(2n),而【算法2】的时间复杂度为0(n),效率提高一倍。循环结构是结构化程序设计中最基本最核心的部分,归纳循环条件是关键。【算法2】能进一步推广。

3.2利用经典算法学习算法设计

经典算法能给学习者以启示、示范作用。分析:可以将【算法2】用于对线性表(顺序存储)排序算法中。在直接插入排序算法中,其算法思想是从第2个数据元素开始直到第n个数据元素,逐一插入到已有序的子线性表中。【算法3】

PROCEDURESORT(V,n)

FORI=2TOnDO

{Y=V(I)

J=I-1

WHILE(J〉=1)AND(V(J)〉Y)DO{V(J+1)=V(J);
J=J-1}V(J+1)=Y}

RETURN

分析:【算示3】其结构分为双重循环,外循环完成逐一取数据元素,即取第I个数据元素,内循环完成将第I个数据元素插入到前I-1个已有序的子线性表中。内循环完成的功能可以独立成为一个子函数(子过程),可以借用【算法2】。这正是结构化程序设计思想的体现,即主程序完成任务的划分,说明“做什么”,子函数(子过程)完成任务的具体实现,说明“如何做”。结构化程序设计方法采取“分解”的手段来控制系统的复杂性,将大系统划分为若干个相对独立的、功能单一的子模块。一方面子函数(子过程)可以实现软件的重用性,在不同的程序段有相同的处理过程时调用子函数(子过程),减少软件开发的工作量;
另一方面子函数(子过程)对具体的实现技术细节进行隐藏,便于开发人员集中精力把握软件开发的核心和主要问题,降低了软件开发难度,从而保证软件质量。

四、结束语

对于计算机科学来说,算法的概念至关重要。通俗的讲,算法是指解决问题的一种方法或一个过程,在众多的算法中选择好少量的经典算法对于研究数据结构以及解决实际问题至关重要。掌握好经典算法的原理和规律,将对计算机程序设计开发起到事半功倍的作用。

参考文献:

推荐访问:数据结构 算法 五篇 数据结构与算法【五篇】 数据结构与算法(精选5篇) 数据结构与算法简介