算法设计与实现个人课程总结

时间:2019-05-11 23:26:48下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《算法设计与实现个人课程总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《算法设计与实现个人课程总结》。

第一篇:算法设计与实现个人课程总结

算法课程总结

指导教师 所在院(系)班 级 学生姓名 学 号

一、算法概述

1.什么是算法?

算法是解一确定类问题的任意一种特殊的方法。在计算机科学中,算法是使用计算机解一类问题的精确、有效方法的代名词。算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。

2.算法的五个重要特性:确定性、能行性、输入、输出、有穷性/有限性。

1)确定性:算法每种运算必须有确切定义,不能有二义性。

2)能行性:算法中有待实现的运算都是基本的运算,原理上每种运算都能由人用纸和笔在有限的时间内完成。

3)输入:每个算法有0个或多个输入。这些输入是在算法开始之前给出的量,取自于特定的对象集合——定义域

4)输出:一个算法产生一个或多个输出,这些输出是同输入有某种特定关系的量。

5)有穷性/有限性:一个算法总是在执行了有穷步的运算之后终止。

3.计算过程:只满足确定性、能行性、输入、输出四个特性但不一定能终止的一组规则。

4.准确理解算法和计算过程的区别:不能终止的计算过程:操作系统;算法是“可以终止的计算过程”;算法的时效性:只能把在相当有穷步内终止的算法投入到计算机上运行。

5.算法的语言主要有:自然语言,流程图,盒图,PAD图,伪代码,计算机程序设计语言。6.算法分类:

1)多项式时间算法:可用多项式(函数)对其计算时间限界的算法。常见的多项式限界函数有:Ο(1)< Ο(logn)< Ο(n)< Ο(nlogn)< Ο(n2)< Ο(n3)2)指数时间算法:计算时间用指数函数限界的算法。常见的指数时间限界函数:Ο(2n)< Ο(n!)< Ο(nn)7.算法基本工具:循环与递归,算法与数据结构,优化算法的数学模型。

8.主要算法:迭代算法,蛮力法,分治法,动态规划法,贪婪算法,图搜索基础。

二、算法的核心是思想

我们学习这门课不是仅仅掌握那几个经典算法例子,更重要的是为了学习蕴含在其中的思想方法。为什么呢?举个例子。有同学曾问我这样一个问题:1000只瓶子装满水,但有一瓶有毒,且毒发期为1个星期。现在用10只老鼠在一个星期内判断那只瓶子有毒,每只老鼠可以喝多个瓶子的水,每个瓶子可以只喝一点。问如何解决?其实一开始我也一头雾水,但是他提醒我跟计算机领域相关,我就立马有了思路,运用二进制。因为计算机的最基本思想就是二进制。所以说,我们不仅要学习算法,更得学习思想方法。

①算法最基本的设计方法包括分治法,动态规划法,贪婪算法,周游法,回溯法,分支定界法。我们可利用分治法做快速排序,降低找n个元素中最大元和最小元的量级,降低n位二进制x和y相乘的量级,做Strassen矩阵乘法等等。它的思想就是规模很大的问题分解为规模较小的独立的子问题,关键是子问题要与原问题同类,可以采取平衡法来提高性能。

动态规划法是把大问题分解为子问题,但是子问题是重复的,后面的问题可以利用前面解决过的问题的结果。如构造最优二叉查找树,解决矩阵连乘时最小计算次数问题,寻找最长公共子序列等等。

贪婪算法就是局部最优法,先使局部最优,再依次构造出更大的局部直至整体。如Kruscal最小生成树算法,求哈夫曼编码问题。

周游法就是简单理解就是采取一定的策略遍历图中所有的点,典型的应用就是图中的深度优先搜索(DFS)和广度优先搜索(BFS)。

回溯法就是就是在满足一定的条件后就往前走,当走到某步时,发现不满足条件就退回一步重新选择新的路线。典型的应用就是8皇后问题,平面点集的凸包问题和0-1背包问题。

