《算法及其学习的意义》李亚玲 (北京师范大学数学系 100875) 数学通报 2004 年 第2 期
在新高中数学课程标准中, 我们注意到算法作为必修部分进入了中学数学. 标准中写到:“算法是一个全新的课题, 已经成为计算机科学的核心,它在科学技术和社会发展中起着越来越重要的作用. 算法的思想和初步知识,也正在成为普通公民的常识. 在必修课程中将学习算法的基本思想和初步知识, 算法思想将贯穿高中数学课程的相关部分. ”可是, 到底什么是算法?算法有什么特点?算法由哪些要素构成?算法引进中学的意义是什么?本文试图从这几个问题入手,进行一番探讨.
1 什么是算法
算法(algorithm) 一词源于算术(algorism) . 精略地说,算术方法是一个由已知推求未知的运算过程. 后来, 人们把它推广到一般, 把进行某一工作的方法和步骤称为算法。
广义地说,菜谱是做菜肴的算法,空调说明书是空调使用的算法,歌谱是一首歌曲的算法. 这里我们只讨论计算机能实现的算法, 比如解方程的算法,函数求值的算法,作图问题的算法等等.
算法作为一个名词, 在中学教科书中并没有出现过,但是我们却熟悉许多问题的算法,比如我们知道解一元二次方程的算法, 求解一元一次不等式,一元二次不等式的算法,我们还会解线性方程组的算法,求两个数的最大公因数的算法.
比如说, 解一元一次方程的算法概括起来可以说是:
1) 去分母;
2) 去括号;
3) 移项;
4) 合并同类项;
5) 用未知数的系数的倒数乘方程的两端.
当然这个算法是很抽象的, 要交给计算机执行,还有待于进一步细化.
算法作为解决问题的方法有个重要的特点———有限性,如果一个解决问题的方法只是在理论上成立,需要进行无限步,那么这个方法就不能称为解决这个问题的一个算法, 也就是说算法必须在有限步内结束.
2 算法的构成要素
算法含有两大要素:
一是操作. 比如做菜的操作包括:蒸、炸、炒、煎、煮、焖等等; 驾驶汽车的操作包括:开电门、换档、左转、右转、开灯、关灯等等.
计算机算法由计算机实现, 组成它的操作主要包括:算术运算( +、- 、×、÷) , 逻辑运算(与、或、非等) ,关系运算( < 、> 、= 、≤、≥、≠等) ,函数运算等等.
二是控制结构. 控制结构的作用是控制算法各操作的执行顺序. 一个算法通常由三种基本结构组成,这三种基本结构是:
2.1 顺序结构.
顺序结构的算法的操作顺序是按照书写顺序执行的.
比如设计算法确定给定线段AB 的5 等分点.解决这个问题的算法如下:

a. 从已知线段的左端点A 出发,作一射线;
b. 在射线上任取一点C ,并作线段CE = EF= FG = GD = AC ,那么线段AD = 5AC;
c. 连接DB ;
d. 过C作BD的平行线,交线段AB 于M ,这样点M 就是线段AB 的5 等分点.
像这样的算法就是一个顺序结构的算法, 只要按照书写顺序完成以上四个步骤, 就能得到线段AB 的5 等分点.
2.2 选择结构
选择结构的算法是根据指定的条件进行判断,由判断的结果决定选取执行两条分枝路径中的一条.
对任意给定的三个整数x , y , z , 设计求出其最大值. 这个算法是简单的,只要先比较出x 和y ,得到一个大的值,再用这个值与z 比较,这两者中大的值即为所求的最大值.
可以将这个算法描述为:

(1) 输入变量: x , y , z ;
(2) b : = x ;
(3) 比较b 和y :如果b <y ,则b : = y .
(4) 比较b 与z :如果b <z ,则b : = z .
(5) 输出b.
在这个算法中, 我们根据变量b比较的不同的结果决定后面的操作.
2.3 循环结构.
循环结构的算法要根据条件是否满足决定是否继续执行循环体中的操作.
注意到,前面求三个数中的最大数,我们进行了两次比较,假如我们要找出100 个数中的最大数,按照上述算法就需要比较99 次, 算法步骤就是101 步. 既不便于书写, 也不便于阅读. 解决这个问题,就需要利用循环结构了,对于求100 个数中的最大数的问题, 相应的算法可以用下列流程图来表示:

