黄 逸
算法是高中新教材新增的内容,很多教师在处理教材过程中都遇到了困难.课程标准中指出算法思想是这一部分内容的核心,而算法结构与设计是对算法思想的实现,所以也是相当重要的一个部分.在此我想谈谈自己对于这部分内容的浅见.
1 从算法思想自然地过渡到算法结构
在算法思想这一节中,教材中介绍了各种各样生活中的例子以及解决他们的各不相同的算法.这种现象虽然非常生动有趣,但却难以揭示问题的本质.数学的主要特点之一就是研究事物的结构从而揭示问题的本质.所以我们对各种算法进行总结归纳,抽象出了三种基本结构,即顺序结构、选择结构和循环结构.任何一个算法都可以由这几种结构组合而成.这样,为了研究各式各样的算法,只需研究清楚这三种结构就可以了.数学上的分类思想在这里得到了充分的体现.
2 从整体上把握三种结构
教材中三种结构是顺着写下的,但我认为在实际教学过程中首先应该让学生对他们有一个整体的感觉,再逐个做详细的解说.比如为了激发学生的兴趣,可以从他们感兴趣的电脑游戏说起.电脑游戏都是程序编出来的,自然逃不开以上三种结构.游戏的一关一关的顺序进行就是一个顺序结构;在有的游戏中需要面临抉择,要选择走哪条路,这就是选择结构;当游戏中某关没有闯过,又会跳到这一关的开头,重复之前走过的路,如果很多次都闯不过去,电脑上就可能会弹出GAME OVER的字样,这其实就是循环条件不满足,跳出循环的表现.通过这样生动的例子不仅可以激发学生的兴趣,而且可以让他们对算法的三种结构有一个感性的认识,在进一步理性认识时就不会感到太抽象和吃力.
3 深刻把握三种结构的层次
在对三种结构做仔细分析时,要注意他们之间的自然过渡.例如对于顺序结构的教学可以通过以下例题做分析归纳,从而转入对选择结构的讨论.
分析 对于可以用公式解决的问题,只需把相关的变量设为一些字母并把每个数值赋给相应的字母,再输入公式,就可以得到答案.这个过程其实就类似使用计算器.然而,并不是所有的问题都有现成的公式,这时就要用到稍复杂的结构了,计算机相对计算器的优势也就显现了出来.
例2 判断某年份是否为闰年,要看此年份能否被4整除.如果不能被4整除,则是平年;若能被4整除,但不能被100整除,则该年为闰年;若能被4整除,又能被100整除,还要看能否被400整除,若能则为闰年,否则也为平年.写出判断是否为闰年的算法.
分析 这是一类比较常见的问题,如车票费,物管费,税收,成绩等级,解一元二次方程(对Δ的讨论),解不等式(对系数正负的讨论)等.虽然没有一个固定的公式,对于每种情况往往有一个相应的结果.通常用选择结构来处理.重点在于分清各种情况,用选择语句进行嵌套时一定要分清层次,注意条件和结果的一一对应.本质就是数学上的分类讨论思想.但是我们发现,以上这些问题只需要人和一个计算器就能完成,我们何必要费尽心思写算法让计算机来算呢?
例3 求1-1/2+1/3-1/4+…+1/99-1/100的算法
分析 对于这个问题,仅靠人工加计算器在短时间内难以解决,而这也是一类比较常见的问题,如有一定规律的数列的和,积.我们可以首先给出一个初始值,运用循环结构,告诉计算机你要进行的运算满足的条件,即循环条件,然后就可以把一切都交给计算机去做了.该结构中的循环变量有两类作用:1.控制所加到数的大小(如本题中的1/100)或运算结果大小(如要求数列运算结果大于某个值);2.从1开始控制循环次数(如给定了数列的项数).此类题目往往是利用计算机运算速度快的特点去解决人脑在短时间内无法解决的问题.通常这类问题没有明确的公式,只能“死算”.至此,计算机的优势才得以充分体现.
4 体现数学对于算法的重要性
虽然课程标准不要求学生自己会在计算机上编程运行,但教师还是有必要掌握这一点.这样可以真实地运行一些程序让学生感受数学对于算法的重要性.
例4 求两个数的最大公约数
分析 一个自然的想法是从两数中较小的那个数开始试,如果他能够被两数整除则为最大公约数,如不能则把他减1,再试,依次类推,直到找到一个同时整除这两数的数.这种算法乍看起来挺好的,他发挥了计算机的穷举优势.但是如果两个数字都很大,计算机的运算量就会相当大.用穷举法尝试运行一下,再用辗转相除法写程序运行一下,两者对比就会发现后者速度快得多.通过数学改进的算法效率大大提高.
例5 求方程f(x)=x3+x2-1=0在[0,1]上的近似解,精确度为0.01
分析 对于这个问题,直接穷举显然是不可能的.因为[0,1]是一个无限集,无法让计算机跑遍所有的数一个一个去尝试.所以要用二分法来解,而他的理论基础是连续函数的介值性.这更进一步说明了算法离不开数学.我们知道,程序的灵魂是算法,这里我想说,算法的灵魂是数学!
此外,北师版教材主要要求学生掌握基本的算法,对好的算法没有很高的要求,这是受课时数限制决定的,但是教师可以向学生做一个简略的介绍,因为只有在分析算法的效率时才能充分体现数学对于算法的重要性,也为学生日后的进一步学习打下基础.
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文”