分支定界法:它是解决整数规划问题一种最常用的方法。典型应用就是解决整数规划问题。

②评价算法性能的方法如平摊分析中的聚集法,会计法和势能法。聚集法就是把指令分为几类,计算每一类的消耗,再全部叠加起来。会计法就是计算某个指令时提前将另一个指令的消耗也算进去,以后计算另一个指令时就不必再算了。势能法计算每一步的势的变化以及执行这步指令的消耗,再将每一步消耗全部累计。

这几种方法都是平摊分析法,平摊分析的实质就是总体考虑指令的消耗时间,尽管某些指令的消耗时间很大也可以忽略不计。上述三种方法难易程度差不多,每种方法都有属于它的难点。如聚集法中如何将指令有效分类,会计法中用什么指令提前计算什么指令的消耗,势能法中如何选取势能。因此掌握这些方法原理还不够,还要学会去应用,在具体的问题中去判断分析。

三、重点学习

1.贪婪算法

贪婪+其他算法:由于贪婪往往能大幅化简状态,利用问题的某些“单调性”,加上贪婪的思想,往往能是问题大幅简化,从而结合其他算法解决问题经典例题:田忌赛马,利用贪婪来确定状态。2.分治法

分而治之的思想在信息学竞赛中是非常重要的,下面主要介绍一下分治的经典应用

1)二分查找

思想很简单,功能很强大,边界要注意,负数要特判(NOI2010 PIANO)在非负数范围内的二分一般写法

如果是l := mid1 或 +1则 mid :=(l + r + 1)div 2 2)快速幂

a^b =(a^(b div 2))^2 + ord(odd(b))*a取模也适用 3)快速排序,归并排序

任何一本算法书上都会讲的,这里就略过了,值得一提的是快排记得加上随机化

k := a[random(rg(x)*ans = 0 重构权,将f(i)-g(i)*ans作为新权值,用相应算法求出一个“最小值”,判断是否>=0,接着二分即可

5)树的分治

一般用来解决树上的路径或统计类问题,每次只考虑跟树根有关的信息,然后递归分治处理

树的分治通常有基于点或基于边的分治,基于点的难合,基于边的复杂度太高,这里只介绍基于点的分治

步骤:处理跟当前树根有关的信息,重新计算子树大小,在子树中选择重心为根,递归到相应子树处理。

因为每次选了重心,所以递归总共logn层,每层O(n)的复杂度,总复杂度就是O(nlogn)6)二分搜索

直接搜的复杂度是指数级的的话,一般是40左右的数据量,hash一半,搜一半,搜后面的时候利用之前的hash信息合并出原问题的解。

而直接搜的复杂度达到阶乘级的话n一般就不超过20了,做法一般差不多 经典例题:POI02szy,NOI2001方程的解数。3.搜索

作为信息学竞赛中的所谓“万能算法”,搜索可以说是计算机学科所具有的最大特点了,自然地,搜索算法的应用自然也是非常之广泛,除了专门的搜索题,搜索一般可以用来部分预处理,打表找规律,当然还有骗分。

搜索的一般步骤:确定状态——选择搜索方式(dfs、bfs)——确定产生式规则——开始搜索。搜索的常见优化方式:

1)改变状态表示

这个需要根据题目而定,确定一个漂亮的状态表示,可能就有希望转向记忆化了,即使不行,搞出一个漂亮的状态表示是解决一道麻烦题的最重要的一步,再者,调试起来也会容易许多。

2)优化搜索顺序

这个优化在多数搜索中能起到摧枯拉朽的提速效果,通常我们选择枝叶较少的儿子先扩展,例如大名鼎鼎的dancing Links,除了利用双向十字链表去除冗余状态,每次选择可扩展数最少的儿子扩展同样给它的神速创造了条件。

3)可行性剪枝以及最优性剪枝

