1.1 算法的含义
案例探究
有8个小球,其中7个重量相同,仅有一个较重,用天平如何称出那个重的小球. 方法1:把8个小球分成四组,依次将每组放在天平上,直到某一组不平衡,就可确定重的小球,最多需称4次.
方法2:(1)从8个小球中任取6个小球,将这6个小球每边3个置于天平上;(2)若天平平衡,则表明重的小球在剩余的2个小球中,只需将那两个小球放在天平上再称1次就可找到重的那个小球;(3)若天平不平衡,则从较重的一边的3个球中任取两个球称量,若平衡,则剩下的那个即为要找的小球,若不平衡,则重的那边就是要找的小球. 我们做任何事情,都是在一定条件下按某种顺序执行一系列操作.解决数学问题也常常如此,这就是本节内容要研究的算法思想.
自学导引
一般而言,对一类问题机械的、统一的求解方法称为算法.
1.算法概念的理解
(1)算法是指可以用计算机来解决的某一类问题的程序或步骤,这些程序或步骤必须是明确有效的,而且能在有限步骤之内完成.(2)算法与一般意义上具体问题的解法既有联系,又有区别,它们之间是特殊与一般的关系,也是抽象与具体的关系.算法的获得要借助一般意义上具体问题的求解方法,而任何一个具体问题都可以利用这类问题的一般算法来解决.(3)算法一方面具有具体化、程序化、机械化的特点,同时又有高度的抽象性、概括性、精确性,所以算法在解决问题中更具条理性、逻辑化特点. 2.算法的五个特点
(1)概括性:写出的算法必须能解决一类问题,并且能重复使用.
例如:给出求解方程组的一个算法.
?x?2y??1,?.?2x?y?1① ② 解析:解这个方程组的步骤是: 第一步:②-①×2得5y=3; ③ 第二步:解③得y= 第三步:将y=
3; 531代入①,得x=. 55 像上例二元一次方程组的求解问题,也适用于其他二元一次方程组的求解.
(2)正确性与顺序性:算法从初始步骤开始,分为若干明确的步骤,前一步是后一步的前提,只有执行完前一步才能进行下一步,而且每一步都是正确无误的,从而组成了一个有着很强逻辑性的序列.
(3)有限性:算法有明确的开始和结束界限,终止时表示问题得到解答或指出问题没解,是在有限步骤内求解某一问题.
(4)不唯一性:求解某一问题的算法不是唯一的,可以有不同的算法.当然这些算法有繁简之分,但是都能解决这一类问题.
(5)普遍性:很多具体的问题,都可以设计合理的算法去解决,例如,手算、心算、用算盘、用计算器算都要经过有限的、事先设计好的步骤来实现.同样的一个工作计划,生
产流程都可以视为算法.
疑难剖析
算法是数学及其应用的重要组成部分,是计算科学的重要基础.随着现代信息技术的飞速发展,算法在科学技术、社会发展中发挥着越来越大的作用,并日益融入社会生活的方方面面,算法思想已成为现代人应具备的一种数学素养.
算法是高中数学课程的新增内容,其思想方法是非常重要的. 【例1】 试写出求解二元一次方程组的算法.
思路分析:本题主要考查二元一次方程组的解的算法.不妨设二元一次方程组为
?a11x1?a12x2?b1,??a21x1?a22x2?b2① ② 对于求方程的根,解方程组这样的数值性的问题,我们都有具体的计算方法,只要我们把平时的计算方法严格地按步骤把它描述出来即可.因此我们很容易得到下面的算法. 解:由于是二元一次方程组,故方程组中a11、a21不能同时为0.
第一步,假定a11≠0(如果a11=0,可将第一个方程与第二个方程互换),①×(-得到 (a22-
a21)+②a11a21a12ab)x2=b2-211. a11a11即方程组可化为
?a11x1?a12x2?b1,??(a11a22?a21a12)x2?a11b2?a21b1.a11b2?a21b1. ⑤
a11a22?a21a12③ ④ 第二步,如果a11a22-a21a12≠0,解方程④得到 x2=
第三步,将⑤代入③,整理得到 x1=
a22b1?a12b2. ⑥
a11a22?a21a12 第四步,输出结果x1、x2.
如果a11a22-a21a12=0,则从④可以看出方程组无解或有无穷多组解.
嗣位启示:从本例可以发现,求解某个问题的算法不同于求解一个具体问题的方法,算法必须能够解决一类问题.并且能够重复使用;算法过程要能一步一步地执行,每一步操作必须确切,能在有限步后得出结果.
2
变式训练:1.试写出求一元二次方程ax+bx+c=0的根的算法.
2
解:第一步:计算Δ=b-4ac;
第二步:如果Δ<0.则原方程无实数解,
否则(Δ≥0)
?b?b2?4acx1?,
2a?b?b2?4acx2?;
2a 第三步:输出x1,x2或无实数解的信息.
2
2.试写出求x-5x-6>0的解的算法.
2
解:第一步:求对应方程x-5x-6=0的两根x1=-1,x2=6. 第二步:写出解集{x|x>6或x<-1}.
【例2】 写出求1+2+3+4+5+6的一个算法. 思路分析1:按照逐一相加的程序进行. 解法1:第一步:计算1+2,得3;
第二步:将第一步中的运算结果3与3相加得6; 第三步:将第二步中的运算结果6与4相加得10; 第四步:将第三步中的运算结果10与5相加得15; 第五步:将第四步中的运算结果15与6相加得21. 思路分析2:可以运用公式1+2+3+…+n= 解法2:第一步:取n=6; 第二步:计算
n(n?1);直接计算. 2n(n?1); 2 第三步:输出运算结果.
思维启示:题目尽管简单,还是要一步一步地做.否则就不能利用上述算法解决这一类问题.
变式训练:写出求1×2×3×4×5×6的值的算法. 解:第一步:计算1×2,得2;
第二步:将第一步中的运算结果2与3相乘得6; 第三步:将第二步中的运算结果6与4相乘得24; 第四步:将第三步中的运算结果24与5相乘得120; 第五步:将第四步中的运算结果120与6相乘得720.
【例3】 已知球的半径R=5,写出求球的体积V的一个算法.
思路分析:算法具有普遍性,过去学过的许多公式的应用都是算法,描述算法时只要将问题的解答分为明确的步骤即可. 解:第一步:输入球的半径R=5; 第二步:用球的体积公式V=
43
πR,计算V的值; 3 第三步:输出V.
思维启示:平时我们解题的一般步骤只注重第二步,其他步骤往往忽略了,算法却讲究“一步一步地去做”.像这类套用现成公式求值的题一般分为三步:“第一步输入需要的值,第二步套用公式,第三步输出结果.”
2
【例4】 写出一个求解任意二次函数y=ax的最值的算法.
4ac?b2 思路分析:由二次函数的知识得,当a>0时,函数有最小值;当a<0时,函
4a4ac?b2数有最大值.
4a 解:算法步骤如下: 第一步:输入a、b、c;
4ac?b2 第二步:计算m=
4a 第三步:若a>0,输出最小值m; 第四步:若a<0,输出最大值m.
变式训练:写出求点M(1,2)到直线3x+5y-6=0的距离的算法.
解:第一步:输入点M的坐标x0=1,y0=2及直线方程的系数A=3,B=5,C=-6; 第二步:计算P=Ax0+By0+C;
22
第三步:计算Q=A+B; 第四步:计算d=
PQ;
第五步:输出D.
【例5】 一列快车长168米,一列慢车长米.如果两车相向而行,从相遇到离开需4秒,如果同向而行,从快车追及慢车到离开需16秒钟,求两车的速度.
思路分析:本题是一个实际的数值问题,对于这样的问题一定要建立它的数学模型;按照数学的处理方案一步一步地具体化,两车相向而行,则其相对速度为速度之和,两车同向而行,则其相对速度为速度之差,相对移动的距离均为两辆火车的长度之和.
第一步:设快车时速为x公里/小时,慢车时速为y公里/小时,可以得到如下方程组:
?4(x?y)?168?184, ?16(x?y)?168?184;? 第二步:将其化简得??x?y?88,?x?y?22;① ② 第三步:将①+②得x=55; ③ 第四步:将③代入①或②得y=33.
思维启示:本题的关键是将具体的问题转化为数学模型,只要掌握了这个过程,则对于描述本题的算法就是解方程组的步骤了.
【例6】 现有有限个正整数,试设计一个求这些有限个正整数中最大数的算法. 思路分析:如果让我们从10个、8个正整数中找出最大数,也许是一件很简单的事,我们一眼就能看出结果.但如果给我们100个、1 000个,甚至更多的数,那么找出其中最大的数就是一件很困难的事了.我们必须依靠算法来解决这个问题.我们可以设想有一个基础数(如第一个数),让它作为其中的最大数,然后将第二个数与这个基础数比较,将这两者中的较大者再作为基础数与第三个数进行比较,找出其中的较大者,将其作为基础数再与第四个数比较,依次下去,直到与最后一个数比较完毕,就能确定出有限个正整数中的最大数.
解:算法步骤用自然语言叙述如下:
第一步:先假定这些正整数中的第一个数为“最大值”;
第二步:将这些整数中下一个数与“最大值”比较,如果它大于此“最大值”,这时就假定“最大值”是这个整数;
第三步:如果还有其他正整数,重复第二步; 第四步:一直到没有可比的数为止,这时假定的“最大值”就是这有限个正整数中的最大值.
思维启示:一种算法,就是要求我们去按部就班地做,每做一步都有唯一的结果,并且对任意的有限个正整数都适用,且在有限步之后,总能得出结果.
拓展迁移
【拓展点1】 写出求1×2×3×…×9×10的值的算法. 解法1:可用最原始的方法进行计算. 第一步,先求1×2,得到结果2;
第二步,将第一步所得结果2再乘以3,得到结果6; 第三步,将6再乘以4,得到24; 第四步,将24再乘以5,得到120; ……
第九步,将362 880再乘以10,得到3 628 800,即是最后结果. 虽然这样的算法是正确的,但过于繁琐.如果要求1×2×…×10 000的值,则要写9 999个步骤,显然是不可取的,而且每次都直接使用上一步的数值结果(如2,6,24等)也不方便,应当找到一种通用的方法.通过分析可发现规律,乘数是前一个加1.利用这一规律,可以得到第二种算法.
解法2:可以设两个变量,一个代表被乘数,一个代表乘数,不另设变量存放乘积结果,而直接将每一步的乘积放在被乘数变量中.现在设p为被乘数,i为乘数.用循环算法来求结果,可将算法改写如下. 第一步:使p=1. 第二步:使i=2.
第三步:使p=p×i(乘积仍放在变量p中). 第四步:使i=i+1(使i的值加1).
第五步:如果i≤10,则返回重新执行步骤第三步,以及其后的步骤第四步和第五步,否则算法结束.
【拓展点2】 试写出求1+2+3+4+5+…+n的算法.
思路分析:如果仅仅几个数相加.我们可以一个一个地相加.其实那也是一种算法.从例题2可以看出,我们每一步都是在重复运算,不同的是运算的数值不一样.但是运算的数值是有规律的.因此可以引进两个变量,一个是sum代表和,一个是i,先设sum=0,i=1,i的值在变化,sum的值变化.
解:第一步:设i的值为1; 第二步:设sum的值为0;
第三步:如果i≤n执行第四步,否则转去执行第七步; 第四步:计算sum+i并将结果代替sum; 第五步:计算i加1并将结果代替i; 第六步:转去执行第三步;
第七步:输出sum的值并结束算法.
【拓展点3】 设火车托运重量为P(单位:kg)行李时,每千米费用(单位:元)标准为:
高中数学第1章算法初步1.1算法的含义知识导引学案苏教版必修32017101742



