第二章算法概述(下).pptxVIP

  • 2
  • 0
  • 约2.59千字
  • 约 54页
  • 2019-11-13 发布于湖北
  • 举报
1;第二章 算法概述(下);枚举法就是按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否真正满足问题所求。若是则采纳这个解,否则抛弃它。 【例2-3-1】.求1-1000中,能被3整除的数。 算法: (1)从1-1000中一一列举,这是一个循环结构 (2)在循环中对每个数进行检验: 凡是能被3整除的数,打印输出,否则继续下一个数。? ;枚举法的基本思想;枚举法的总体框架;【例2-3-2】判断谁是小偷。 有四个嫌疑人: a说:我不是小偷。 b说:c是小偷。 c说:小偷肯定是d。 d说:c冤枉人! 四人中有三人说的是真话,问到底谁是小偷? ?依次假设a、b、c、d为小偷进行判断;求解“谁是小偷?”的算法*;求解“谁是小偷?”的算法*;求解“谁是小偷?”的算法*;应用枚举法通常有以下几个步骤:;枚举法应用举例;问题分析:;13;14;枚举法的优化;#Fruit plate fruit=[apple,orange,banana,pear,pineapple] n=1 for x in fruit: for y in fruit: if x!=y: for z in fruit: if z!=x and z!=y: print(n,x,y,z) n+=1;枚举法的应用;百钱买百鸡问题:有一个人有一百块钱,打算买一百只鸡。到市场一看,大鸡三块钱一只,小鸡一块钱三只,不大不小的鸡两块钱一只。现在,请你编一程序,帮他计划一下,怎么样买法,才能刚好用一百块钱买一百只鸡? 此题很显然是用枚举法,我们以三种鸡的个数为枚举对象(分别设为x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z/3)为判定条件,穷举各种鸡的个数。;2.3.2 迭代和递推算法;一个最简单的迭代例子: 考虑求 1+2+3+……,直到和达到1000时的自然数问题。 可以设一个累加变量s(初始s=0),然后通过循环将自然数1、2、3……依次加到该累加变量s中,直到s≥1000为止,这时最后一个加入的自然数就是所求之数。 这个例子就体现了迭代的思想,累加变量s就是迭代变量。;应用迭代算法的通常步骤;(3).对迭代过程进行控制 什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。根据算法“有限性”的性质,不能让迭代过程无休止地重复执行下去。 迭代过程的控制通常有两种情况: a. 所需的迭代次数是个确定的值,可以计算出来。 ?可以构建一个固定次数的循环来实现对迭代过程的控制。(常用for语句) b. 所需的迭代次数开始时无法确定。 ?需要进一步分析出用来结束迭代过程的条件。例如,当计算精度满足要求后结束。(常用while语句);迭代算法举例;;25;递推与迭代;植树节那天,有五位同学参加了植树活动,他们完成植树的棵树都不相同。 问第一位同学植了多少棵时,他指着旁边的第二位同学说比他多植了两棵;追问第二位同学,他又说比第三位同学多植了两棵;... 如此,都说比另一位 同学多植两棵。最后 问到第五位同学时, 他说自己植了10棵。 到底第一位同学植了 多少棵树? ;28;递推与迭代;递推与迭代;程序设计中的数组(列表)是指具有相同名称、通过下标区分的一组变量。 如:a[0]、a[1]、a[2]或b[1,1]、b[1,2]、b[1,3]、b[2,1]、b[2,2]、b[2,3]等。 在循环结构中,通过变量控制其下标值的变化(如a[i]、b[i,j]),达到变量轮换的目的。 例如:循环:从a[0]到a[9] 循环:a[i], i从0到9 ;实施递推的步骤;递推应用举例:杨辉三角形;34;35;36;2.3.3 贪心算法;基本思想;贪心算法的求解策略:;40;算法描述:;42;43;分析;利用贪心策略,可以对表中的活动作如下选择: ? 首先选取活动1放入相容集合A,A:{1}。因为其结束时间最早。 ? 而后在与活动1相容的待定集合{4,5,6,7,8,9}中,选择结束时间最早的活动4?放入相容

文档评论(0)

1亿VIP精品文档

相关文档