这是非常常用的剪枝思路之一,因题目而异,在迭代加深搜索中尤为重要 一般思路:考虑每次解最多变优多少,从当前的层数来看还有多少改进空间,如果已经不可能成为解或更新答案则可以剪枝了

——A*及IDA*算法:本质就是给搜索加上一个满足相容性的估价函数,然后用估价函数剪枝,理论上很牛B,实际上不常用,因为考场上很难想出满足那么多条件的估价函数,但记得一些常见模型的估价函数还是有价值的。例如15数码的估价函数就可以选择除了0之外每个元素到自己该到的位置的曼哈顿距离之和,因为每次最多使一个数距离减少1,所以这个估价函数是相容的,再例如求k短路的A*算法就是用个堆维护 min{ f(s)+ g(s)}估价函数就是从汇点反搜的“反向最短路”的长度。

四、总结

在计算机软件专业中,算法分析与设计是一门非常重要的课程,很多人为它如痴如醉。很多问题的解决,程序的编写都要依赖它,在软件还是面向过程的阶段,就有程序=算法+数据结构这个公式。算法的学习对于培养一个人的逻辑思维能力是有极大帮助的,它可以培养我们养成思考分析问题,解决问题的能力。作为IT行业学生,学习算法无疑会增强自己的竞争力,修炼自己的“内功”。

经过这门课的学习,我深刻的领悟到数学是一切算法分析与设计的基础。这门课的很多时间多花在了数学公式定理的引入和证明上。虽然很枯燥,但是有必不可少。我们可以清晰的看到好多算法思路是从这些公式定理中得出来的,尤其是算法性能的分析更是与数学息息相关。其中有几个定理令我印象深刻。

①主定理

本门课中它主要应用在分治法性能分析上。例如:T(n)=a*T(n/b)+f(n),它可以看作一个大问题分解为a个子问题,其中子问题的规模为b。而f(n)可看作这些子问题的组合时的消耗。这些可以利用主定理的相关结论进行分析处理。当f(n)量级高于时,我们可以设法降低子问题组合时的消耗来提高性能。反之我们可以降低的消耗,即可以扩大问题的规模或者减小子问题的个数。因此主定理可以帮助我们清晰的分析出算法的性能以及如何进行有效的改进。

②随机算法中的许多定理的运用

在这门课中,我学到了以前从未遇见过的随机算法,它给予我很大的启示。随机算法不随机,它可通过多次的尝试来降低它的错误率以至于可以忽略不计。这些都不是空穴来风,它是建立在严格的定理的证明上。如素数判定定理是个很明显的例子。它运用了包括费马小定理在内的各种定理。将这些定理进行有效的组合利用,才得出行之有效的素数判定的定理。尤其是对寻找证据数算法的改进的依据,也是建立在3个定理上。还有检查字符串是否匹配也是运用了许多定理:指纹的运用,理论出错率的计算,算法性能的评价也都是建立在数学定理的运用上。

第二篇:数据结构与算法课程总结[模版]

数据结构与算法课程学习总结报告

11计本一班 许雪松 1104013018

数据结构与算法是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。总的来说感触还是比较深的,刚开始上的时候还蛮简单的,越到后面感觉越难,算法也更复杂了,有时候甚至听不懂,老师上课时讲的也蛮快的,所以只能靠课下下功夫了。下面是我对本学期学习这门课的总结。

一、数据结构与算法知识点

第一章的数据结构和算法的引入,介绍了数据和数据类型、数据结构、算法描述工具、算法和算法评价四个方面的知识。

第二章具体地介绍了顺序表的概念、基本运算及其应用。基本运算有:初始化表、求表长、排序、元素的查找、插入及删除等。元素查找方法有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序及归并排序等。最后介绍了顺序串的概念,重点在于串的模式匹配。

第三章主要介绍的是线性逻辑结构的数据在链接存储方法下数据结构链表的相关知识。主要是单链表、循环链表的数据类型结构、数据结构、基本运算及其实现以及链表的相关应用问题,在此基础上介绍了链串的相关知识。在应用方面有多项式的相加问题、归并问题、箱子排序问题和链表在字符处理方面的应用问题等。本章未完全掌握的是循环链表的算法问题和C的描述。

