- 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)