算法是高中数学课程改革中的新增内容,如何把握这一内容的教学,是每一个高中数学教师面前的新课题,本文结合教学实践,谈一些基本认识.
1.关于算法的含义
算法至今没有一个严格的统一定义,教科书只是利用具体案例,以“在数学中,算法通常是指按照一定规则解决某一类问题的明确和有限的步骤”描述了算法的含义.因此,在教学实践中对算法的认识容易产生一些偏差.比如,有的人把算法理解成就是程序框图,有的人把算法理解成是程序,有的人干脆认为数学中的算法教学就是计算机课程的教学.实际上,这些认识都与算法的真正含义产生了偏差.
那么什么是算法呢?先看下面的例子.
下图中有4个牌,牌上的数字按照怎样的方式进行加、减、乘、除运算可使结果是24呢?

显然,我们可以按下式得出结果:
(1+2+3)×4=24, (1)
也可以按以下式子得出结果:
1×2×3×4=24. (2)
因为(1)式中含有数学运算“+”,但(2)式中不含数学运算“+”,所以可以说(1)式与(2)式有着不同的算法.
那么,我们能不能说(2)式就是一个算法呢?在人们认识算法的过程中,容易理解(1)式与(2)式对应着不同的算法,而且在这个时候,不少人把(2)式就当成一个算法.
事实上,在按(2)进行实际运算时,有的人会按下列的步骤进行:
第1步,1×2=2.
第2步,2×3=6.
第3步,6×4=24.
但有的人可能会按下列步骤进行:
第1步,3×4=12.
第2步,12×2=24.
第3步,24×1=24.
有的人对后一个运算过程还可能省略第三步.在我们的算法教学中,特别强调算法的“步骤”这一特点.根据这一特点,上述两个运算过程尽管都只涉及数学运算“×”,但由于每一步的运算内容不相同,因此认为它们是不同的算法.
因此,我们不能简单地认为(2)式就是一个算法.在教学中要让学生理解的算法,是像上面那样写成了“明确有限的步骤”的算法.
从这个意义上讲,在判定7是否为质数时,“因为2~6的每一个整数都不能整除7,所以7是质数”也不是我们现在所说的算法,只能说根据这些话可以写出判断7是质数的算法:
第1步,用2除7,得到余数1.因为余数不为0,所以2不能整除7.
第2步,用3除7,得到余数1.因为余数不为0,所以3不能整除7.
第3步,用4除7,得到余数3.因为余数不为0,所以4不能整除7.
第4步,用5除7,得到余数2.因为余数不为0,所以5不能整除7.
第5步,用6除7,得到余数1.因为余数不为0,所以6不能整除7.因此,7是质数.
再看一个例子.
当
时,计算函数
的值.
根据函数式
,只要给定
的值,就可以算出函数
的值.但是我们不能说
就是一个算法.
事实上,当
时,可以按下列步骤计算函数
的值:
第1步,计算
.
第2步,计算
.
第3步,计算
.
第4步,计算
.
第5步,计算
.
第6步,计算
.
第7步,计算
.
这样我们就得到了一个算法,按照这个算法一步一步地操作就可以得到结果.
如果把函数式变形为:
,
按照上述变形,可以得到另外一个算法(秦九韶算法):
第1步,计算
.
第2步,计算
.
第3步,计算
.
第4步,计算
.
第5步,计算
.
因此,“步骤”是算法的本质,而步骤的“明确与有限”是算法的重要特征.设计一个算法,就是明确算法的每一个步骤,如果解决同一个问题的两个算法的步骤不同,那么这两个算法就是不同的算法.
2.关于算法的表示
如前所述,我们可以用算法步骤来表示算法,这种形式所呈现的算法通俗易懂,但是不够精确,算法的基本结构也不清晰.为此,我们可以用程序框图表示算法,这样不仅使算法的基本逻辑结构(顺序结构、条件结构、循环结构)清楚,而且使算法的步骤更直观,也更精确.但像算法步骤一样,程序框图表示的算法仍不能被计算机所执行,因此,我们可以将算法写成计算机能执行的程序.
算法步骤、程序框图及程序是算法的不同表示形式,体现了算法“逐渐精确”的过程.算法和算法步骤、程序框图及程序的关系类似于函数和函数表示法中的表格法、图象法及解析式法的关系.算法步骤、程序框图及程序都可以表示算法,解决一个具体问题时,写出算法步骤,或者画出程序框图,或者编制程序,都是写出了解决该问题的算法.
利用算法并借助于计算机解决具体问题时,通常是先写出算法步骤,再根据算法步骤画程序框图,然后根据程序框图编制程序,最后在计算机上执行算法并解决问题.
下面的例子说明了如何设计算法求两个整数的最大公约数的过程.
更相减损术:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也.以等数约之”.
算法分析:
更相减损术的意思是:任意给定两个正整数,判断它们是否都是偶数.若是,用2约简;若不是,以较大的数减去较小的数,接着把所得的差与较小的数比较,并以大数减小数,继续这个操作,直到所得的数相等为止,则这个数(等数)或这个数与约简的数的乘积就是所求的最大公约数.
由此可得算法步骤:
第1步,给定两个正整数m,n,不妨设m>n.
第2步,若m,n都是偶数,则不断用2约简之,使它们不同时是偶数,约简后的两个数仍记为m,n(m>n).
第3步,求差d=m-n.
第4步,判断是否有d=n.若是,则得到
(
是约简整数的2的个数);否则将n,d中的较大者记为m,较小者记为n,重复第3步.
根据算法步骤,可得程序框图,并进而写出程序.
程序框图:

程序:
3.关于算法的基本逻辑结构
顺序结构、条件结构、循环结构是算法的三种基本逻辑结构,任何算法都可以由这三种基本逻辑结构构成.因此,在高中阶段进行算法教学时不必增加其他逻辑结构(如goto语句表达的结构).
在算法的三种基本逻辑结构中,较难掌握的是循环结构,其原因是循环结构分当型循环结构(如图1)与直到型循环结构(如图2),而在实际运用时,容易将这两种循环结构混淆,或者在用程序框图表示这两种循环结构时画错框图,如将当型循环结构画成图3的形式,而把直到型循环结构画成图4的形式.
(A) (B)
(图1) (图2)


(图3) (图4)
当型循环结构与直到型循环结构的同异点与对应的算法语句见下表:
|
|
当型循环结构
|
直到型循环结构
|
|
相同点
|
1.有循环体被重复执行;2.包含条件结构用以控制循环次数.
|
|
不同点
|
1.先判断条件再执行循环体;
2.条件符合时执行循环体,直到条件不符合时为止.
|
1.先执行循环体再判断条件;
2.条件不符合时执行循环体,直到条件符合时为止.
|
|
与之对应的算法语句
|
WHILE 条件
循环体
WEND
|
DO
循环体
LOOP UNTIL 条件
|
因此,以下程序框图(图5)中的循环结构是错误的,应该修改为图6的形式.


(图5) (图6)
同样,图7表示的程序框图应该修改为图8表示的程序框图:
(图7) (图8)
在用算法步骤,程序框图或程序中的任何一种形式表示算法时,算法的基本逻辑结构都是构成要素,只是表现形式不同.在用程序表示算法时,循环结构用循环语句表示.循环语句除WHILE型循环语句和DO型循环语句外,常用的还有FOR型循环语句.但是凡用FOR型循环语句表示的循环结构,均可以用WHILE型循环语句表示,但反之不然.所以,在实际教学时可以不讲FOR型循环语句.
4.关于算法思想及其应用
在算法教学中,体会算法思想并能根据算法思想解决实际问题是重要的教学目标之一.那么什么是算法思想呢?
简单地讲,对需要解决的问题,通过确定解决问题的算法,并利用确定的算法解决问题的数学思想就称为算法思想.
我们可以将运用算法思想解决问题的过程归纳为下列的步骤:

由此可见,运用算法思想解决问题的过程本身也是一个算法.
由于算法思想的朴实性,它可以渗透到许多领域的问题解决中去.特别地,算法思想在数学本身的学习与研究中有着广泛的应用.当我们的学生学习了算法,并能从算法的角度思考解决问题时,他(她)解决问题的能力将会发生质的飞跃.因此,算法教学不仅仅是算法知识的教学,而且更是数学思维方法与策略的教学,它不应该也不可能在12课时内完成,需要教师在整个数学教学过程中进行渗透.
下面我们举两例来说明算法思想的应用.
问题