第四章介绍在两种不同的存储结构下设计的堆栈,即顺序栈和链栈的相关知识,了解堆栈的相关应用,掌握应用堆栈来解决实际问题的思想及方法。本章主要内容是顺序栈和链栈的概念、数据类型、数据结构定义和基本运算算法及其性能分析。本章堆栈算法思想较为简单,所以能较好掌握。

第五章主要介绍顺序存储和链接存储方法下的两种队列、顺序(循环)队列和链队列的数据结构、基本运算及其性能分析以及应用。顺序队列(重点是循环队列)和链队列的概念、数据类型描述、数据结构和基本运算算法及其性能分析等。本章同堆栈有点类似,算法思想较为简单,所以能较好掌握;但难点重在循环队列队空、队满的判断条件问题。

第六章“特殊矩阵、广义表及其应用”将学习数组、稀疏矩阵和广义表的基本概念,几种特殊矩阵的存储结构及其基本运算,在此基础上学习特殊矩阵的计算算法与广义表应用等相关问题。本章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。

第七章二叉树及其应用。分为二叉树的基本概念、二叉树存储结构、二叉树的遍历算法、线索二叉树、二叉树的应用(哈夫曼树、二叉排序树、堆和堆排序、基本算法)。基本算法包括二叉树的建立、遍历、线索化等算法。在此基础上,介绍二叉树的一些应用问题,包括哈夫曼编码问题、(平衡)二叉排序树问题和堆排序问题等。

第八章说的是树和森林,首先我们要知道树与二叉树是不同的概念。课本介绍了树和森林的概念、遍历和存储结构,还有树、森林和二叉树的相互关系,树或森林怎样转化成二叉树,二叉树又如何转换为树和森林等算法。

第九章“散列结构及其应用”是逻辑结构“集合型”的数据元素在散列存储方法下的数据结构及其应用知识内容。主要介绍散列函数的概念、散列结构的概念、散列存储结构的概念---散列表、散列函数和散列表中解决冲突的处理方法---开放定址法、链地址法以及散列表的基本算法及其性能分析。本章概念较为多,所以掌握不太好。

第十章图及其应用。分为图的概念、图的存储结构及其基本算法、图的遍历及算法、有向图的连通性和最小生成树、图的最小生成树、非连通图的生成森林算法、最短路径、有向无环图及其应用。

二、对各知识点的掌握情况

我对各知识点的掌握情况总结如下:

对于第一章对数据结构的概念理解颇深,大概是每次都要谈论到吧。对算法的时间性能,空间性能基本了解。这些在后面的章节都会有运用。第二章本章重点和难点在查找和排序问题的算法思想上,6种排序方法的性能比较。本章未掌握的为希尔排序、快速排序、归并排序的时间复杂度分析。第三章,对链表掌握还好,对其数据结构进行了分析,有循环链表,掌握的不是很好,对其中一些用法不熟练。第四章堆栈,本章堆栈算法思想较为简单,所以能较好掌握,但表达式计算问题未掌握好的。第五章的循环队列队空、队满的判断条件问题掌握的不是很好。第六章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。第七章对二叉树掌握较好,其概念,存储,遍历有很好的掌握。就是对二叉排序树有点生疏,它的生成算法不是很会。第八章树树与二叉树之间的转换,森林与二叉树的转换算法思想基本掌握。第九章散列的一些知识,没有深入学习,大概了解了散列存储结构散列表,散列函数,冲突的处理方法。第十章了解了图的逆邻接表的存储结构,关键路径求解算法未能掌握好,不能灵活运用图的不同数据结构和遍历算法解决复杂的应用问题。

三、学习体会

