开篇:润墨网以专业的文秘视角,为您筛选了八篇数学建模穷举法范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
关键词:组合学;机械电子工程学;传感器网络
传统的机械工程可以分为制造和动力两大类。制造类包括毛坯制造、机械加工和装配三个生产过程;而动力类包括各种发动机。与自人类使用工具以来就有的机械工程相比,电子技术是二十世纪发展的新学科。机械工程与电子技术的结合始于上世纪。起初,二者结合是分离的“块与块”关系,或者是功能结构上的相互替代。随着计算机技术发展的推动,机械系统和电子系统通过信息有机地联系起来,形成了真正的机械电子工程。人工智能技术的发展与渗透,使得机械电子在传统的机械系统能量连接、功能连接的基础上,更加强调了信息连接和驱动,并逐步使机械电子系统向具有一定智能的方向发展。
一、组合学简介
组合学(Combinatorics)是研究离散结构的存在、计数、分析和优化等问题的科学。组合学源于数学娱乐和游戏,组合学问题在生活中随处可见,主要可划分为两类:排列的存在性、排列的计数和分类。组合学有两个研究领域:组合数学与组合学问题的算法。离散对象的处理是计算机科学的核心,研究离散对象的科学就是组合数学;程序就是算法,绝大多数情况下,程序算法是针对离散对象的,正是因为有了组合学问题的算法,才使人感受到计算机的“智能”。组合数学的主要研究内容有:鸽巢原理、排列与组合、二项式系数容斥原理及应用,递推关系和生成函数、特殊计数序列、二分图中的匹配、组合设计。组合学问题的算法,计算对象是离散的、有限的数学结构。
组合学问题的算法包括算法设计、算法分析两个方面。关于算法设计,历史上已经总结出了若干带有普遍意义的方法和技术,包括动态规划、回溯法、分支限界法、分治法、贪婪法等,应用相当广泛,如:旅行商问题、整数规划问题等。
组合学不仅是计算机科学的基础,在其它科学技术领域也有重要的应用。美国Sandia国家实验室有一个专门研究组合数学和计算机科学的机构,主要从事组合编码理论和密码学的研究,在美国及国际学术界都有很高的地位。
二、机械电子
早期的机械工业以手工加工为主,生产力低,但适应性强;三十年代开始集中在标准件和流水线,适合于大批量生产,但缺乏灵活性;现代生产一般要求转产周期短、生产灵活性强、产品质量高,因此常采用以机械电子系统为主要构成的FMS可以达到上述要求。与传统的机械工业相比,机械电子工程有着鲜明的特点:就设计而言,机械电子工程并不是一门有严格界线并且独立的工程学科,而是在设计过程中一个综合思想的实践。设计中,根据系统结构配置和目标,机械电子工程把它的核心部分(机械工程、电子工程、汁算机技术)与其它领域的技术,如:制造技术、管理技术和生产加工实践等有机地结合在一起,采用一种基于信息的自顶向下的模块化策略,完成设计就系统(产品)而言,机械电子系统(产品)结构简单,元件和运动部件少(如电子表),它用小巧的电子系统取代“傻、大、笨、粗”的机械系统,减小了系统的体积,提高了性能,但是系统的复杂性却大大增加了。
机械电子学要求机械与电子技术的规划应用和有效结合,以构成一个最优的产品或系统。现代的机械电子系统除了“块与块”之间的动力联系之外,还有信息之间的相互联系,并由具有数值运算和逻辑推理能力的计算机来对机械电子系统的所有信息进行智能处理,人们已经认识到生产改革的未来属于那些懂得怎样去优化机械和电子系统之间联系的人;尤其是在先进生产和制造系统的应用中,对优化的需求将会变得更为迫切;在这些系统中,人工智能、专家系统、智能机器人以及先进的工艺制造系统将构成未来工厂的下一代工具。
三、CMG机构的优化编码
CMG机构是一种可用于引信保险与解除保险控制的密码鉴别机构。根据密码鉴别的功能要求及指定的“解锁符号序列”,设计CMG机构中复合齿轮A,B上鉴别齿(discrimination teeth)的二值装定编码,可称为“CMG机构编码”问题;基于工程优化的考虑,还希望编码得到的复合齿轮A,B,其齿轮层数N最小,此即CMG机构的优化编码问题。
为了解决CMG机构的优化编码问题,我们首先研究其数学建模的方法。在CMG机构编码类型划分的基础上[7],基于“二维迷宫映射方法”[2]、迷宫映射图中“路格点(route grid)”和“阱格点(trap grid)”的概念[6]、及“关键陷阱格点(Critical Trap Grid,CTG)”互斥的“十字叉”判据[8],将CMG机构的优化编码问题转化为无环、无重边的无向简单图G(V,E)的k-顶点着色问题(k-vertex coloring problem)。但k-顶点着色是组合学中著名的NP完全问题,穷举法的时间复杂度高达O(mn)(m表示染色数,n表示顶点数)。文献[9]已证明,对于任意CMG机构,密码齿轮层数至少为3;因此,即便在最佳情况下,穷举计算求解的时间复杂度也高达324。文献[10]提出了一种“基于团划分数的聚类算法”,对于任意一组指定的、有限长度的“解锁符号序列”,理论上可以求解得到所有的CMG机构优化编码,但其本质上仍然是穷举法,计算的时间复杂度仍为O(mn)。权衡计算的时间复杂度与优化设计目标,我们采用贪婪法求解CMG机构编码的顶点着色问题,该方法具有时间复杂度低、易于编程的优点,在大多数情况下可以获得优化编码结果。
基于贪婪法,采用Visual Basic编写了CMG机构的编码及编码校验程序[11],包括编码、校验两个功能,实现了只需输入“解锁符号序列”,即可自动绘制二维迷宫映射图,求解并绘制密码齿轮编码示意图,以TXT文件输出设计结果,验证鉴别齿编码与“解锁符号序列”是否“锁-钥匹配”的功能。
四、传感器网络节点布设
传感器网络(sensor networks)涉及传感器、微电子机械系统(Micro-Electromechanical System,MEMS)、现代网络和无线通信等多种技术,将客观世界的物理信息与传输网络联系在一起,扩展了人们获取信息的能力,可应用在军事国防、工农业控制、城市管理、环境监测、抢险救灾、防恐反恐、危险区域远程控制等诸多领域,是当前IT 技术研究的热点。传感器网络的研究涉及通信协议、支撑技术、应用技术三部分,其中一个基本的问题是传感器网络节点的覆盖与连通。
传感器网络的每个传感器节点都能够采集、存储和处理环境信息,并与相邻的传感器节点通信。传感器节点的覆盖问题(Coverage Problems),就是要判断敏感区域被传感器监控或追踪的优良程度。例如,对于如图1所示的一个单位矩形敏感区域,假设采用5个同构的传感器如图布设,在完全覆盖该敏感区域的前提下,出于传感器节能设计的考虑,需要计算传感器的最小覆盖圆半径。这一问题在组合学中,可以用1-等圆覆盖问题 (1-Unit-Disk Coverage Problem)描述。
图1单位矩形敏感区域的1-等圆最优覆盖例(5圆覆盖,圆半径约为0.3621605)
为了定位需重点监测“热点(hot spots)”,跟踪活动目标的位置,或者为了提高传感器网络的容错能力(可靠性),需要考虑敏感区域的k-等圆覆盖问题。传感器节点k-等圆覆盖问题的物理意义是:设一组同构的传感器布设在某一区域,该区域中的任意一点应至少被k个传感器覆盖。事实上,传感器网络中可采用多种多样的异构传感器节点,由于各种传感器的敏感距离可以不同,因此,需要采用k-不等圆覆盖问题(k-Non-Unit-Disc Coverage Problem)描述二维区域的覆盖问题。
更进一步,传感器网络节点是在三维空间中布设的,假如每个传感器的敏感区域可用一个三维球体来模拟,则引出了传感器节点的三维空间覆盖问题。如果再考虑为了节能而规划传感器的值班时间、传感器节点发现目标的时延等,则情况更加复杂。
五、结论
组合学在诸多科学技术领域中有着重要应用价值。本文结合作者的研究工作,介绍了组合学在机械电子工程学领域的两个应用实例。
(1)CMG机构的编码问题,是设计一种微小型机械密码锁的关键。受微执行器(微电机)驱动能力的限制,并且为了提高密码锁装置的可制造性和可靠性,还希望CMG机构中复合齿轮A,B的齿轮层数N最小,此即CMG机构的优化编码问题。为了解决这一问题,我们通过“二维迷宫映射”和其它数学建模步骤,将问题转化为图G(V,E)的k-顶点着色问题,并设计了CMG机构鉴别齿优化编码、校验的组合学算法;
(2)传感器网络是传感器技术与网络通信技术相结合的产物,传感器网络节点的覆盖与连通是传感器网络规划的一个基础问题。
制作电路板时,需要在板上打孔,孔有多种类型,需要打孔机上的不同刀具以规定的顺序打孔才能制作完成,由于打孔机钻头的移动和切换刀具都需要时间,所以希望可以找到较好的打孔策略,即钻头行进的线路和切换刀具的方案,使得完成一块电路板的时间尽可能的短。本文主要通过程序搜索来寻找最佳单钻头工作线路。
我们将所给数据点加入所需刀具作为第三维,改造成三维坐标,化为一个完全图,将问题转化为旅行商问题(TSP)。构造任意两个坐标点之间的距离矩阵,以方便将来选择路线,同时得到一个很好的性质,即距离满足三角不等式,将问题转化为寻找最佳汉密尔顿回路。对于某些孔型要求特定的刀具打孔顺序,我们对同一坐标的不同刀具点添加了访问关系,只有在访问过之前刀具状态点的前提下才能访问下一个刀具状态点,保证了加工顺序符合要求。做如上处理后,我们通过枚举起点,利用“最邻近点法”,对于每个点,都选择距离最近的路线作为下一路线。在得到初步的最佳路线后,利用“二边逐次修正法”,不断对所得路线进行优化,最终得到了比较理想的路线,计算出了相关数据,如换刀次数,总时间,对应成本等等。我们还用Matlab导入数据点,画出了路线图。
最后,我们对结果做了概述,对模型进行了分析,发现本模型可移植性强,各类参数可自行设置,复杂度低,效率也较高。同时也发现了本模型的几个可以改进的方面。
关键字:打孔机 TSP 旅行商问题 最佳汉密尔顿回路 最邻近点法
中图分类号:D412.64 文献标识码:A 文章编号:
问题概述
过孔是印刷电路板的重要组成部分,每块电路板上有上千个过孔,并且过孔有多种类型,需要打孔机上的不同刀具以规定的顺序打孔才能制作完成,由于打孔机钻头的移动和切换刀具都需要时间,所以希望可以找到较好的打孔策略,即钻头行进的线路和切换刀具的方案,使得完成一块电路板的时间尽可能的短,从而使得生产电路板的效能最大化。
在本文中,我们使用了构造性算法和改进型算法结合的方式,用最邻近点法确定初步方案,再通过二边逐次修正法改善方案。
初步假设
(1)钻头要归位。
(2)钻头无碰撞体积。
(3)钻头行进匀速。
(4)忽略打孔时间。
(5)换刀和行进可以同时进行,但是相应的费用不减。
模型建立与结果
为了将行进与换刀这两个过程统一,我们对数据点做了处理,将其扩充到了三维。对于每种孔型的点,将其x,y坐标作为前两维,所需要的刀具种类作为第三维。并且如果一个过孔需要多种刀具制作,我们就处理成多个点。经过这样的处理,原本的平面数据点换成了三维空间的点。比如对于C孔的某一点(x,y),在新的坐标下变成了两个点(x,y,a)与(x,y,c)。
在这样的坐标下,这些点以及两两之间的边组成了一个完全图(完全图就是指任何两点之间都有连线的图),本问题就转化为了经典的旅行商问题(TSP),即寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本的路线。
根据假设,刀具在行进过程中可以同时进行刀具转换,但相应费用不减。所以可以定义如下距离矩阵,其中,i,j为任意两个点,并且已经化为上文提到的三维坐标形式,D(i,j)表示从i到j所需时间,s(i,j)表示i,j之间距离,t换代表换刀时间。
那么点i到点j的时间就是从i移动到j所需时间和切换i和j所需的时间中较大的那个,于是有
(1)
定义了距离函数之后,我们发现它满足三角不等式:
(2)
这是一个十分有用的条件。在图论的相关知识中,有如下定理
在加权图G=(V,E)中,若对任意x,y,z∈V,x,y,z两两不同,都有D(x,y)
根据以上定理,最佳路线一定不会经过两个相同的状态(也就是说点的坐标相同,当前刀具也相同),所以我们只需要对于经过处理后的三维数据点寻找最优哈密尔顿回路即可。
本问题与最优哈密尔顿回路的差别在于,刀具加工是有次序的,例如孔型C的两个数据点(x,y,a)和(x,y,c),由于规定必须先用刀具a加工再用刀具c加工,那么在行进路线中,(x,y,a)必须出现在(x,y,c)之前。这样的限制为我们选择最佳路径制造了困难,我们用如下的方法来解决此问题。
以G类孔为例,它的刀具加工顺序为d,g,f。 假设现在有一个G类孔,平面坐标为(x,y),那么它在新坐标下变为3个点A(x,y,d),B(x,y,g) 与C(x,y,f)。我们先将(x,y,g)与(x,y,f)点设置为不可访问的,并且将这三个点建立联系,一旦访问到了(x,y,d)这个点,程序会自动将(x,y,d)设为不可访问的,而将(x,y,g)“解禁”,那么(x,y,g)变为可以访问的点,同理,当探索到(x,y,g)后,(x,y,f)又被“解禁”,成为可行点,这样的做法就保证了这3个点(状态)的访问顺序必然是按照刀具加工次序的。
于是我们的目标函数就是:
(3)
其中i1,i2…in为1到n的全排列,并且in+1=i1。
由于最优哈密尔顿回路问题是一个NP-完全问题,从上述目标函数可以看出,穷举法需要列举n!种情况,无法找到多项式数量级复杂度的算法,所以只能采取近似算法。
1.最邻近点法
对于起点,我们采用枚举法。取定起点之后,每一步都选择当前可行边中最短的那一条,这样的复杂度为O(n^2),枚举起点则使复杂度提高至O(n^3),对于题中数据,变换坐标之后达到了2814个点,O(n^3)的算法是可以被接受的。而更好的生成树+贪心法的复杂度为O(n^4),程序运行大约需要100多小时,所以我们选择了复杂度相对较低的最邻近点法。这样,我们得到了初步的线路。
2.二边逐次修正法
在上一步中,我们得到了初步的线路,记为
H=v1,v2,v3,…,vi,…,vj,…,vn,v1
对于所有i,j,1
H=v1,v2,v3,…,vi,vj,v(j-1),…,v(i+1),v(j+1),…,vn,v1
具体实现时,我们对于上文中的i和j采用随机抽取的形式,抽取数量为50000000,保证了线路被很好地优化。
最终得出的单钻头结果(我们最后选取最少时间为最佳路线)
未修正的最邻近点法 做修正后的结果
我们还计算了最优路线(最短时间)的换刀情况,发现是由e-d-c-b-a-h-g-f-c,共八次,在要求的刀具加工顺序下,这样的换刀次数是最少的,从而说明了修正后的最邻近点法对于本题是适用的。
结果概述
此模型可移植性较强,诸多参数,比如安全间距,行进速度,换刀时间,孔型等等都可以自行设置,适用于不同情况。复杂度低,但可以高效地找到比较理想的解。
在单钻头的情况中,利用最邻近法找到初解,利用二边逐次修正法不断优化线路。这种算法简单且高效,对于本题换刀时间远大于行进时间的特点表现优秀。
可改进方面
如果知道钻头的具体形状,可以将两个钻头的距离函数设计得更为精确,从而使结果也更加精确。
参考文献
【1】Reinhard Diestel《Graph Theory》(Third Edition)世界图书出版公司第10章 Hamilton Cycles
【2】高随祥 《图论与网络流理论》高等教育出版社第4章第4节旅行商问题(Traveling Salesman Problem,TSP)
【3】赵静 《数学建模与数学实验》高等教育出版社第13章 行遍性问题
【4】科曼 《算法导论》 (潘金贵等译)机械工业出版社
关键词:初中数学;常用方法;思考
所谓方法,是指人们为了达到某种目的而采取的手段、途径和行为方式中所包含的可操作的规则或模式.人们通过长期的实践,发现了许多运用数学思想的手段、门路或程序.同一手段、门路或程序被重复运用了多次,并且都达到了预期的目的,就成为数学方法.数学方法是以数学的工具进行科学研究的方法,即用数学语言表达事物的状态、关系和过程,经过推导、运算与分析,以形成解释、判断和预言的方法。数学方法具有以下三个基本特征:一是高度的抽象性和概括性,二是逻辑的严密性及结论的确定性,三是应用的普遍性和可操作性. 数学方法在科学技术研究中具有举足轻重的地位和作用:一是提供简洁确定的形式化语言,二是提供数量分析及计算的方法,三是提供逻辑推理的工具.现代科学技术特别是电子计算机的发展,与数学方法的地位和作用的强化正好是相辅相成. 在中学数学中经常用到的基本数学方法,大致可以分为以下三类:
(1)逻辑学中的方法.例如分析法(包括逆证法)、综合法、反证法、归纳法、穷举法(要求分类讨论)等.这些方法既要遵重逻辑学中的基本规律和法则,又因为运用于数学之中而具有数学的特色.
(2)数学中的一般方法.例如建模法、消元法、降次法、代入法、图象法(也称坐标法,在代数中常称图象法,在学生今后要学习的解析几何中常称坐标法)、比较法(数学中主要是指比较大小,这与逻辑学中的多方位比较不同)等.这些方法极为重要,应用也很广泛.
(3)数学中的特殊方法.例如配方法、待定系数法、加减法、公式法、换元法(也称之为中间变量法)、拆项补项法(含有添加辅助元素实现化归的数学思想)、因式分解诸方法,以及平行移动法、翻折法等.这些方法在解决某些数学问题时也起着重要作用,对于某一类问题也都是一种通法。
我们要求尊重学生的学习主体地位,要真正把学生作为学习的主人翁看待;关注学生的学习过程,倡导学生主动参与,使学生在自主、合作、探究的方式中积极主动地进行学习活动;培养学生的创新精神与实践能力。特别是对于初中一年级,要为学生学习数学知识打下良好基础,数学学习方法的学习显得更具有时代性和前瞻性。数学学习方法指导是一个由非智力因素、学习方法、学习习惯、学习能力多元组成的统一整体,因此,应以系统整体的观点进行学法指导,目的在于使学生加强学习修养,激发学习动机;指导学生掌握科学的学习方法;指导学生学习数学的良好习惯,进而提高学习能力及效果。
(1)正确认识数学学习方法的重要性。 启发学生认识到科学的学习方法是提高学习成绩的重要因素,并把这一思想贯穿于整个教学过程之中。可以通过讲述数学名人的故事,激励学生,我结合《数轴》一课的内容,在班上讲述笛卡尔在病床上发现数轴,最终开创了用数轴表示有理数的故事。让孩子懂得了获得数学知识,学习数学的方法才是关键。在班级中,我多次召开数学学法研讨会,让学习成绩优秀的同学介绍经验,开辟黑板报专栏进行学习方法的讨论。
(2)形成良好的非智力因素 非智力因素是学习方法指导得以进行的基础。初一学生好奇心强烈,但学习的持久性不长,如果在教学中具有积极的非智力因素基础,可以使学生学习的积极性长盛不衰。激发学习动机,即激励学生主体的内部心理机制,调动其全部心理活动的积极性。有的课教师还可以运用形象生动、贴近学生、幽默风趣的语言来感染学生。 锻炼学习数学的意志。心理学家认为:意志在克服困难中表现,也在经受挫折、克服困难中发展,困难是培养学生意志力的“磨刀石”。我认为应该以练习为主,在初一的数学练习中,要经常给学生安排适当难度的练习题,让他们付出一定的努力,在独立思考中解决问题,但注意难度必须适当,因为若太难会挫伤学生的信心,太易又不能锻炼学生的意志。 养成良好的数学学习习惯。有的孩子习惯“闷”题目,盲目的以为多做题就是学好数学的方法,这个不良的学习习惯,在平时的教学中老师一定要注意纠正。
(3)指导学生掌握科学的数学学习方法。 ①合理渗透。在教学中要挖掘教材内容中的学法因素,把学法指导渗透到教学过程中。②随机点拨。无论是在授课阶段还是在学生练习阶段,教师要有强烈的学法指导意识,抓住最佳契机,画龙点睛地点拨学习方法。 ③及时总结。在传授知识、训练技能时,教师要根据教学实际,及时引导学生把所学的知识加以总结。我在完成一个单元的学习之后都让孩子们养成自己总结的习惯,使单元重点系统化,并找出规律性的东西。 ④迁移训练。总结所学内容,进行学法的理性反思,强化并进行迁移运用,在训练中掌握学法。
(4)开设数学学法指导课,并列入数学教学计划。 在我所任教的初一年级里,我每两周一课时给学生上数学学法的指导课。结合正反例子讲,结合数学学科的具体知识和学法特点讲,结合学生的思想实际讲,边讲边示范边训练。
关键词:程序设计基础课;问题求解方法;教学改革
程序设计基础主要培养学生运用程序设计语言求解问题的基本能力,包括让学生了解高级程序设计语言的结构、掌握计算机问题求解的基本思想方法以及基本的程序设计过程和技巧、熟悉并适应计算机的问题求解模式,从提出问题、模型建立、数据表示、算法设计到编写程序代码、测试和调试程序、分析结果的过程中,培养学生将问题抽象化、设计与选择解决方案的能力,以及用程序设计语言实现方案并进行测试和评价的能力。
程序设计基础课程在大学一年级开设,是大学生认识和应用计算机的入门课程,是计算机及相关专业的一门重要基础课程,对后续课程的学习乃至学生的整个职业生涯都有至关重要的作用;而如何讲好这门课程,更需要广大计算机专业教师不断地探索、改革和创新。
1、课程改革的必然性
目前,国内程序设计基础课程名称较多,如C语言程序设计、高级语言程序设计、程序设计基础等。纵观这些课程的开设情况,我们可以发现教学内容大多都是以某个具体的程序设计语言(如C语言)知识及其自身体系为脉络,教学模式以课堂讲解和学生上机练习为主。按照这一模式组织教学,产生的副作用主要有以下几个方面。
(1)学生在课程学习过程中,面对程序设计语言中繁杂的语法规则,会产生严重的厌学情绪,使得课堂逃课率较高;还有不少学生通过抄袭他人作业或考试作弊的方式完成课程学习。
(2)一些能够完成课程学习的学生自认为掌握了程序设计方法,但是在解决实际问题时却发现对问题求解毫无头绪,由此产生心理落差,严重挫伤学习热情,没有学习成就感。
(3)另外一些能够完成课程学习的学生认为他们满怀希望来学习,但没有从该课程的学习中获得编程的愉。
这种模式在我国计算机教育事业中曾经发挥过极其重要的作用,但它是从“狭义工具论”的思想出发,过于注重语句、语法等语言细节的教学,没有把问题求解方法和计算思维能力培养置于首要位置,对于如何分析问题和解决问题的思路讲得很少,对学生编程能力的训练不够。这一模式没有很好地为课程开设目标服务,课程的开设只能起到事倍功半的效果,同时也成为制约计算机及相关专业教学质量提高的一个瓶颈。
2、更新课程教学理念
理念更新是教学改革的思想保证,正确合理的课程教学理念是课程改革成败的关键。为了破除“狭义工具论”的课程建设观念,秉承“授之以鱼不如授之以渔”的理念,我们将以语言知识为主线的教学模式转变为以语言知识为基础、以问题求解方法为主线的教学模式,确立了程序设计基础课程面向应用,让学生学会分析问题、设计算法、运用语言知识编写程序的教学基本原则,而不是让学生一味地研究语言本身。按照这一思想,陕西理工学院将传统的C语言程序设计课程更名为程序设计基础,并确立以下教学理念。
(1)淡化语言,强化程序设计方法,帮助学生树立正确的程序设计观念和思想方法。
(2)淡化编码,强化算法运用与分析,训练学生的抽象思维及建模能力。
(3)案例驱动,强化实践,引导学生获取正确的问题解决方案。
(4)由易到难,贯通案例,满足学生的学习成就感,激发学生的学习兴趣。
3、课程教学改革方案
3.1 课程内容的优化安排
依据程序设计基础课程的开设目标和根本任务,课程内容应包含问题求解的基本方法和实现这些方法的计算机语言基础知识等,因此课程内容的优化安排原则是以语言知识为基础,以程序设计的基本理论和基本方法(含问题求解方法)为核心。据此原则,课程教学组对课程内容按照程序设计的应用需求进行合理取舍,将知识点分成门槛跨越、体系拓展、创新应用3个部分。
(1)门槛跨越主要解决的是程序设计入门必需的语言知识学习问题。教师通过讲解语言体系核心集合,让学生在很短的时间内完成语言知识的学习并将其应用于实践,学生学习语言知识获得的成就感与愉悦感能够激发并延长学生的学习热情。
(2)体系拓展主要是在门槛跨越的基础上围绕程序设计的基本方法展开。教师通过一些常用且典型的算法,让学生初步掌握算法的基本知识,并为后续的教学埋下伏笔,以激发学生的求知欲。
(3)创新应用是在前2个体系基础上实现的以问题为中心的阶段性实践训练。此处的问题规模较大,程序代码有相应要求,学生通过多人合作完成对问题的分析、建模及程序实现。
3.2 课程教学策略
要实现知识点3个部分所达到的教学目标,教师必须采用适当的教学策略,综合应用课堂讲授、案例穿插、启发诱导等多种教学方法;从程序设计的角度出发,按照分析建模、算法设计、程序编码、测试与维护等环节,培养学生从能够遵守程序设计准则到习惯成自然地按照程序设计准则完成创新应用问题的程序设计。此外,教师还需在教学过程中针对教学内容的组织处理好以下关系。
(1)处理好该课程与后续课程的关系。程序设计基础不仅是一门独立的课程,而且是后续课程的基础,因此教学内容的安排既要考虑对后续课程的铺垫作用,又不能过多涉及算法与数据结构的内容,避免超出课程的内容范围。
(2)突出重点,分散难点,淡化细节。教师对于语言基础知识的教学应以应用为目的,对于一些语言细节可一带而过。例如,指针既是结构化程序设计语言的难点,又是后续课程的一个应用重点,教师可避免像传统教学那样集中讲解指针的概念,而是将这些难点提前并分散到相关章节进行处理,以逐步降低指针内容的难度并减少学生的心理压力。
(3)程序设计方法的讲解主要通过案例来实现。例如,教师在讲解C语言基础知识各章节内容时,可以“快递运费计价问题”为例,逐步扩展,加入条件,从分析问题、建立模型、设计算法、进行程序设计等方面进行讲解,贴近实际,不断激发学生对知识的探索欲望。
(4)以常用算法为纽带,实现逻辑思维与程序设计方法的有效融合。例如,针对递推法、倒退法、迭代法、穷举法可以不同的有趣实例,如兔子繁殖问题、猴子吃桃问题、牛顿迭代法解方程、鸡兔同笼问题、逻辑问题等,对其进行总结和应用,让学生体验程序设计的实现过程,既反映问题的难度及求解规模的变化,又彰显知识和求解方法的多样性。
4、课程实践环节建设
程序设计是高强度的脑力劳动,不是听会的,也不是看会的,而是练会的。只有让学生动手,学生才会有成就感,进而对课程产生兴趣,学起来才比较从容。在“狭义工具论”思想指导下,传统的实践环节内容比较单一,以课程实验为主,内容基本上是程序设计语言的语法验证,实验项目与实际应用问题结合不紧密,学生做完实验没有成就感。因此,课程的实践教学应遵循以应用为目的,以任务驱动,循序渐进。我们将课程完整的实践环节分为课程实验、课程实训和课程设计3大部分。
4.1 课程实验
课程实验由基础实验和综合实验组成。基础实验与课程讲授内容同步,形成配套的实验项目,加深学生对相关语言知识及某个主题领域知识的理解和应用;综合实验主要是针对多个知识点进行综合训练,加强学生对课程内容的整体认识。
1)基础实验。
基础实验项目按照程序跟踪、改错调试、设计实现3个递进层次,从多角度培养学生的程序设计能力。前2个层次的基础实验项目训练学生对语言知识的运用能力,后1个层次的基础实验项目训练学生求解问题的能力。
程序跟踪是依据项目的主题给出完整的程序,让学生利用调试工具跟踪并观察程序的运行结果,并对结果进行分析,回答给定问题,画出程序流程图,这些题目主要是为了加强和巩固学生的语言知识。改错调试是在给定功能的程序中设置几个语法或算法错误,让学生上机进行调试并除错,主要目的是训练学生在理解程序主要功能及整体框架的基础上进行程序调试的能力。设计实现是按照项目的主题给出几个可选的题目,让学生根据自己的能力选择完成。这一层次的题目主要是让学生掌握从提出问题、模型建立、数据表示、算法设计、编写代码到测试调试程序等开发过程和方法,培养学生将问题抽象化、设计与选择解决方案、用程序设计语言实现方案并进行测试和评价的能力。
2)综合实验。
综合实验的目的是使学生综合应用复杂数据类型实现复杂数据处理与存储,培养学生根据给定问题编写具有多个模块程序的能力。实验内容都是一些与实际应用结合紧密且具有较复杂数据结构的问题。
4.2 课程实训
课程实训在课程结束后进行,主要是给出一些典型问题,要求学生运用特定的数据结构及算法编程实现,其综合程度要高于实验项目。例如,针对x∈A、A n B及A u B等集合问题的运算,要求每个学生分别用数组和链表2种数据结构实现,而且对于每种结构都要求用一些指定的编程方法。教师要按照问题实现的方法与步骤,根据学生的语言知识运用情况制订严格的实现要求和标准,按照标准当场对学生编写的程序进行评价并给出成绩。
4.3 课程设计
课程设计安排在课程结束后的下一个学期初,大约2周时间,将3~5人分为一个小组。小组成员在教师的指导下,分工协作完成有较大实际价值的程序设计项目。课程设计重在培养学生对程序设计课程所学知识的创新应用能力,让学生深刻体会软件工程方法,初步掌握大型程序设计思想和开发方法,训练学生的团队协作精神以及集体责任感。
5、课程改革成效
以问题求解为主线的教学改变了程序设计基础课程的教学重点,教学内容强调程序设计思想和方法,摒弃过去以语言知识为主的做法。教学策略的改变强化了学生独立思考和动手的能力,提高了学生的实际程序设计能力。
学生在对课程评价时,认为“老师从多方面对一个问题进行阐述,激发学生的学习兴趣”“老师讲课很好,本来枯燥的语言课在老师的讲述下一下子有了趣味性,给我们留下很大的思考空间,更一步激发我们的学习兴趣”“通过本学期的学习,我学到看书的方法和程序设计思维,深刻地理解‘程序设计=算法+数据结构’的思想内涵”。
2008-2011级近4届计算机科学与技术系学生的程序设计基础课程考试成绩逐年提高,其成绩统计如表1所示。
从试卷分析可以看出,学生较以前各届学生程序分析、调试、查错及知识的综合应用能力明显提高;后续课程的主讲教师也反映学生能将该课程中学到的基本方法和技能运用到后续课程的学习中。
由于该课程为学生打好了程序设计的基础,大多数学生程序设计的信心较前有大幅度提升,因此申报校级创新实验项目并获得立项的人数正在逐年增长,参加“挑战杯”大学生课外科技作品竞赛的人数也逐渐增多,并且连续2届计算机科学与技术系的学生在省级“挑战杯”竞赛中获得奖励。