第二章算法初步§1算法的基本思想1.了解算法的含义,形成算法的初步印象,体会算法是解决问题的“机械”程序,并能在有限步内解决问题;2.能够用自然语言叙述算法;3.掌握正确的算法应满足的条件;4.会写出简单问题的算法.作为家里的一员,在平时分担一些力所能及的事是我们应尽的义务,你每天都帮家里做家务吗?你会烧开水吗?请写出你在家中烧开水的过程.1、往壶内注水;2、点火加热;3、观察:如果水开,则停止烧火,否则继续烧火;4、如果水未开,重复过程“3”,直至水开.2、判断水是否烧开与是否继续烧火的过程是一个反馈与判断的过程,因此有必要不断重复过程“3”.小结:1、其实大部分事情都是按照一定的程序执行的,因此要理清事情的每一步.事实上,我们完成任何事,都要有步骤,合理安排步骤,会达到事半功倍的效果.从我们数学的意义来讲,在解决某些问题时,需要设计出一系列可操作或可计算的步骤,通过实施这些步骤来解决问题,我们通常把这些步骤称为解决问题的一种算法.这种描述不是算法的定义,但反映了算法的基本思想.随着计算科学和信息技术的飞速发展,算法的思想已经渗透到社会的方方面面.在以前的学习中,虽然没有出现算法这个名词,但实际上在数学教学中已经渗透了大量的算法思想,如四则运算的过程、求解方程的步骤等等.完成这些工作都需要一系列程序化的步骤,这就是算法的思想.例1在电视台的某个娱乐节目中,要求参与者快速猜出物品的价格.主持人出示某件物品,参与者每次估算出一个价格,主持人只能回答高了、低了或者正确.在某次节目中,主持人出示了一台价值在1000元以内的随身听,并开始了竞猜.下面是主持人和参与者的一段对话:……如果你是参与者,你接下来会怎么猜?800元!高了!400元!600元!低了!低了!参与者主持人实际上,可以把过程概括如下:例2在给定素数表的条件下,设计算法,将936分解成素因数的乘积.(4000以内的素数表见课本附录1)解:算法步骤如下:1.判断936是否为素数:否.2.确定936的最小素因数:2.936=2×4683.判断468是否为素数:否.4.确定468的最小素因数:2.936=2×2×2345.判断234是否为素数:否.6.确定234的最小素因数:2.936=2×2×2×1177.判断117是否为素数:否.8.确定117的最小素因数:3.936=2×2×2×3×399.判断39是否为素数:否.10.确定39的最小素因数:3.936=2×2×2×3×3×13判断13是否为素数:13是素数,所以分解结束.分解结果是:936=2×2×2×3×3×13例3设计一个算法,求840与1764的最大公因数.1.先将840进行素因数分解:;2.然后将1764进行素因数分解:;3.确定他们的公共素因数2,3,7;4.确定公共素因数的指数:公共素因数2,3,7的指数分别为2,1,1;5.最大公约数为:.解:算法步骤如下:38402357222176423721123784例4“韩信点兵”问题.韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为建立汉朝立下了汗马功劳.据说他在点兵的时候,为了保住军事机密,不让敌人知道自己部队的实力,采用下述点兵的方法:先令士兵从1~3报数,结果最后一个士兵报2;再令士兵从1~5报数,结果最后一个士兵报3;又令士兵从1~7报数,结果最后一个士兵报4.这样,韩信很快就算出了自己部队的总人数.请设计一个算法,求出士兵至少有多少人?分析:从报数情况分析,总人数除以3余2;总人数除以5余3;总人数除以7余4.算法的第一步是将所有的除以3余2的正整数找出来,按从小到大排成一列.第二步是从第一步的数列中找出除以5余3的一列数,按从小到大排成一列.最后在满足前两个条件的第二步数列中再找出除以7余4的一列数,这列数中最小的数,即为我们所求的数.(1)首先确定最小的满足除以3余2的正整数:2.解:具体算法步骤如下:(5)在第4步得到的一列数中,找出满足除以7余4的最小数:53.这就是我们要求的数.(4)然后依次加上15,得到8,23,38,53……,显然这些数既满足除以3余2,又满足除以5余3.(3)在上列数中确定最小的满足除以5余3的正整数:8.(2)依次加3就得到所有除以3余2的正整数:2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56……3、算法要简洁,要清晰可读,不能繁杂,易程序化.算法不同于求解一个具体问题的方法,是这种方法的高度概括.一个好的算法有如下要求:1、写出的算法,必须能解决一类问题(如一元二次方程求根公式),并且能重复使用.2、算法过程要能一步一步执行,每步执行的操作,必须确切,不能含混不清,而且在有限步能得出结果.例5、写出以下问题的算法:一位商人有9枚银元,其中有1枚略轻的是假银元.你能用天平(不用砝码)将假银元找出来吗?解:1.把银元分成3组,每组3枚.2.先将两组分别放在天平的两边.如果天平不平衡,那边假银元就放在轻的那一组;如果天平左右平衡,则假银元就在末称的第3组里.3.取出含假银元的那一组,从中任取两枚银元放在天平的两边.如果左右不平衡,则轻的那一边就是假银元;如果天平两边平衡,则末称的那一枚就是假银元.算法是什么?算法可以理解为由基本运算及规定的运算顺序构成的完整的解题步骤,或看成按要求设计好的、有限的、确切的计算序列,并且这样的步骤或序列能解决一类问题.现代意义上的“算法”通常是指可以用计算机来解决的某一类问题的程序或步骤.说明:1、算法实际上就是解决某一类问题的步骤和方法,在解决问题时形成的规律性的东西,按照算法描述的规则与步骤,一步一步地去做,最终便能解决问题.2、算法的基本思想就是我们分析问题时的想法.由于想法不同、思考的角度不同,着手点不一样,同一问题存在不同的算法,算法有优劣之分.3、从熟悉的问题出发,体会算法的程序化思想,学会用自然语言来描述算法.例6在函数的应用部分,我们学习了用二分法求方程f(x)=0的近似解.如图所示分析:yxOabx*二分法的基本思想是:将方程的有解区间分为两个小区间,然后判断解在哪个小区间;继续把有解的区间一分为二进行判断,如此周而复始,直到求出满足精度要求的近似解.其算法步骤如下5.判断新的有解区间长度是否大于精确度:(1)如果新的有解区间长度大于精确度,则在新的有解区间的基础上重复上述步骤;(2)如果新的有解区间长度小于或等于精确度,则这个有解区间中的任意一个数均为方程的满足精度的近似解.3.计算f(0.5)=-0.625;6.计算f(0.75)=-0.015625;9.计算f(0.875)=0.435546875;10.由于f(0.75)f(0.875)0,可得新的有解区间[0.75,0.875],0.875-0.75=0.1250.1;12.计算f(0.8125)=0.196533203125;所以,区间[0.75,0.8125]中的任一数值,都可以作为方程的近似解.13.第一步:令f(x)=x3+x2-1,因为f(0)f(1)0,所以设x1=0,x2=1.第三步:若f(x1)f(m)0,则令x1=m;否则,令x2=m.简化写法:第四步:判断|x1-x2|0.1是否成立?若是,则x1,x2之间的中间值为满足条件的近似解;若否,则返回第二步.算法的特征有穷性:一个算法应包含有限的操作步骤而不应是无限的;确定性:算法中每一个步骤应当是确定的,而不应当是含糊的、模棱两可的;有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果.输入:有零个或多个输入;输出:有一个或多个输出;一个人带三只狼和三只羚羊过河,只有一条船,船可以容纳一个人和两只动物.没有人在的时候,如果狼的数量不少于羚羊的数量,狼就会吃掉羚羊.请设计过河的算法.解:算法或步骤如下:S4人带两只狼返回;S2人自己返回;S3人带一只羚羊过河;S1人带两只狼过河;S5人带两只羚羊过河;S6人自己返回;S7人带两只狼过河;S8人自己返回;S9人带一只狼过河.1、算法:算法是解决某类问题的一系列步骤或程序;2、算法的基本思想:程序化思想;3、算法的特征:有穷性确定性输入输出有效性世间没有一种具有真正价值的东西,可以不经过艰苦辛勤的劳动而得到.