刚刚接触这门课时,看到课本中全是算法,当时就晕了,因为我的C语言学的不好,我担心会影响这门课的学习,后来上课时老师说学习这门课的基础是C语言,所以我当时就决定一定要好好补补,争取不被拖后腿,在学习这门课的期间,也遇到了不少问。但是通过学习数据结构与算法,让我对程序有了新的认识,也有了更深的理解。同时,也让我认识到,不管学习什么,概念是基础,所有的知识框架都是建立在基础概念之上的,所以,第一遍看课本要将概念熟记于心,然后构建知识框架。并且,对算法的学习是学习数据结构的关键。在第二遍看课本的过程中,要注重对算法的掌握。对于一个算法,读一遍可能能读懂,但不可能完全领会其中的思想。掌握一个算法,并不是说将算法背过,而是掌握算法的思想。我们需要的是耐心。每看一遍就会有这一遍的收获。读懂算法之后,自己再默写算法,写到不会的地方,看看课本想想自己为什么没有想到。对算法的应用上,学习算法的目的是利用算法解决实际问题。会写课本上已有的算法之后,可以借其思想进行扩展,逐步提高编程能力。

四、对课程教学的建议

1、课程课时较紧,课堂上的练习时间较少,讲解的东西越多,头脑有时就很混乱。

2、感觉上课时的气氛不是很好,虽然大部分人都在听,可是效果不是很好。所以希望老师能在授课中间能穿插一些活跃课堂氛围的话题,可以是大家都非常关心的一些内容,这样既让大家能在思考之余有一个放松,也能够提高学生的学习积极性和学习效率。

3、学习的积极性很重要,有时候我们花了很长时间去写实验报告,也很认真的去理解去掌握,可是最后实验报告可能就只得了一个C,抄的人反而得A,这样的话很容易打击学生的积极性,在后面的实验报告中没动力再去认真写。所以希望老师能在这方面有所调整。

4、虽然讲课的时间很紧,但是还是希望老师能在讲述知识点的时候能运用实际的调试程序来给我们讲解,这样的话能让我们对这些内容有更深刻的印象和理解。

第三篇:数据结构与算法个人总结

数据结构与算法

重点内容:排序运算的算法、检索运算的算法,本部分所占分值较高,在11分左右; 考试点:数据顺序存储与链式存储、栈与队列的操作、二叉树的存储及遍历(或周游)、霍夫曼算法及其应用、各类排序算法;

知识部分: 1.数据结构的内容:

数据的逻辑结构:分为线性结构和非线性结构

数据的存储结构: 是数据的逻辑结构在存储器里的实现;

数据的运算:插入、删除、排序、查找等; 2.数据的存储结构分为:顺序存储结构和链式存储结构。3.单链表与双链表的插入与删除这里不再赘述,百度一下吧!

4.栈与队列的基本运算有:插入、删除、读取头元素到变量中,原栈或队列保持不变、判断是否为空、将栈或队列置为空

5.串的基本运算有:链接、赋值、求长度、全等比较、求子串、求子串的位置及替换等。6.广义表:广义表是线性表的推广,也称列表。

广义表的特点:

广义表的元素可以使字表,且字表的元素还可以是字表;

广义表可以被其他广义表所共享;

广义表可以是递归的表,机本身的一个字表;

7.多维数组与稀疏矩阵的存储比较复杂,请用百度查找相关内容,不再赘述;

8.树:树并不重要,重要的知识点是二叉树,对树理解不透彻的同学,请用百度搜索。9.二叉树:

二叉树的重点内容包括:

二叉树的遍历:中序遍历、前序遍历、后续遍历;(重点考察)完全二叉树(定义):在一棵二叉树中,若最多只有最下面两层的节点数可小于2,且最下面一层的节点集中于最左边的位置,则称此二叉树为完全二叉树; 树的先根次序周游对应于二叉树的前序周游(遍历),树的后根次序周游对应于二叉树的中序周游(遍历)

10.二叉树的存储结构:链式存储结构与顺序存储结构。

二叉树的链式存储:

是指二叉树的各节点随机存储在内存空间中,节点之间的关系用指针标示;

二叉树链表的节点包括三个:左指针,数据域,右指针;其中左指针指向左子节点,有指针指向右子节点;也可以是指一个父指针(parent)用于指向父节点; 二叉树链表的重要知识点:一个n节点的二叉树链表,有n+1个空指针域;

二叉树的顺序存储:

二叉树的顺序存储就是按一定的次序,用一组地址连续的存储单元存储二叉树的节点元素;

完全二叉树的顺序存储的性质:

用数组A[1….n]顺序存储完全二叉树的各节点,则当i>0,且i<=[(n-1)/2]时,节点A[I]的右子女是节点A[2i+1],否则节点A[I]没有右子女;同理当i>0且I<=[n/2],节点i的左子女节点是2i,否则没有!11.哈夫曼树: 基本定义术语:

节点的路径长度:从根节点到该节点的路径上分支的数目;

树的路径长度:树中所有的节点的路径长度之和;

哈夫曼树:在有n个叶子节点,并带有相同权值的二叉树中,必定存在一个二叉树,使其带权路径长度最短,这样的二叉树被称为“最优二叉树”或“哈夫曼树”

如下图:

12.排序算法:

常考的排序算法有:插入排序、冒泡排序、选择排序、快速排序、堆排序

插入排序: 首先先建立一个空列表,然后放入一些已排序的有序数列(自定),然后然后从原列表中取出一个数,并放入新列表,仍使新列表保持有序;重复这个动作直到原列表为空;

冒泡排序:顾名思义,就像冒泡一样(可以从小到大,也可以从大到小),大的升上去,小的降下来。首先将所有元素放入工作列表中,从列表的第一位数字到倒数第二位数字,逐个比较一个数和它的下一位,如果这个数大于它的下一位,则将它和它的下一位交换,重复该 步骤,直到不能交换

选择排序:设数组中存储了n个待排序数字,从数组中找到最小值和最大值分别放在数组的最左边和最右端,然后选出次小值和次大值放到左数第二位和右数第二位,……,最后建立完整的顺序;

快速排序:这是一种高效排序方法:

实践证明,快速排序是所有排序算法中最高效的一种。它采用了分治的思想:先保证列表的前半部分都小于后半部分,然后分别对前半部分和后半部分排序,这样整个列表就有序了。这是一种先进的思想,也是它高效的原因。因为在排序算法中,算法的高效与否与列表中数字间的比较次数有直接的关系,而“保证列表的前半部分都小于后半部分”就使得前半部分的任何一个数从此以后都不再跟后半部分的数进行比较了,大大减少了数字间不必要的比较。但查找数据得另当别论了。

堆排序:与前面的算法都不同,它是这样的:

首先新建一个空列表,作用与插入排序中的“有序列表”相同。

找到数列中最大的数字,将其加在“有序列表”的末尾,并将其从原数列中删除。

重复2号步骤,直至原数列为空。

堆排序的平均时间复杂度为nlogn,效率高(因为有堆这种数据结构以及它奇妙的特征,使得“找到数列中最大的数字”这样的操作只需要O(1)的时间复杂度,维护需要logn的时间复杂度),但是实现相对复杂(可以说是这里7种算法中比较难实现的)。

看起来似乎堆排序与插入排序有些相像,但他们其实是本质不同的算法。至少,他们的时间复杂度差了一个数量级,一个是平方级的,一个是对数级的。

算法的时间复杂度:

平均时间复杂度

插入排序 O(n2)

冒泡排序 O(n2)

选择排序 O(n2)

快速排序 O(n log n)

堆排序 O(n log n)

归并排序 O(n log n)

基数排序 O(n)

希尔排序 O(n1.25)

第四篇:算法设计与分析课程论文