像这样的算法控制结构我们称为循环结构.
3 算法学习的意义
“计算机既是数学的创造物,又是数学的创造者”, 而算法既是计算机理论和实践的核心,也是数学的最基本内容之一. 甚至有人说, 数学学习的主要作用是形成“算法思维”. 算法有着悠久的发展历史,中国古代数学曾经以算法为特色, 取得了举世瞩目的辉煌成就. 在已经逐步进入信息化社会的今天,算法的基本知识、方法、思想日益融入人们社会生活的方方面面,已经也应该成为现代人所应具备的一种基本素质.
我们认为学生学习算法有以下几个方面的意义:
3.1 算法学习有助于我们全面的理解运算能力
很多时候,人们对运算存在一些误解,认为运算就是按照各种运算法则进行加、减、乘、除,从而学习运算就是背诵书本中给出的计算法则, 形成一些基本的计算技巧,也就是说,能够根据熟记的法则,迅速的计算给定式子的正确答案.
实际上, 按照算法规则进行逻辑推理而获得正确结果仅仅是计算的很小的一个方面, 更重要的是,在运算中构造、设计、选择一个合理的算法,理解相应的算理. 在算法学习中,我们要让学生给出一个问题的不同算法,并比较这些算法的优劣,并作出选择,从而提高效率,而这个过程才是一个真正的运算过程, 因此算法学习使得我们更加全面的理解运算能力.
3.2 算法学习能够培养学生的逻辑思维能力
我们常常说数学是思维的体操, 能够训练学生的思维能力. 算法作为数学的一个基本内容,在培养学生的逻辑思维能力上能够发挥重要的作用.
算法是解题方法的精确描述. 算法一方面具有具体化、程序化、机械化的特点, 同时又有高度抽象性、概括性和精确性. 因此, 将解决具体问题的方法整理成算法的过程是一个条理化, 精确化和逻辑化的过程, 有助于培养学生的逻辑思维能力.
我们学过一元一次方程的求解, 任意给一个一元一次方程,比如说
3 x + 5 = 0
我们都会解这样的方程. 它的解是
x = - 5/ 3.
我们说计算机能够帮助人完成很多工作. 但是计算机毕竟和人脑有着本质的区别, 它是机械的,在没有的指令的情况下, 它是不会思维的, 不能进行任何判断. 算法是连接人和计算机的纽带,这些思维的过程, 判断的过程我们都要精心的设计到算法里面,作为指令教给计算机去完成.
比如我们需要写一个算法让计算机来解方程.
ax + b = 0
其中参数由键盘任意输入, 让计算机输出结果.
我们能说凡是这样的方程就让计算机输出:
“x = - b/ a”就可以了吗?显然, 这是有问题的,因为当a = 0 的情形下,这种输出是错误的,也就是说我们需要分情况讨论:
1) 输入a , b ;
2) 若a ≠0 ,则输出x = - b/ a ;
如果a = 0 呢?实际上方程变成了b = 0 ,这样的方程的解又是什么呢?看来还要看看参数b ,若b = 0 ,则方程为0 = 0 ,若b = 5 ,则方程为5 =0 ,这两种情形显然是不一样的, 前者的解是任意实数, 而后者则是无实数解, 因此继续我们的算法:
3) 若a = 0 ,还要对b 进行讨论:
( i) 若b = 0 ,方程的解是全体实数;
( ii) 若b ≠0 ,方程没有实数解.
对于这样一个看似简单的方程还有这么多门道呢?因为, 作为一个算法必须是精确的, 任何人按照(包括计算机) 这个步骤执行都能得到这个问题的求解.
我们可以从以上例子看出, 书写一个算法的过程是一个思维的整理过程,是一个精确化、条理化的过程,因此有助于培养学生的逻辑思维能力.
参考文献
1 曹才翰. 中学数学教学概论. 北京:北京师范大学出版社,1990
2 曹才翰,章建跃. 数学教育心理学. 北京:北京师范大学出版社,1999
3 中华人民共和国教育部. 普通高中数学课程标准. 北京:人民教育出版社,2003
4 谭浩强,张基温,唐永炎. c 语言程序设计教程. 北京:高等教育出版社,1992

资料:算法及其学习的意义