必修三数学 算法的基本思想 教案
三维目标
1.正确理解算法的概念,掌握算法的基本特点. 2.通过例题教学,使学生体会设计算法的基本思路.
3.通过有趣的实例使学生了解算法这一概念的同时,激发学生学习数学的兴趣.
重点难点
教学重点:算法的含义及应用.
教学难点:写出解决一类问题的算法. 课时安排 1课时
教学过程 导入新课
思路1. 一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量狼就会吃掉羚羊.此人如何将动物完好地转移过河?请同学们写出解决问题的步骤,解决这一问题将要用到我们今天学习的内容——算法.
思路2. 大家都看过赵本山与宋丹丹演的小品吧,宋丹丹说了一个笑话,把大象装进冰箱总共分几步?
答案:分三步,第一步:把冰箱门打开;第二步:把大象装进去;第三步:把冰箱门关上.
上述步骤构成了把大象装进冰箱的算法,今天我们开始学习算法的概念. 思路3. 算法不仅是数学及其应用的重要组成部分,也是计算科学的重要基础.在现代社会里,计算机已成为人们日常生活和工作中不可缺少的工具.如听音乐、看电影、玩游戏、打字、画卡通画、处理数据都能通过计算机实现,计算机是怎样工作的呢?要想弄清楚这个问题,算法的学习是一个开始.
推进新课 新知探究 提出问题
1.解二元一次方程组有几种方法?
⎧x -2y =-1,①
2.结合实例⎨ 总结用加减消元法解二元一次方程组的步
2x +y =1,②⎩
骤.
⎧x -2y =-1,①
3.结合实例⎨
⎩2x +y =1,②
总结用代入消元法解二元一次方程组的步
骤.
4.请写出解一般二元一次方程组的步骤. 5.根据上述实例谈谈你对算法的理解. 6.请同学们总结算法的特征. 7.请思考我们学习算法的意义. 讨论结果:
1.代入消元法和加减消元法. 2.回顾二元一次方程组 ⎧⎨x -2y =-1,①⎩2x +y =1②
的求解过程,我们可以归纳出以下步骤: 第一步,①+②×2,得5x =1. ③
第二步,解③,得x =1
5
第三步,②-①×2,得 5y =3. ④
第四步,解④,得y =3
5⎧⎪x =15,
第五步,得到方程组的解为⎨
⎪⎩y =35.
3.用代入消元法解二元一次方程组
⎧⎨x -2y =-1,①⎩2x +y =1,②
我们可以归纳出以下步骤: 第一步,由①得 x =2y -1. ③
第二步,把③代入②,得2(2y -1) +y =1. ④ 第三步,解④得
y =35
. ⑤
第四步,把⑤代入③,得x =2×31
51=5⎧x =1,第五步,得到方程组的解为⎪⎨
5
⎪⎩y =35.
4.对于一般的二元一次方程组
⎧⎨a 1x +b 1y =c 1,
①⎩a 2x +b 2y =c 2,
②
其中a 1b 2-a 2b 1≠0,可以写出类似的求解步骤:
第一步,①×b 2-②×b 1,得 (a 1b 2-a 2b 1) x =b 2c 1-b 1c 2. ③
第二步,解③,得x =b 2c 1-b 1c 2
a 1b 2-a 2b 1
第三步,②×a 1-①×a 2,得 (a 1b 2-a 2b 1) y =a 1c 2-a 2c 1. ④
第四步,解④,得y =
a 1c 2-a 2c 1
a 1b 2-a 2b 1
21111222
12222111
b c -b c ⎧x =
⎪a b -a b ,
第五步,得到方程组的解为⎨
a c -a c y =⎪⎩a b -a b .
5.算法的定义:广义的算法是指完成某项工作的方法和步骤,那么我们可
以说洗衣机的使用说明书是操作洗衣机的算法,菜谱是做菜的算法,等等.
在数学中,算法通常是指按照一定规则解决某一类问题的明确有限的步骤. 现在,算法通常可以编成计算机程序,让计算机执行并解决问题.
6.算法的特征:①确定性:算法的每一步都应当做到准确无误、“不重不漏”.“不重”是指不是可有可无的,甚至无用的步骤,“不漏” 是指缺少哪一步都无法完成任务.②逻辑性:算法从开始的“第一步”直到“最后一步”之间做到环环相扣,分工明确,“前一步”是“后一步”的前提, “后一步”是“前一步”的继续.③有穷性:算法要有明确的开始和结束,当到达终止步骤时所要解决的问题必须有明确的结果,也就是说必须在有限步内完成任务,不能无限制地持续进行.
7.在解决某些问题时,需要设计出一系列可操作或可计算的步骤来解决问题,这些步骤称为解决这些问题的算法.也就是说,算法实际上就是解决问题的一种程序性方法.算法一般是机械的,有时需进行大量重复的计算,它的优点是一种通法,只要按部就班地去做,总能得到结果.因此算法是计算科学的重要基础.
应用示例
思路1
1在给定素数表的条件下,设计算法,将936分解成素因数的乘积.(4 000以内的素数表见教科书附录1)
分析:1. 查表判断936是否为素数: (1)如果936是素数,则分解结束;
(2)如果936不是素数,则进行第2步.
2.确定936的最小素因数:2. 936=2×468. 3.查表判断468是否为素数: (1)如果468是素数,则分解结束;
(2)如果468不是素数,则重复上述步骤,确定468的最小素因数. 重复进行上述步骤,直到找出936的所有素因数. 解:算法步骤如下:
1.判断936是否为素数:否.
2.确定936的最小素因数:2. 936=2×468. 3.判断468是否为素数:否.
4.确定468的最小素因数:2. 936=2×2×234. 5.判断234是否为素数:否.
6.确定234的最小素因数:2 936=2×2×2×117. 7.判断117是否为素数:否.
8.确定117的最小素因数:3. 936=2×2×2×3×39.
9.判断39是否为素数:否.
10.确定39的最小素因数:3. 936=2×2×2×3×3×13. 11.判断13是否为素数:13是素数,所以分解结束. 分解结果是936=2×2×2×3×3×13. 点评:以上步骤是解决素因数分解问题的一个过程,只要依照这一系列步骤,都能解决这个问题.我们把这一系列步骤称为解决这个问题的一个算法.
变式训练
设计一个算法,求840与1 764的最大公因数.
分析:我们已经学习了对自然数进行素因数分解的方法,下面的算法就是在此基础上设计的.解答这个问题需要按以下思路进行.
首先,对两个数分别进行素因数分解: 840=23×3×5×7, 1 764=22×32×72. 其次,确定两数的公共素因数:2,3,7.
接着,确定公共素因数的指数:对于公共素因数2,22是1 764的因数,23
是840的因数,因此22是这两个数的公因数,这样就确定了公共素因数2的指数为2. 同样,可以确定出公因数3和7的指数均为1. 这样,就确定了840与1 764
211
的最大公因数为2×3×7=84.
解:算法步骤如下:
1.先将840进行素因数分解:840=23×3×5×7; 2.然后将1 764进行素因数分解:1 764=22×32×72; 3.确定它们的公共素因数:2,3,7;
4.确定公共素因数的指数:公共素因数2,3,7的指数分别为2,1,1; 5.最大公因数为22×31×71=84.
例2 一位商人有9枚银元,其中有1枚略轻的是假银元.你能用天平(不用砝码) 将假银元找出来吗?
分析:最容易想到的解决这个问题的一种方法是:把9枚银元按顺序排成一列,先称前2枚,若不平衡,则可找出假银元;若平衡,则2枚银元都是真的,再依次与剩下的银元比较,就能找出假银元.
图1
解:按照下列步骤,就能将假银元找出来:
1.任取2枚银元分别放在天平的两边.如果天平左右不平衡,则轻的一边就是假银元;如果天平平衡,则进行第2步.
2.取下右边的银元,放在一边,然后把剩余的7枚银元依次放在右边进行称量,直到天平不平衡,偏轻的那一枚就是假银元.
这种算法最少要称1次,最多要称7次.是不是还有更好的办法,使得称量次数少一些?我们可以采用下面的方法:
图2
1.把银元分成3组,每组3枚.
2.先将两组分别放在天平的两边.如果天平不平衡,那么假银元就在轻的那一组;如果天平左右平衡,则假银元就在未称的第3组里.
3.取出含假银元的那一组,从中任取两枚银元放在天平的两边.如果左右不平衡,则轻的那一边就是假银元;如果天平两边平衡,则未称的那一枚就是假银元.
点评:经分析发现,后一种算法只需称量2次,这种做法要明显好于前一种做法.当然,这两种方法都具有一般性,同样适用于n 枚银元的情形.这是信息论中的一个模型,可以帮助我们找出某些特殊信息.
从上面的问题中可以看出,同一个问题可能存在着多种算法,其中一些可能要比另一些好.在实际问题和算法理论中,找出好的算法是一项重要的工作.
思路2
例1 (1)设计一个算法,判断7是否为质数; (2)设计一个算法,判断35是否为质数.
分析:(1)根据质数的定义,可以这样判断:依次用2~6除7,如果它们中有一个能整除7,则7不是质数,否则7是质数.
解:(1)①用2除7,得到余数1. 因为余数不为0,所以2不能整除7. ②用3除7,得到余数1. 因为余数不为0,所以3不能整除7. ③用4除7,得到余数3. 因为余数不为0,所以4不能整除7. ④用5除7,得到余数2. 因为余数不为0,所以5不能整除7.
⑤用6除7,得到余数1. 因为余数不为0,所以6不能整除7. 因此,7是质数.
(2)类似地,可写出“判断35是否为质数”的算法:①用2除35,得到余数1. 因为余数不为0,所以2不能整除35.
②用3除35,得到余数2. 因为余数不为0,所以3不能整除35. ③用4除35,得到余数3. 因为余数不为0,所以4不能整除35.
④用5除35,得到余数0. 因为余数为0,所以5能整除35. 因此,35不是质数.
点评:上述算法有很大的局限性,用上述算法判断35是否为质数还可以,如果判断1 997是否为质数就比较麻烦了,因此,我们需要寻找更实用的算法步骤.
变式训练
请写出判断n (n >2) 是否为质数的算法.
分析:对于任意的整数n (n >2) ,若用i 表示2~(n -1) 中的任意整数,则“判断n 是否为质数”的算法包含下面的重复操作:用i 除n ,得到余数r . 判断余数r 是否为0,若是,则不是质数;否则,将i 的值增加1,再执行同样的操作.
这个操作一直要进行到i 的值等于(n -1) 为止.
解:1. 给定大于2的整数n . 2.令i =2.
3.用i 除n ,得到余数r .
4.判断“r =0”是否成立.若是,则n 不是质数,结束算法;否则,将i 的值增加1,仍用i 表示.
5.判断“i >(n -1)”是否成立.若是,则n 是质数,结束算法;否则,返回第3步.
例2 写出用“二分法”求方程x 2-2=0 (x >0) 的近似解的算法.
分析:令f (x ) =x 2-2,则方程x 2-2=0 (x >0) 的解就是函数f (x ) 的零点. “二分法”的基本思想是:把函数f (x ) 的零点所在的区间[a ,b ]〔满足f (a )·f (b ) <0〕“一分为二”,得到[a ,m ]和[m ,b ].根据“f (a )·f (m ) <0”是否成立,取出零点所在的区间[a ,m ]或[m ,b ],仍记为[a ,b ].对所得的区间[a ,b ]重复上述步骤,直到包含零点的区间[a ,b ]“足够小”,则[a ,b ]内的数可以作为方程的近似解.
解:1. 令f (x ) =x 2-2,给定精度d .
2.确定区间[a ,b ],满足f (a )·f (b ) <0.
a +b
3.取区间中点m = 2
4.若f (a )·f (m ) <0,则含零点的区间为[a ,m ];否则,含零点的区间为[m ,b ].将新得到的含零点的区间仍记为[a ,b ].
5.判断[a ,b ]的长度是否小于d 或f (m ) 是否等于0. 若是,则m 是方程的近似解;否则,返回第三步.
当d
0.0052的近似解的一个算法.
点评:算法一般是机械的,有时需要进行大量的重复计算,只要按部就班地去做,总能算出结果,通常把算法过程称为“数学机械化”.数学机械化的最大优点是它可以借助计算机来完成,实际上处理任何问题都需要算法.如:中国象棋有中国象棋的棋谱、走法、胜负的评判准则;而国际象棋有国际象棋的棋谱、走法、胜负的评判准则;再比如申请出国有一系列的先后手续,购买物品也有相关的手续„„
变式训练
求方程f (x ) =x 3+x 2-1=0在区间[0,1]上的近似解,精度为0.01. 解:根据上述分析,可以通过下列步骤求得方程的近似解:
1.因为f (0)=-1,f (1)=1,f (0)·f (1)<0,则区间[0,1]为有解区间,精度1-0=1>0.01;
2.取[0,1]的区间中点0.5; 3.计算f (0.5)=-0.625;
4.由于f (0.5)·f (1)<0,可得新的有解区间[0.5,1],精度1-0.5=0.5>0.01;
5.取[0.5,1]的区间中点0.75; 6.计算f (0.75)=-0.015 625;
7.由于f (0.75)·f (1)<0,可得新的有解区间[0.75,1],精度1-0.75=0.25>0.01;
„„
当得到新的有解区间[0.75,0.757 82]时,由于|0.757 82-0.75|=0.007 82<0.01,
该区间精度已满足要求,所以取区间[0.75,0.757 82]的中点0.753 91,它是方程的一个近似解.
例3 一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量狼就会吃掉羚羊.此人如何将动物转移过河?请设计算法.
分析:任何动物同船不用考虑动物的争斗但需考虑承载的数量,还应考虑到两岸的动物都得保证狼的数量要小于羚羊的数量,故在算法的构造过程中应尽可能保证船里面有狼,这样才能使得两岸的羚羊数量占到优势.
解:具体算法如下: 算法步骤:
1.人带两只狼过河,并自己返回. 2.人带一只狼过河,自己返回.
3.人带两只羚羊过河,并带两只狼返回. 4.人带一只羚羊过河,自己返回. 5.人带两只狼过河.
点评:算法是解决某一类问题的精确描述,有些问题使用形式化、程序化的刻画是最恰当的.这就要求我们在写算法时应精练、简洁、清晰地表达,要善于分析任何可能出现的情况,体现思维的严密性和完整性.本题型解决问题的算法中某些步骤重复进行多次才能解决,在现实生活中,很多较复杂的问题经常遇到这样的问题,设计算法的时候,如果能够合适地利用某些步骤的重复,不但可以使问题变得简单,而且可以提高工作效率.
变式训练
喝一杯茶需要这样几个步骤:洗刷水壶、烧水、洗刷茶具、沏茶.如何安排这几个步骤?请给出两种算法,并加以比较.
分析:本题主要为加深对算法概念的理解,可结合生活常识对问题进行分析,然后解决问题.
解:算法一: 1.洗刷水壶. 2.烧水.
3.洗刷茶具. 4.沏茶.
算法二:
1.洗刷水壶.
2.烧水,烧水的过程当中洗刷茶具. 3.沏茶.
上面的两种算法都符合题意,但是算法二运用了统筹方法的原理,因此这个算法要比算法一更科学.
点评:解决一个问题可有多个算法,可以选择其中最优的、最简单的、步骤尽量少的算法.
知能训练
设计算法判断一元二次方程ax 2+bx +c =0是否有实数根. 解:算法步骤如下:
1.输入一元二次方程的系数:a ,b ,c .
2
2.计算Δ=b -4ac 的值.
3.判断Δ≥0是否成立.若Δ≥0成立,输出“方程有实根”;否则输出“方程无实根”,结束算法.
点评:用算法解决问题的特点是:具有很好的程序性,是一种通法,并且具有确定性、逻辑性、有穷性.
拓展提升
中国网通规定:拨打市内电话时,如果不超过3分钟,则收取话费0.22元;如果通话时间超过3分钟,则超出部分按每分钟0.1元收取通话费,不足一分钟按一分钟计算.设通话时间为t (分钟) ,通话费用为y (元) ,如何设计一个程序,计算通话的费用?
解:算法分析:
数学模型实际上为y 关于t 的分段函数. 关系式如下:
⎧0.22,0
y =⎨0.22+0.1 t -3 ,t >3,t ∈Z ,
⎩0.22+0.1 [t -3]+1 ,t >3,t ∉Z .
其中[t -3]表示取不大于t -3的整数部分. 算法步骤如下: 1.输入通话时间t .
2.如果t ≤3,那么y = 0.22;否则判断t ∈Z 是否成立,若成立执行 y = 0.2+0.1× (t -3) ;否则执行y = 0.2+0.1×( [t -3]+1) . 3.输出通话费用y . 课堂小结
1.正确理解算法这一概念.
2.结合例题掌握算法的特点,能够写出常见问题的算法. 作业
课本本节练习1、练习2.
必修三数学 算法的基本思想 教案
三维目标
1.正确理解算法的概念,掌握算法的基本特点. 2.通过例题教学,使学生体会设计算法的基本思路.
3.通过有趣的实例使学生了解算法这一概念的同时,激发学生学习数学的兴趣.
重点难点
教学重点:算法的含义及应用.
教学难点:写出解决一类问题的算法. 课时安排 1课时
教学过程 导入新课
思路1. 一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量狼就会吃掉羚羊.此人如何将动物完好地转移过河?请同学们写出解决问题的步骤,解决这一问题将要用到我们今天学习的内容——算法.
思路2. 大家都看过赵本山与宋丹丹演的小品吧,宋丹丹说了一个笑话,把大象装进冰箱总共分几步?
答案:分三步,第一步:把冰箱门打开;第二步:把大象装进去;第三步:把冰箱门关上.
上述步骤构成了把大象装进冰箱的算法,今天我们开始学习算法的概念. 思路3. 算法不仅是数学及其应用的重要组成部分,也是计算科学的重要基础.在现代社会里,计算机已成为人们日常生活和工作中不可缺少的工具.如听音乐、看电影、玩游戏、打字、画卡通画、处理数据都能通过计算机实现,计算机是怎样工作的呢?要想弄清楚这个问题,算法的学习是一个开始.
推进新课 新知探究 提出问题
1.解二元一次方程组有几种方法?
⎧x -2y =-1,①
2.结合实例⎨ 总结用加减消元法解二元一次方程组的步
2x +y =1,②⎩
骤.
⎧x -2y =-1,①
3.结合实例⎨
⎩2x +y =1,②
总结用代入消元法解二元一次方程组的步
骤.
4.请写出解一般二元一次方程组的步骤. 5.根据上述实例谈谈你对算法的理解. 6.请同学们总结算法的特征. 7.请思考我们学习算法的意义. 讨论结果:
1.代入消元法和加减消元法. 2.回顾二元一次方程组 ⎧⎨x -2y =-1,①⎩2x +y =1②
的求解过程,我们可以归纳出以下步骤: 第一步,①+②×2,得5x =1. ③
第二步,解③,得x =1
5
第三步,②-①×2,得 5y =3. ④
第四步,解④,得y =3
5⎧⎪x =15,
第五步,得到方程组的解为⎨
⎪⎩y =35.
3.用代入消元法解二元一次方程组
⎧⎨x -2y =-1,①⎩2x +y =1,②
我们可以归纳出以下步骤: 第一步,由①得 x =2y -1. ③
第二步,把③代入②,得2(2y -1) +y =1. ④ 第三步,解④得
y =35
. ⑤
第四步,把⑤代入③,得x =2×31
51=5⎧x =1,第五步,得到方程组的解为⎪⎨
5
⎪⎩y =35.
4.对于一般的二元一次方程组
⎧⎨a 1x +b 1y =c 1,
①⎩a 2x +b 2y =c 2,
②
其中a 1b 2-a 2b 1≠0,可以写出类似的求解步骤:
第一步,①×b 2-②×b 1,得 (a 1b 2-a 2b 1) x =b 2c 1-b 1c 2. ③
第二步,解③,得x =b 2c 1-b 1c 2
a 1b 2-a 2b 1
第三步,②×a 1-①×a 2,得 (a 1b 2-a 2b 1) y =a 1c 2-a 2c 1. ④
第四步,解④,得y =
a 1c 2-a 2c 1
a 1b 2-a 2b 1
21111222
12222111
b c -b c ⎧x =
⎪a b -a b ,
第五步,得到方程组的解为⎨
a c -a c y =⎪⎩a b -a b .
5.算法的定义:广义的算法是指完成某项工作的方法和步骤,那么我们可
以说洗衣机的使用说明书是操作洗衣机的算法,菜谱是做菜的算法,等等.
在数学中,算法通常是指按照一定规则解决某一类问题的明确有限的步骤. 现在,算法通常可以编成计算机程序,让计算机执行并解决问题.
6.算法的特征:①确定性:算法的每一步都应当做到准确无误、“不重不漏”.“不重”是指不是可有可无的,甚至无用的步骤,“不漏” 是指缺少哪一步都无法完成任务.②逻辑性:算法从开始的“第一步”直到“最后一步”之间做到环环相扣,分工明确,“前一步”是“后一步”的前提, “后一步”是“前一步”的继续.③有穷性:算法要有明确的开始和结束,当到达终止步骤时所要解决的问题必须有明确的结果,也就是说必须在有限步内完成任务,不能无限制地持续进行.
7.在解决某些问题时,需要设计出一系列可操作或可计算的步骤来解决问题,这些步骤称为解决这些问题的算法.也就是说,算法实际上就是解决问题的一种程序性方法.算法一般是机械的,有时需进行大量重复的计算,它的优点是一种通法,只要按部就班地去做,总能得到结果.因此算法是计算科学的重要基础.
应用示例
思路1
1在给定素数表的条件下,设计算法,将936分解成素因数的乘积.(4 000以内的素数表见教科书附录1)
分析:1. 查表判断936是否为素数: (1)如果936是素数,则分解结束;
(2)如果936不是素数,则进行第2步.
2.确定936的最小素因数:2. 936=2×468. 3.查表判断468是否为素数: (1)如果468是素数,则分解结束;
(2)如果468不是素数,则重复上述步骤,确定468的最小素因数. 重复进行上述步骤,直到找出936的所有素因数. 解:算法步骤如下:
1.判断936是否为素数:否.
2.确定936的最小素因数:2. 936=2×468. 3.判断468是否为素数:否.
4.确定468的最小素因数:2. 936=2×2×234. 5.判断234是否为素数:否.
6.确定234的最小素因数:2 936=2×2×2×117. 7.判断117是否为素数:否.
8.确定117的最小素因数:3. 936=2×2×2×3×39.
9.判断39是否为素数:否.
10.确定39的最小素因数:3. 936=2×2×2×3×3×13. 11.判断13是否为素数:13是素数,所以分解结束. 分解结果是936=2×2×2×3×3×13. 点评:以上步骤是解决素因数分解问题的一个过程,只要依照这一系列步骤,都能解决这个问题.我们把这一系列步骤称为解决这个问题的一个算法.
变式训练
设计一个算法,求840与1 764的最大公因数.
分析:我们已经学习了对自然数进行素因数分解的方法,下面的算法就是在此基础上设计的.解答这个问题需要按以下思路进行.
首先,对两个数分别进行素因数分解: 840=23×3×5×7, 1 764=22×32×72. 其次,确定两数的公共素因数:2,3,7.
接着,确定公共素因数的指数:对于公共素因数2,22是1 764的因数,23
是840的因数,因此22是这两个数的公因数,这样就确定了公共素因数2的指数为2. 同样,可以确定出公因数3和7的指数均为1. 这样,就确定了840与1 764
211
的最大公因数为2×3×7=84.
解:算法步骤如下:
1.先将840进行素因数分解:840=23×3×5×7; 2.然后将1 764进行素因数分解:1 764=22×32×72; 3.确定它们的公共素因数:2,3,7;
4.确定公共素因数的指数:公共素因数2,3,7的指数分别为2,1,1; 5.最大公因数为22×31×71=84.
例2 一位商人有9枚银元,其中有1枚略轻的是假银元.你能用天平(不用砝码) 将假银元找出来吗?
分析:最容易想到的解决这个问题的一种方法是:把9枚银元按顺序排成一列,先称前2枚,若不平衡,则可找出假银元;若平衡,则2枚银元都是真的,再依次与剩下的银元比较,就能找出假银元.
图1
解:按照下列步骤,就能将假银元找出来:
1.任取2枚银元分别放在天平的两边.如果天平左右不平衡,则轻的一边就是假银元;如果天平平衡,则进行第2步.
2.取下右边的银元,放在一边,然后把剩余的7枚银元依次放在右边进行称量,直到天平不平衡,偏轻的那一枚就是假银元.
这种算法最少要称1次,最多要称7次.是不是还有更好的办法,使得称量次数少一些?我们可以采用下面的方法:
图2
1.把银元分成3组,每组3枚.
2.先将两组分别放在天平的两边.如果天平不平衡,那么假银元就在轻的那一组;如果天平左右平衡,则假银元就在未称的第3组里.
3.取出含假银元的那一组,从中任取两枚银元放在天平的两边.如果左右不平衡,则轻的那一边就是假银元;如果天平两边平衡,则未称的那一枚就是假银元.
点评:经分析发现,后一种算法只需称量2次,这种做法要明显好于前一种做法.当然,这两种方法都具有一般性,同样适用于n 枚银元的情形.这是信息论中的一个模型,可以帮助我们找出某些特殊信息.
从上面的问题中可以看出,同一个问题可能存在着多种算法,其中一些可能要比另一些好.在实际问题和算法理论中,找出好的算法是一项重要的工作.
思路2
例1 (1)设计一个算法,判断7是否为质数; (2)设计一个算法,判断35是否为质数.
分析:(1)根据质数的定义,可以这样判断:依次用2~6除7,如果它们中有一个能整除7,则7不是质数,否则7是质数.
解:(1)①用2除7,得到余数1. 因为余数不为0,所以2不能整除7. ②用3除7,得到余数1. 因为余数不为0,所以3不能整除7. ③用4除7,得到余数3. 因为余数不为0,所以4不能整除7. ④用5除7,得到余数2. 因为余数不为0,所以5不能整除7.
⑤用6除7,得到余数1. 因为余数不为0,所以6不能整除7. 因此,7是质数.
(2)类似地,可写出“判断35是否为质数”的算法:①用2除35,得到余数1. 因为余数不为0,所以2不能整除35.
②用3除35,得到余数2. 因为余数不为0,所以3不能整除35. ③用4除35,得到余数3. 因为余数不为0,所以4不能整除35.
④用5除35,得到余数0. 因为余数为0,所以5能整除35. 因此,35不是质数.
点评:上述算法有很大的局限性,用上述算法判断35是否为质数还可以,如果判断1 997是否为质数就比较麻烦了,因此,我们需要寻找更实用的算法步骤.
变式训练
请写出判断n (n >2) 是否为质数的算法.
分析:对于任意的整数n (n >2) ,若用i 表示2~(n -1) 中的任意整数,则“判断n 是否为质数”的算法包含下面的重复操作:用i 除n ,得到余数r . 判断余数r 是否为0,若是,则不是质数;否则,将i 的值增加1,再执行同样的操作.
这个操作一直要进行到i 的值等于(n -1) 为止.
解:1. 给定大于2的整数n . 2.令i =2.
3.用i 除n ,得到余数r .
4.判断“r =0”是否成立.若是,则n 不是质数,结束算法;否则,将i 的值增加1,仍用i 表示.
5.判断“i >(n -1)”是否成立.若是,则n 是质数,结束算法;否则,返回第3步.
例2 写出用“二分法”求方程x 2-2=0 (x >0) 的近似解的算法.
分析:令f (x ) =x 2-2,则方程x 2-2=0 (x >0) 的解就是函数f (x ) 的零点. “二分法”的基本思想是:把函数f (x ) 的零点所在的区间[a ,b ]〔满足f (a )·f (b ) <0〕“一分为二”,得到[a ,m ]和[m ,b ].根据“f (a )·f (m ) <0”是否成立,取出零点所在的区间[a ,m ]或[m ,b ],仍记为[a ,b ].对所得的区间[a ,b ]重复上述步骤,直到包含零点的区间[a ,b ]“足够小”,则[a ,b ]内的数可以作为方程的近似解.
解:1. 令f (x ) =x 2-2,给定精度d .
2.确定区间[a ,b ],满足f (a )·f (b ) <0.
a +b
3.取区间中点m = 2
4.若f (a )·f (m ) <0,则含零点的区间为[a ,m ];否则,含零点的区间为[m ,b ].将新得到的含零点的区间仍记为[a ,b ].
5.判断[a ,b ]的长度是否小于d 或f (m ) 是否等于0. 若是,则m 是方程的近似解;否则,返回第三步.
当d
0.0052的近似解的一个算法.
点评:算法一般是机械的,有时需要进行大量的重复计算,只要按部就班地去做,总能算出结果,通常把算法过程称为“数学机械化”.数学机械化的最大优点是它可以借助计算机来完成,实际上处理任何问题都需要算法.如:中国象棋有中国象棋的棋谱、走法、胜负的评判准则;而国际象棋有国际象棋的棋谱、走法、胜负的评判准则;再比如申请出国有一系列的先后手续,购买物品也有相关的手续„„
变式训练
求方程f (x ) =x 3+x 2-1=0在区间[0,1]上的近似解,精度为0.01. 解:根据上述分析,可以通过下列步骤求得方程的近似解:
1.因为f (0)=-1,f (1)=1,f (0)·f (1)<0,则区间[0,1]为有解区间,精度1-0=1>0.01;
2.取[0,1]的区间中点0.5; 3.计算f (0.5)=-0.625;
4.由于f (0.5)·f (1)<0,可得新的有解区间[0.5,1],精度1-0.5=0.5>0.01;
5.取[0.5,1]的区间中点0.75; 6.计算f (0.75)=-0.015 625;
7.由于f (0.75)·f (1)<0,可得新的有解区间[0.75,1],精度1-0.75=0.25>0.01;
„„
当得到新的有解区间[0.75,0.757 82]时,由于|0.757 82-0.75|=0.007 82<0.01,
该区间精度已满足要求,所以取区间[0.75,0.757 82]的中点0.753 91,它是方程的一个近似解.
例3 一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量狼就会吃掉羚羊.此人如何将动物转移过河?请设计算法.
分析:任何动物同船不用考虑动物的争斗但需考虑承载的数量,还应考虑到两岸的动物都得保证狼的数量要小于羚羊的数量,故在算法的构造过程中应尽可能保证船里面有狼,这样才能使得两岸的羚羊数量占到优势.
解:具体算法如下: 算法步骤:
1.人带两只狼过河,并自己返回. 2.人带一只狼过河,自己返回.
3.人带两只羚羊过河,并带两只狼返回. 4.人带一只羚羊过河,自己返回. 5.人带两只狼过河.
点评:算法是解决某一类问题的精确描述,有些问题使用形式化、程序化的刻画是最恰当的.这就要求我们在写算法时应精练、简洁、清晰地表达,要善于分析任何可能出现的情况,体现思维的严密性和完整性.本题型解决问题的算法中某些步骤重复进行多次才能解决,在现实生活中,很多较复杂的问题经常遇到这样的问题,设计算法的时候,如果能够合适地利用某些步骤的重复,不但可以使问题变得简单,而且可以提高工作效率.
变式训练
喝一杯茶需要这样几个步骤:洗刷水壶、烧水、洗刷茶具、沏茶.如何安排这几个步骤?请给出两种算法,并加以比较.
分析:本题主要为加深对算法概念的理解,可结合生活常识对问题进行分析,然后解决问题.
解:算法一: 1.洗刷水壶. 2.烧水.
3.洗刷茶具. 4.沏茶.
算法二:
1.洗刷水壶.
2.烧水,烧水的过程当中洗刷茶具. 3.沏茶.
上面的两种算法都符合题意,但是算法二运用了统筹方法的原理,因此这个算法要比算法一更科学.
点评:解决一个问题可有多个算法,可以选择其中最优的、最简单的、步骤尽量少的算法.
知能训练
设计算法判断一元二次方程ax 2+bx +c =0是否有实数根. 解:算法步骤如下:
1.输入一元二次方程的系数:a ,b ,c .
2
2.计算Δ=b -4ac 的值.
3.判断Δ≥0是否成立.若Δ≥0成立,输出“方程有实根”;否则输出“方程无实根”,结束算法.
点评:用算法解决问题的特点是:具有很好的程序性,是一种通法,并且具有确定性、逻辑性、有穷性.
拓展提升
中国网通规定:拨打市内电话时,如果不超过3分钟,则收取话费0.22元;如果通话时间超过3分钟,则超出部分按每分钟0.1元收取通话费,不足一分钟按一分钟计算.设通话时间为t (分钟) ,通话费用为y (元) ,如何设计一个程序,计算通话的费用?
解:算法分析:
数学模型实际上为y 关于t 的分段函数. 关系式如下:
⎧0.22,0
y =⎨0.22+0.1 t -3 ,t >3,t ∈Z ,
⎩0.22+0.1 [t -3]+1 ,t >3,t ∉Z .
其中[t -3]表示取不大于t -3的整数部分. 算法步骤如下: 1.输入通话时间t .
2.如果t ≤3,那么y = 0.22;否则判断t ∈Z 是否成立,若成立执行 y = 0.2+0.1× (t -3) ;否则执行y = 0.2+0.1×( [t -3]+1) . 3.输出通话费用y . 课堂小结
1.正确理解算法这一概念.
2.结合例题掌握算法的特点,能够写出常见问题的算法. 作业
课本本节练习1、练习2.