“卓越工程师教育培养计划”(简称卓越计划)旨在培养一批创新能力强、适应经济社会发展需要的高质量工程技术人才。在南通大学计算机科学与技术学院制定的软件工程专业卓越工程师的培养计划中,算法设计与分析被设置为一门核心必修课程。通过该门课程的系统授课,重点培养学生的计算机问题求解能力,该能力是软件工程专业学生成长为卓越工程师必备的一项核心竞争力。一个典型的计算机问题的求解一般需要经历5个阶段:①问题的分析和建模;②算法设计方法和相应数据结构的选择;③算法的实现;④算法的正确性证明和复杂度分析;⑤算法实现的优化等。

经过多轮的教学实践发现,学生之间水平参差不齐是教学过程中面临的最大问题。随着高校招生规模的不断增大,不同学生之间在基础知识、智力水平、兴趣爱好、学习动机和学习方法上存在较大的差异性。相同的教学内容,对于一些基础较好的学生来说理解难度不大,但对于一些基础较弱的学生来说,则难以理解。因此,如何尊重学生个性差异、发展学生个性特长,在考虑学生整体发展的同时兼顾学生的个性特长发展,从而最终提高各个层次学生的综合素质是算法设计与分析课程的教学改革实践中需要重点关注的问题。

通过多次与学生的深入交流发现,学生在这门课程的学习过程中面临如下问题:

1)课程教学内容难度高。课程需要学生掌握常见的算法设计策略,如分治法、动态规划法和贪婪法等,对设计出的算法能进行正确性证明和复杂度分析。很多知识点抽象层次高,需要学生具备一定的数学分析能力,同时,通常算法内部逻辑比较复杂,因此需要学生具备较强的编程功底。笔者在讲授这些知识点时,均假设学生具备一定的数学分析能力和编程基础,但实际情况却不容乐观,很多学生在大一和大二的时候并未重视相关课程的学习,很多知识点都已经还给授课老师,在课堂上需要花费一定时间帮助学生回忆这些知识点。同时,部分学生因编程经验较为匾乏,难以顺利地将伪代码转化成可运行的程序代码。

2)学生问题求解能力弱。为辅助学生对知识点的理解,授课老师一般在实例选择时均采用一些经典实例,例如归并排序、最小生成树等。这些问题在一些预修课程(例如高级程序设计语言或数据结构)中均进行过讲解,因此理解起来难度不大。但是,学生在上机实践时,面对老师布置的新问题,却很难将学到的知识进行灵活运用,难以选择合理的算法设计策略,并借助熟悉的高级编程语言去解决。

3)学生自主学习意识薄弱。该门课程本身课时较少(仅有犯学时),其中8学时为上机实践,在剩余的24学时内,仅能讲授基本的算法设计与分析策略。学生即使了解常见的算法设计与分析方法,但现实生活中问题千变万化,更需要学生灵活使用学到的知识。因此,要提高学习效果和实践能力,需要学生在课外花费更多时间,阅读相关资料和进行大量编码。但是,授课过程中发现,真正能够完成自主学习的学生并不多。一方面,很多学生长期受应试教育的影响,习惯于填鸭式的教学模式,同时,学习时具有较强的功利性,很多学生普遍有应付考试和及格万岁的思想,有的学生甚至为了应付老师的作业检查,大量抄袭作业,仅做一些表面上的修改来敷衍了事。另一方面,即使有少量同学对新知识比较好奇,愿意自己去积极探索,但在选择相关经典资料时经验不足、效率较低,因此,需要有经验的老师进行有效引导。

目前高校很多教室都配有多媒体设备,造成大部分专业课程均采用多媒体课件方式进行授课。多媒体课件虽然具有丰富的表现力、良好的交互性和较高的共享性,但与其他核心专业课程相比,算法设计与分析课程的理论程度更高,数学推导较多,因此笔者认为,采用板书为主的教学方式可能会效果更好。为验证该推测,对Leiserson教授和Demaine教授开设的麻省理工学院公开课的在线视频进行分析,发现他们在授课时,绝大部分教学内容均采用板书方式进行讲解,通过在黑板上一步一步地推导,在一些关键节点上与学生充分交互,使得学生可以更好地掌握算法设计与分析过程中的一些重要技巧。笔者在实际教学中通过精心设计板书,取得了较好的课堂效果。

