第一篇:算法设计与分析课程论文
“卓越工程师教育培养计划”(简称卓越计划)旨在培养一批创新能力强、适应经济社会发展需要的高质量工程技术人才。在南通大学计算机科学与技术学院制定的软件工程专业卓越工程师的培养计划中,算法设计与分析被设置为一门核心必修课程。通过该门课程的系统授课,重点培养学生的计算机问题求解能力,该能力是软件工程专业学生成长为卓越工程师必备的一项核心竞争力。一个典型的计算机问题的求解一般需要经历5个阶段:①问题的分析和建模;②算法设计方法和相应数据结构的选择;③算法的实现;④算法的正确性证明和复杂度分析;⑤算法实现的优化等。
经过多轮的教学实践发现,学生之间水平参差不齐是教学过程中面临的最大问题。随着高校招生规模的不断增大,不同学生之间在基础知识、智力水平、兴趣爱好、学习动机和学习方法上存在较大的差异性。相同的教学内容,对于一些基础较好的学生来说理解难度不大,但对于一些基础较弱的学生来说,则难以理解。因此,如何尊重学生个性差异、发展学生个性特长,在考虑学生整体发展的同时兼顾学生的个性特长发展,从而最终提高各个层次学生的综合素质是算法设计与分析课程的教学改革实践中需要重点关注的问题。
通过多次与学生的深入交流发现,学生在这门课程的学习过程中面临如下问题:
1)课程教学内容难度高。课程需要学生掌握常见的算法设计策略,如分治法、动态规划法和贪婪法等,对设计出的算法能进行正确性证明和复杂度分析。很多知识点抽象层次高,需要学生具备一定的数学分析能力,同时,通常算法内部逻辑比较复杂,因此需要学生具备较强的编程功底。笔者在讲授这些知识点时,均假设学生具备一定的数学分析能力和编程基础,但实际情况却不容乐观,很多学生在大一和大二的时候并未重视相关课程的学习,很多知识点都已经还给授课老师,在课堂上需要花费一定时间帮助学生回忆这些知识点。同时,部分学生因编程经验较为匾乏,难以顺利地将伪代码转化成可运行的程序代码。
2)学生问题求解能力弱。为辅助学生对知识点的理解,授课老师一般在实例选择时均采用一些经典实例,例如归并排序、最小生成树等。这些问题在一些预修课程(例如高级程序设计语言或数据结构)中均进行过讲解,因此理解起来难度不大。但是,学生在上机实践时,面对老师布置的新问题,却很难将学到的知识进行灵活运用,难以选择合理的算法设计策略,并借助熟悉的高级编程语言去解决。
3)学生自主学习意识薄弱。该门课程本身课时较少(仅有犯学时),其中8学时为上机实践,在剩余的24学时内,仅能讲授基本的算法设计与分析策略。学生即使了解常见的算法设计与分析方法,但现实生活中问题千变万化,更需要学生灵活使用学到的知识。因此,要提高学习效果和实践能力,需要学生在课外花费更多时间,阅读相关资料和进行大量编码。但是,授课过程中发现,真正能够完成自主学习的学生并不多。一方面,很多学生长期受应试教育的影响,习惯于填鸭式的教学模式,同时,学习时具有较强的功利性,很多学生普遍有应付考试和及格万岁的思想,有的学生甚至为了应付老师的作业检查,大量抄袭作业,仅做一些表面上的修改来敷衍了事。另一方面,即使有少量同学对新知识比较好奇,愿意自己去积极探索,但在选择相关经典资料时经验不足、效率较低,因此,需要有经验的老师进行有效引导。
目前高校很多教室都配有多媒体设备,造成大部分专业课程均采用多媒体课件方式进行授课。多媒体课件虽然具有丰富的表现力、良好的交互性和较高的共享性,但与其他核心专业课程相比,算法设计与分析课程的理论程度更高,数学推导较多,因此笔者认为,采用板书为主的教学方式可能会效果更好。为验证该推测,对Leiserson教授和Demaine教授开设的麻省理工学院公开课的在线视频进行分析,发现他们在授课时,绝大部分教学内容均采用板书方式进行讲解,通过在黑板上一步一步地推导,在一些关键节点上与学生充分交互,使得学生可以更好地掌握算法设计与分析过程中的一些重要技巧。笔者在实际教学中通过精心设计板书,取得了较好的课堂效果。
综上所述,在学生水平参差不齐的情况下,针对算法课程教学中存在的问题,提出了一系列教学改革措施以提高不同层次学生的计算机问题求解能力。其中将教学问题与教学改革措施的对应关系,以及教学改革措施与不同层次学生的对应关系进行总结。而且具备良好的交叉学科基础和文化底蕴,能培养出满足市场需要的复合型人才。
如何使相关专业的教育教学满足将来ICT产业的发展是个相当复杂的问题,希望笔者提出的一些改进措施能对信息科学相关专业的工程教育具有参考意义,并对其他领域也有借鉴之处。
第二篇:算法设计与分析课程的心得体会
《算法设计与分析》课程的心得体会
以最少的成本、最快的速度、最好的质量开发出合适各种各样应用需求的软件,必须遵循软件工程的原则,设计出高效率的程序。一个高效的程序不仅需要编程技巧,更需要合理的数据组织和清晰高效的算法。这正是计算机科学领域里数据结构与算法设计所研究的主要内容。一些著名的计算机科学家认为,算法是一种创造性思维活动,并且处于计算机科学与技术学科的核心。
在计算机软件专业中算法分析与设计是一门非常重要的课程,很多人为它如痴如醉。很多问题的解决,程序的编写都要依赖它,在软件还是面向过程的阶段,就有程序=算法 数据结构这个公式。算法的学习对于培养一个人的逻辑思维能力是有极大帮助的,它可以培养我们养成思考分析问题,解决问题的能力。
如果一个算法有缺陷,或不适合某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂性和时间复杂度来衡量。算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。
计算机系统中的操作系统、语言编译系统、数据库管理系统以及各种各样的计算机应用系统中的软件,都必须使用具体的算法来实现。
算法设计与分析是计算机科学与技术的一个核心问题。因此,学习算法无疑会增强自己的竞争力,提高自己的修为,为自己增彩。
那么,什么是算法呢?算法是指解决问题的方法或过程。算法满足四个性质,即输入、输出、确定性和有限性。为了了解算法,这个学期马老师带我们走进了算法的世界。
马老师这学期提出不少实际的问题,以及解决问题的算法。我在此只说比较记忆深刻的问题,即0-1背包的问题。
0-1背包问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。
首先,0-1背包问题具有最优子结构性质和子问题重叠性质,适于采用动态规划方法求解。动态规划算法与分治法类似,其基本思想是将待求解问题分解成若干个子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的,若用分治法解这类问题,则分解得到的子问题数目太多,以至于最后解决原问题需要耗费过多的时间。动态规划法又和贪婪算法有些一样,在动态规划中,可将一个问题的解决方案视为一系列决策的结果。不同的是,在贪婪算法中,每采用一次贪婪准则便做出一个不可撤回的决策,而在动态规划中,还要考察每个最优决策序列中是否包含一个最优子序列。
用动态规划法解决问题的思路如下:
最优决策序列由最优决策子序列组成。假设f(i,y)表示剩余容量为y,剩余物品为i, i 1, „, n时的最优解的值,即:
f(n,y)= Pn,if y≥Wn f(n,y)= 0, if 0≤y≤Wn 和
f(i,y)=max(f(i 1,y),f(i 1,y-Wi) Pi)y≥Wi f(i,y)=f(i 1,y)0≤y≤Wi 这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的,所以有必要将它详细解释一下:“将前i件物品放入容量为y的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为y的背包中”,价值为f[i-1][y];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为y-Wi的背包中”,此时能获得的最大价值就是f[i-1][y-Wi]再加上通过放入第i件物品获得的价值Pi。
用贪心算法解决问题的基本思路如下:
由所有解元素组合成问题的一个可行解;从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。
实现该算法的过程: 从问题的某一初始解出发;while 能朝给定总目标前进一步do求出可行解的一个解元素;
该算法存在问题:首先不能保证求得的最后解是最佳的;其次不能用来求最大或最小解问题,并且只能求满足某些约束条件的可行解的范围。
回溯法是一个既带有系统性又带有跳跃性的的搜索算法。所以0-1背包问题也可以用回溯法解决。其基本思路是可先将物品依其单位重量价值从大到小排序,此后只要顺序考察各物品即可,这是为了便于计算上界。在实现时,由bound计算当前结点处的上界。在搜索解空间树时,只要其左儿子节点是一个可行结点,搜索就进入左子树,在右子树中有可能包含最优解是才进入右子树搜索。否则将右子树剪去。
当然0-1背包问题还有许多的解决方案,此处就不一一列出。不过通过0-1背包问题,我深刻体会到算法的魅力,体会到同一个问题用不同的方法解决的妙处。学无止境,《算法设计与分析》仅仅是我学习算法知识入门课,我不会停下脚步,在此之后我依然会努力学习算法知识。
第三篇:“算法设计与分析”课程教学方法探究(精选)
“算法设计与分析”课程教学方法探究
摘要:该文分析了算法设计与分析课程教学和学生学习时存在的问题,根据近几年积累的教学经验,提出了一些教学方法的建议,如互动式教学,板书和多媒体相结合,重视上机练习以及考核方式的改革。
关键词:计算机;算法设计与分析;教学方法
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2022)08-0102-02
21世纪以来,计算机的普及极大地改变了人们的生活。目前,各行业、各领域都广泛采用了计算机信息技术,并由此产生出设计并开发各种应用软件的需求。为了以最小的成本、最快的速度、最好的质量开发出应用软件,就必须掌握并能设计出高效的算法。算法分析与设计是一门理论性与实践性兼顾的课程,是计算机科学与技术专业的一门很重要的专业课,该课程在整个教学体系中占有非常重要的地位。通过对计算机算法系统的学习与研究,理解和掌握算法设计的主要方法,培养对算法的计算复杂性进行正确分析的能力,为独立地设计算法和对给定算法进行复杂性分析奠定坚实的理论基础[1]。
该课程不像其他记忆性的课程,它重在理解并能应用到实际中,是一门集应用性、实践性及创新性为一体的综合性课程。再加上这门课程相对枯燥、难度大,因此,对于很多教师来说,要想上好这门课程,成了一个很大的挑战。该课程要求教师要有扎实的数学和数据结构理论基础,还要有编程和科研经历,还要结合本课程的特点,采用适当的教学方法,才能使得学生把枯燥,难学的算法真正学会,并应用到以后的开发实践中。
本文根据笔者的教学经验,总结了一些教学方法,包括互动式教学,板书和多媒体相结合以及考核方式的改革等。算法课程教学及学生学习存在的问题
现在,算法设计与分析课程在教学和学生学习方面都存在着问题,经过分析总结如下:
1)该课程难度较大:算法设计与分析课程中介绍的都是数学或计算机专业领域的经典算法,例如动态规划和分支限界法。单纯的算法思想比较抽象,课程本身难度较大,容易使学生对该门课程产生恐惧心理。
2)学生不感兴趣:现在大多数学生功利性比较强,学习一门课程时,希望它马上就能应用到实际中。比如学习了静态网页设计就可以做网站,学习了asp、jsp等动态网页设计就可以开发系统。学会了开发网站和系统,就可以找到工作。所以学生对这些课程很感兴趣。刚才提到的课程都是立竿见影,学完后都知道最终的目的,而算法设计与分析课程则不同。算法设计与分析课程属于高层次的课程,各种编程语言是它的先修课程。没有编程基础,没有开发经验,谈论算法就相当于纸上谈兵。因此,学生学习算法设计与分析课程时,他们感觉不能立即用上,甚至觉得与以后找工作没有太大关系。这种心理导致学生对该课程不感兴趣,紧紧抱着混学分的思想去学习,给教师授课带来了很大的困难。
3)考核方式不太合理:目前,在大多数高校中针对算法设计与分析课程采用的考核方式和其他课程一样,总成绩=试卷成绩*70% 平时成绩*30%。这里的平时成绩包括作业,考勤和课堂表现。这种考核方式只能反映出学生对理论知识的掌握程度,但无法考核出学生对知识的真正应用能力。采用这种传统的考核方式检验学生是否能把算法思想应用到编程中,无法学以致用。
2教学方法探讨
近年来,本人一直教授该门课程,现将自己教学过程中摸索的教学经验以及教学改革建议进行总结,希望能对广大教师有所帮助。
2.1互动式教学
讲授算法课程过程中,由于该门课程具有很强的逻辑性和抽象性,并且要求有较好的数学基础,很容易形成教师向学生的单向传输教学。这种情况下,课堂教学枯燥无味,学生没有兴趣去思考和回答教师的问题,以至于形成课堂气氛死气沉沉,教师自问自答的局面。
在讲课过程中,教师应时刻注意和学生的互动。互动式教学可以变传统教学中的单向传输式教学为双向互动式,这样可以提高学生学习该门课程的兴趣。兴趣是最好的老师,只有学生产生了兴趣,才能更好的掌握算法知识并应用到实际中。
教师实现互动式教学的方法有很多种,比如可以通过提问的方式。这就要求教师在备课时下功夫,而不是简单的备课本上的知识点,而是吃透每一个知识点,然后在相应的知识点上为学生设置相应的思考方向,提出问题,充分调动学生的积极性,让学生参与到课堂中来。同时,学生也会在枯燥的理论知识中寻找到乐趣。
2.2传统的板书教学和多媒体教学相结合,齐头并进
目前大多数高校计算机类的课程基本都使用多媒体进行教学。传统的黑板教学和多媒体教学各有利弊,我们应根据教学内容的需要,扬长避短,选择适当的教学手段,而不是因多媒体的方便性,将单纯的将黑板教学摒弃。在讲解算法课程过程中,更是需要两者的结合,才能收到良好的课堂教学效果。
采用多媒体教学的好处是可以加大课堂信息量,使得讲课更加形象生动。在讲解算法课程第2章中的插入排序,选择排序,归并排序时,就可以采用多媒体教学中视频教学。三种排序算法很抽象,单纯的靠讲述加上板书教学,学生很难掌握三种排序的算法思想,并且容易混淆。本人在讲解该部分内容时,从网上找到了真人以民族舞蹈形式来表现各种计算机排序算法的工作原理的视频。首先口头介绍某种排序的算法思想,然后在学生对此排序有初步了解的基础上,让其观看相应的视频,使得学生在轻松快乐的氛围中掌握了排序算法,收到了很好的教学效果。
有些情况下,掌握某些经典算法的核心思想需要教师采用传统的黑板教学,一步一步带着学生去推导,最终得到答案。如果此时采用ppt课件进行教学,就会加快讲课的进度,向下翻一页可能答案就会直接出来,没有给学生充分多的思考时间,没有在学生脑中留下深刻的印象。比如讲解棋盘覆盖问题时(如图1,图2),如果采用板书教学,一步一步去演示覆盖的过程,学生的思路经历了从有到无的过程,在循序渐进中掌握了知识。整个推导过程学生如同细细咀嚼了一个苹果,不仅尝到了味道,也吸收了营养。
2.3 重视上机练习
教室课堂上,教师向学生讲授的是算法的基本思想。算法仅仅靠掌握理论知识是不够的,必须把它应用到编程中,才能真正去领会算法的思想和灵魂。脱离计算机和编程去谈论算法就如同纸上谈兵,是不切实际的。
在教学过程中,教师至少应把1/3的课程分给上机实验课,只有给学生充足的上机时间,才可以将算法的思想应到实际中。当然,作为教师必须努力找一些难度合适的题目,让学生在实验课上完成,将教室课堂上学的理论知识有所应用。通过上机实际操练,促进学生真正掌握算法的精髓。
2.4考核方式改革
本文前面已经分析过现在算法课程大多数学校采用的是以纸质试卷为主的考核方式算作期末成绩,其实这种考核方式和课程的性质是互相矛盾的。算法课程是理论和实践都很重要的一门课程,传统的考核方式只能考查学生对理论知识的掌握程度。
本人对算法课程采用如下考核方式:
除常规期末试卷成绩外,实验成绩占的比例为40%,加大了实验成绩所占的比例。这样可以增强学生对实验上机课的重视程度,上机实验时,学生会比较认真,有助于他们能将算法的思想应用编程中,培养学生的动手和实践能力。
3总结
笔者结合近几年的课堂教学情况,分析了算法课程教学存在的问题,并针对这些问题提出了一些教学方法。当然这些方法还需要进一步的完善,进而使算法课程的教学质量能得到很大的提高。
参考文献:
[1] 李涵.“算法分析与设计”课程改革和实践[J].中国电力教育,2022(16):74-75.[2] 王晓东.计算机算法设计与分析[M].北京:电子工业出版社,2022.[3] 刘波“.算法设计与分析”教学探讨[J].高等理科教育,2022(4):78-80.[4] 余祥宣,崔国华,邹海明.计算机算法基础[M].武汉:华中科技大学出版社,2022.[5]马健.启发式教学法在课堂教学中的应用[J].中国电子教育,2022(3):68-71.
第四篇:数据结构与算法课程论文
数据结构与算法课程小论文
10计本一班 王晓龙 1004011026 一. 内容概要:
如何合理地组织数据、高效地处理数据是扩大计算机领域、提高软件效率的关键。在软件开发过程中要求“高效地”组织数据和设计“好的”算法,并使算法用程序来实现,通过调试而成为软件,必须具备数据结构领域和算法设计领域的专门知识。
本课程主要学习在软件开发中涉及到的各种常用数据结构及其常用的算法,在此基础上,学习如何利用数据结构和算法解决一些基本的应用问题。通过数据结构的逻辑结构、存储结构、基本算法和相关应用问题来介绍其基本知识和应用知识。
二. 关键字:
数据结构:数据的逻辑结构、数据的存储结构、基本算法;算法分析
三. 课程主要内容和基本原理:
A.数据结构:
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。
(1).分类:
数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、图状结构(网状结构)。树形结构和图形结构全称为非线性结构。集合结构中的数据元素除了同属于一种类型外,别无其它关系。线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。在图形结构中每个结点的前驱结点数和后续结点数可以任意多个。
数据结构在计算机中的表示(映像)称为数据的物理(存储)结构。它包括数据元素的表示和关系的表示。数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示称为顺序存储结构。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型来实现。索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
数据结构中,逻辑上(逻辑结构:数据元素之间的逻辑关系)可以把数据结构分成线性结构和非线性结构。线性结构的顺序存储结构是一种随机存取的存储结构,线性表的链式存储结构是一种顺序存取的存储结构。线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数都无关。(2).四类基本结构:
⑴集合结构。该结构的数据元素间的关系是“属于同一个集合”。⑵线性结构。该结构的数据元素之间存在着一对一的关系。⑶树型结构。该结构的数据元素之间存在着一对多的关系。
⑷图形结构。该结构的数据元素之间存在着多对多的关系,也称网状结构。从上面所介绍的数据结构的概念中可以知道,一个数据结构有两个要素。一个是数据元素的集合,另一个是关系的集合。在形式上,数据结构通常可以采用一个二元组来表示。
(3).常用的数据结构:
a.数组: 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。b.栈:
是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。c.队列:
一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。d.链表:
是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。e.树:
是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足以下条件:
(1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
(3)K中各结点,对关系N来说可以有m个后继(m>=0)。f.图:
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。g.堆: 在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。h.散列表:
若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。B.算法分析:
算法分析是对一个算法需要多少计算时间和存储空间作定量的分析。算法是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中,算法要用计算机算法语言描述,算法代表用计算机解一类问题的精确、有效的方法。算法 数据结构=程序,求解一个给定的可计算或可解的问题,不同的人可以编写出不同的程序,来解决同一个问题,这里存在两个问题:一是与计算方法密切相关的算法问题;二是程序设计的技术问题。算法和程序之间存在密切的关系。分析算法可以预测这一算法适合在什么样的环境中有效地运行,对解决同一问题的不同算法的有效性作出比较。
四.心得体会:
在做完这次课程论文后,让我再次加深了对数据结构与算法的理解,对数据结构的构建也有更深层次的体会。算法的每一次改进和提高,都凝聚着人类的智慧和辛勤劳动,每一次创新都给人类带来了巨大的进步。数据结构与先进的算法能够合理地组织数据、高效地处理数据,扩大计算机的应用领域,提高软件的效率。这充分体现了其重要意义。
五. 参考文献:
数据结构与算法王昆仑,李红
第五篇:“算法设计与分析”课程教学大纲与教学规程
“算法设计与分析”课程教学大纲和教学规程
1.课程基本信息
课程编号:
课程名称(中文):算法设计与分析
课程名称(英文):The design and analysis of algorithms 开课学期: 见培养方案与教学计划 课程类别: 专业基础课程
课程学时数与学分: 56学时(4学分,不含实验课时,4学时/周)
实验学时数与学分: 28学时(学分计算并入计算机科学实验课程,4学时/次/周)先修课程: 高等数学或数学分析,线性代数或高等代数,概率论与数理统计,离散数学,高级语言程序设计,数据结构
教学形式: 课堂讲授 课外教学 实验教学(实验课程实行单列)使用教材:
张德富,算法设计与分析,国防工业出版社,2022,8。教学参考书:
[1] T.H.Cormen, C.E.Leiserson, R.L.Rivest and C.Stein, Introduction to Algorithms(the second edition),The MIT Press,2022 该书国内已引进,见《算法导论(第二版)》(影印版,中文本),高等教育出版社,2022 [2] M.H.Alsuwaiyel,Algorithms Design Techniques and Analysis,World Scientific Publishing Company,1998 M.H.Alsuwaiyel,吴伟昶 等译,《算法设计技巧与分析》(中文版),电子工业出版社,2022 [3] Sartaj Sahni著,汪诗林等译,《数据结构、算法与应用--C 语言描述》,机械工业出版社,2022 [4] 王晓东编著,《计算机算法设计与分析》,电子工业出版社,2022 [5] Gilles Brassard, Paul Bratley.《FUNDAMENTALS OF ALGORITHMICS》(算法基础),清华大学出版社,2022 注:[1]和[2]两本书为主要教学参考书。
大纲制定者: 张德富、赵致琢、苏 畅(厦门大学计算机科学系)大纲审定者: 赵致琢(厦门大学计算机科学系)
2.课程性质、类别与任务
“算法设计与分析”是计算机科学与技术专业一门重点专业基础课程,也是学科核心专业基础课程之一,属于必修课程。本课程主要介绍算法的基础知识,包括抽象计算模型、算法基本概念、算法复杂性分析基础、算法设计的基本方法、以及算法复杂性理论基础。通过本课程的学习,要求学生理解并熟练掌握:了解可支持算法运行的抽象机器计算模型,算法的定义和复杂性概念,算法设计的基本技术方法,包括递归与分治法、贪心法、动态规划方法、回溯法、分支限界法以及高级图论算法等,理解并掌握算法复杂性的分析方法、NP完全性理论基础等计算复杂性的基本知识以及完全性证明概要。通过教学和实践,培养学生运用数学工具和方法分析问题和从算法的角度运用数学工具解决问题的基本能力,培养学生设计算法和分析算法复杂性的基本能力,训练学生的逻辑思维能力和想象力,从而使他们能够正确地分析和评价一个算法,进一步设计出真正有效或更有效的算法,并使之了解算法理论的基础知识和发展概况。在教学中,鼓励学生运用算法知识解决各个学科的实际计算问题,培养学生初步的独立开展科研工作的能力和理论联系实践,解决实际问题的能力,同时,为后续课程以及将来的研究工作提供必要的算法设计与分析的基础。
此外,配合实验课程的教学,学生应理论联系实际,理论指导实践,通过规范地完成一系列算法设计实验进一步巩固所学的相关书本知识,在知识、能力、素质上得到进一步的提高。
3.课程教学的基本要求(教学内容和教学重点)
“算法设计与分析”内容的重点是各种常用的算法设计方法和复杂性分析方法,包括递归与分治法、贪心法、动态规划方法、回溯法、分支限界法,以及高级图论算法、时空复杂性的分析方法、NP完全性理论基础。课程教学的基本要求是通过教学活动,使每一个学生较好地掌握课程的主要内容,同时具备对实际问题应用所学知识设计出有效算法并编程实现这些算法的能力。课程的教学内容主要包括如下知识点,其中,属于重点的内容用黑体标示,今后教学改革拟增加的内容用“{„„}”标示,部分非重要内容用括弧标注为“一般了解”: 基本概念:问题;抽象计算模型;算法的概念;算法正确性;算法效率;问题下界 算法的评估:时间复杂性和空间复杂性分析;算法的最优、最差和平均效率;渐近复杂性符号和基本效率类型;非递归算法的数学分析;{概率分析(一般了解);分摊分析(一般了解);算法的经验分析;算法可视计算方法}; 递归:递归设计;递归算法转非递归算法;递归算法的设计实例;递归算法的数学分析,{三种求解递归方程的方法};
分治法:分治法的基本思想;分治法设计的特点;分治法的时间复杂性;分治法的应用(大整数乘法和Strassen矩阵乘法;棋盘覆盖); 基本的排序算法及其复杂性分析:插入排序;堆排序;快速排序;排序算法复杂度分析及其比较(此处的教学重点在于算法分析,透过算法分析从中深入了解算法的特性,进一步揭示设计更为有效的算法的思路和途径); 动态规划方法:动态规划的基本要素(含最优性原理);矩阵连乘问题;0/1背包问题;装配线的调度问题;最长公共子序列;
贪心算法:贪心算法的基本要素;背包问题;哈夫曼编码;活动选择问题;{贪心算法的理论基础(一般了解)};
回溯法:回溯法的基本思想;装载问题;0/1背包问题;旅行商问题;批处理的作业调度问题;n皇后问题;子集合问题;回溯法的效率分析;
分支限界法(分支定界法):分支限界算法的基本思想;装载问题;0/1背包问题;旅行商问题;批处理的作业调度问题;分支限界法的效率分析;
网络与高级图论算法:最短路径问题(Prim算法;Kruskal算法;Dijkstra算法;Warshall算法和Floyd算法);最大流问题(Ford-Fulkerson标号算法等);最小费用最大流问题(最小费用算法等);{匹配问题及其求解算法}; 问题的复杂性:NP完全性理论基础(P类与NP类问题,NP完全性问题及其归约;NP完全性证明;典型的NP完全问题);{ 如何求算法复杂性的下界(一般了解)}。
4.关于教学目标、教学内容的建议和教学过程中应该注意的事项
算法设计与分析是计算机科学的核心问题之一。由于计算机科学与技术的大多数研究都与算法紧密相关,因此,高起点的算法理论基础逐步成为了高素质计算机科学与技术专门人才应该具备的必要的理论修养。设计算法的目的是要解决大量实际问题,对于较复杂的问题要求能设计出有效的算法。大量的研究实践表明,一个问题求解质量和效率的高低,主要取决于算法设计的质量。因此,算法设计与分析的重点是掌握算法的概念和基础理论,运用数学工具分析问题,从计算方法的角度如何给出非数值计算问题的计算方法、采用算法设计的常用方法设计算法,掌握分析和估计算法复杂性的方法,并特别注意以下几点:
第一,在介绍算法的基本概念时,应该着重介绍计算模型、算法的概念、考察算法的角度和算法评估的标准、复杂性分析的方法以及算法研究的目标与实际问题的关系;
第二,在介绍一些数据结构已经学习过的排序算法时,不应过多强调算法设计,而应该重点结合算法分析技术,用分析的方法评价算法的优劣,从分析结果得到设计更优算法的启示。在介绍高级的数据结构时,重点应放在对数据结构的复杂性分析上;
第三,在介绍算法设计的基本方法(例如分治法、贪心法、动态规划方法、回溯法与分支限界法)时,应该通过对大量经典问题的算法设计与分析,使学生逐渐掌握算法设计与分析的技巧,并特别注意各种算法的比较分析。例如,递归与分治、贪心与动态规划、回溯与分支限界;
第四,在介绍NP完全性理论时,应该着重从问题的分类以及各类问题的性质、相互关系入手进行研究,揭示问题的本质,从而为算法的设计提供方法指导。另外,应该着重掌握问题的转化及NP完全性理论的有关证明思想;
第五,在介绍线性规划问题及其相应算法时,应该着重介绍该算法的应用;
第六,鼓励教师将自己的研究或最新算法设计与分析的思想,结合到教学过程之中,鼓励和帮助学生运用所学的知识去解决实际问题,掌握理论与实践相结合的思想方法。第七,鼓励教师结合学科范型(也称范式),将学科方法论的内容融入教学过程之中(对教师暂不作基本要求),以帮助学生建立与“算法设计与分析”课程内容相关的科学的思想方法。
5.课外教学要求
本课程的课外教学内容和形式主要由学生阅读经典教材,任课教师辅导、答疑、批改作业、实践环节等几部分构成。本课程要求学生在有时间的情况下,尽可能完成教材中所有的习题。学生应在任课教师的帮助下,认真听课,反复思考,大量完成作业,在学习中反复进行阅读、思考、做习题,通过阅读、思考、做习题、分析、联想、概括、归纳、总结等多种有效的方式方法,比较全面、准确地掌握课程的主要内容和教学重点。
任课教师(包括助教)每周安排1次辅导、答疑,每次2小时。每次辅导、答疑至少应有一位教师参加,一般不得合并执行。主讲教师应批改全班学生作业量的5%,参加辅导、答疑的次数不少于总次数的1/5,以掌握教学的效果,调控教学进度。
课程对学生作业的质量要求是:正确、简洁、规范。
要求做题正确,意味着学生必须掌握基本概念、基本原理、基本方法、基本技术等课程的基本知识,基本知识不掌握,就很难正确解答问题,这是对学生知识水平和解决问题能力的考核。要求做题简洁和规范,意味着在正确解题的情况下,不应该存在“拖泥带水”和“东拉西扯”的问题,书面表达简练、规范,与教材中例题求解的表述基本一致。这些,正反映出学生在这方面训练有素,这是对学生素质的考核。
6.课程的实验教学
实验课程将安排一些有代表性的上机实验单元与本课程相呼应,目的是通过实验让学生体会理论与实践高度统一的学科特点,进一步认识理论、抽象、算法设计等三个过程及其相互关系,形成对学科范型更深入的体会和认识。它要求学生从分析问题出发,利用所学的算法设计技术去解决某一实际问题。通过实验工作,借助程序设计语言,掌握运用数据结构、算法和程序解决一些实际问题的方法。
学生应按照理论联系实际,理论指导实践的要求,在实际操作中规范地完成各项实验。通过实验工作,借助程序设计语言,设计并实现算法,进一步掌握运用数学工具,分析问题,提出求解方法,设计算法,分析算法的复杂性,对算法进行科学的评价等方面得到严格的训练。
实验教学按照实验单元进行,一个实验单元完成后或相近内容的一组实验单元完成后,每一个学生要撰写和提交实验报告。任课教师应依据每一个学生的实验报告和完成实验的情况,在学期结束时给出学生该门课程的学术评语和成绩,并与四个学年所有实验课程评语一起,最终产生对学生的实践能力作出综合评定的学术评语与成绩。学术评语应着重从发展的眼光和视角,考察学生是否能够理论联系实际,理论指导实践,按照实验课程的教学要求,规范地完成实验单元,较好或基本掌握了实验教学的内容。
在实验课程单列之前,课程的实践环节拟安排28学时(实际执行7次共7*4=28学时),教学内容由大纲确定,实验课程单列之后,实验考核成绩单独计算,不计入课程考核成绩。各实验单元和内容如下:
实验单元一:用贪心法求解一个具体问题的实验(程序实现); 实验单元二:用动态规划方法求解一个具体问题的实验(程序实现); 实验单元二:用回溯法求解一个具体问题的实验(程序实现); 实验单元四:用分支限界法求解一个具体问题的实验(程序实现); 实验单元五:用高级图论算法求解一个具体问题的实验(程序实现)。
上述五个实验完成后,每个学生应提交二个实验报告。前三个实验完成后提交一个实验报告,后两个实验完成后,提交一个实验报告。
7.考核的方式方法
课程结束考核方式: 闭卷考试 课堂考试时间: 3小时(180分钟)
考试命题: 任课教师命题,教研室分管该课程的负责人和分管教学的系副主任审题; 课程考试的命题内容要从大纲的要求出发,围绕本课程的教学内容、知识点和教学要求,着重从知识、能力、素质三个方面对学生进行全面的考核,重点考核学生运用知识解决问题的能力,同时考察学生的综合素质。考核范围为除了最后一周教学的内容外,其他大纲确定的知识点都在考试范围之内,课程考试的试卷命题范围不得免除期中考试已经考过的内容。试卷中不少于85%的内容应来自课程重点内容的范围,不少于10%的内容应来自课程非重点内容的范围,要求学生全面复习,以达到系统掌握,全面考核的目的。试卷的题型要力戒避免文科标准化试卷的题型,避免出现简单概念问答题和简答题。试卷题目数量一般为5、6、7题,以优秀学生在全部会做的情况下正常书写速度能够在120分钟内完成为宜。试卷题目数量的减少与全面考核的目的并不矛盾。由于考核的范围是明确的,只要教师不透露题型和范围,学生就必须全面复习,这样,即使题目不覆盖某些教学内容,也不会影响实际的教学效果。
随堂监考授权: 主讲教师和助教
期中考试: 由任课教师决定是否安排期中考试,主要用于检查教学情况。最后成绩计算办法: 期终考试成绩80% 平时成绩20%