综上所述,在学生水平参差不齐的情况下,针对算法课程教学中存在的问题,提出了一系列教学改革措施以提高不同层次学生的计算机问题求解能力。其中将教学问题与教学改革措施的对应关系,以及教学改革措施与不同层次学生的对应关系进行总结。而且具备良好的交叉学科基础和文化底蕴,能培养出满足市场需要的复合型人才。

如何使相关专业的教育教学满足将来ICT产业的发展是个相当复杂的问题,希望笔者提出的一些改进措施能对信息科学相关专业的工程教育具有参考意义,并对其他领域也有借鉴之处。

第五篇:“算法设计与分析”课程教学方法探究(精选)

“算法设计与分析”课程教学方法探究

摘要:该文分析了算法设计与分析课程教学和学生学习时存在的问题,根据近几年积累的教学经验,提出了一些教学方法的建议,如互动式教学,板书和多媒体相结合,重视上机练习以及考核方式的改革。

关键词:计算机;算法设计与分析;教学方法

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)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].中国电力教育,2010(16):74-75.[2] 王晓东.计算机算法设计与分析[M].北京:电子工业出版社,2008.[3] 刘波“.算法设计与分析”教学探讨[J].高等理科教育,2007(4):78-80.[4] 余祥宣,崔国华,邹海明.计算机算法基础[M].武汉:华中科技大学出版社,2006.[5]马健.启发式教学法在课堂教学中的应用[J].中国电子教育,2008(3):68-71.

下载算法设计与实现个人课程总结word格式文档
下载算法设计与实现个人课程总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    算法设计与分析课程的心得体会

    《算法设计与分析》课程的心得体会 以最少的成本、最快的速度、最好的质量开发出合适各种各样应用需求的软件,必须遵循软件工程的原则,设计出高效率的程序。一个高效的程序不......

    算法及其实现 教学设计(第一课时)

    《3.4算法及其实现》教学设计(第一课时) 一、设计思想 随着新课程改革的深入,信息技术课程理念发生了巨大的变化,具体表现为:强调培养学生的信息素养;为学生打造终身学习的平台;关......

    《对分查找及其算法实现》教学设计

    《对分查找及其算法实现》教学设计 湖北省巴东县第一高级中学 刘少银一、教材学情分析本次课是浙江版高中信息技术选修教材《算法与程序设计》第二章算法实例第四节查找中的......

    算法及其实现教学设计(五篇范例)

    《算法及其实现》教学设计 XXXXX中学 XXX 一、 教材分析 在前面的章节已经提到,用计算机解决实际问题的过程中,有两个重要的环节——设计算法、编制和运行程序实现算法,所以算......

    课程网站的设计与实现

    课程网站的设计与实现摘要:课程建设是“高等学校教学质量与教学改革工程”的一项重要内容,也是教育部深化教学改革,以教育信息化带动教育现代化的一项重要举措。课程网站是课......

    数据结构与算法课程论文

    数据结构与算法课程小论文 10计本一班 王晓龙 1004011026 一. 内容概要: 如何合理地组织数据、高效地处理数据是扩大计算机领域、提高软件效率的关键。在软件开发过程中要求“......

    数据结构与算法课程教学大纲

    教学大纲 数据结构与算法 (Data Structures) 计算机技术已成为现代化发展的重要支柱和标志,并逐步渗透到人类生活的各个领域。随着计算机硬件的发展,对计算机软件的发展也提出了......

    算法分析与设计知识点总结

    第一章 概述 算法的概念:算法是指解决问题的一种方法或过程,是由若干条指令组成的有穷序列。 算法的特征: 可终止性:算法必须在有限时间内终止; 正确性:算法必须正确描述问题的求......