简单枚举算法教案.pptx

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
简单枚举算法;找钥匙;找钥匙的过程;枚举算法的概念;;枚举算法的设计步骤;简单枚举法 ;虽然枚举法本质上属于搜索策略,但是它与回溯法有所不同。因为适用枚举法求解的问题必须满足两个条件: ?????? ⑴可预先确定每个状态的元素个数n; ⑵状态元素a1,a2,…,an的可能值为一个连续的值域。 设 ai1—状态元素ai的最小值;aik—状态元素ai的最大值(1≤i≤n),即a11≤a1≤a1k,a21≤a2≤a2k, ai1≤ai≤aik,……,an1≤an≤ank for a1←a11 to a1k do fo a2←a21 to a2k do …………………… for ai←ai1 to aik do …………………… for an←an1 to ank do if 状态(a1,…,ai,…,an)满足检验条件 then 输出问题的解; ;枚举法的优点: ⑴由于枚举算法一般是现实生活中问题的“直译”,因此比较直观,易于理解; ⑵由于枚举算法建立在考察大量状态、甚至是穷举所有状态的基础上,所以算法的正确性比较容易证明。 枚举法的缺点: 枚举算法的效率取决于枚举状态的数量以及单个状态枚举的代价,因此效率比较低。;示例;巧妙填数 ;分析;程序;逻辑判断问题;Program Exam; Var A,B,C,D,E :Integer; Cr :Array[1..5] Of Char; Begin For A:=1 To 5 Do For B:=1 To 5 Do For C:=1 To 5 Do For D:=1 To 5 Do For E:=1 To 5 Do Begin If (A=1) Or (B=2) Or (C=3) Or (D=4) Or (E=5) Then Continue; {ABCDE没猜对一个人的名次} If [A,B,C,D,E][1,2,3,4,5] Then Continue;{他们名次互不重复} If Ord(A=2)+Ord(B=5)+Ord(C=4)+Ord(D=1)+Ord(E=3)2 Then Continue; {DAECB猜对了两个人的名次} If (B=A+1) Or (C=B+1) Or (D=C+1) Or (E=D+1) Then Continue; {ABCDE没猜对一对相邻名次} If Ord(A=D+1)+Ord(E=A+1)+Ord(C=E+1)+Ord(B=C+1)2 Then Continue; {DAECB猜对了两对相邻人名次} Cr[A]:=A;Cr[B]:=B;Cr[C]:=C; Cr[D]:=D;Cr[E]:=E; WRITELN(CR[1], ,CR[2], ,CR[3], ,CR[4], ,CR[5]); End; End.;跳远;状态:起跳点i和i点后的点j。每个状态元素的取???范围:1≤i≤n-1,i+1≤j≤n 约束条件的分析:判断小孩能否从i点跳到j点的方法如下: 设起点和终点间的水平距离为l、垂直距离为h。则由物理知识(已在题目中给出)有: t = l / v h = vt – 5t2 = l – 5* 。 因此,v = sqrt(5*l*l/ (l - h))。当然,这个v不一定符合要求,它需要满足两个条件。 ⑴它不能大于极限速度v0,即必须有v ≤ v0 ⑵跳跃过程中不得碰到其他三角形。 如何判断顶点k是否在抛物线下呢?我们可以算出到达时间t0 = dx / v(其中dx为起点到顶点k的水平坐标增量),然后算出该时刻的竖直坐标增量vt0 – 0.5t02。如果此增量大于起点到顶点k的竖直坐标增量,则抛物线在上方。只有起点和终点之间任何一个三角形的顶点不在抛物线下方,则跳远不能完成。 我们在枚举过程中不断将小孩所能跳到的点j调整为best。 枚举结束后,best即为试题要求的最远点。 ;var len : array[1 .. 20] of longint; x, y : array[1 .. 20] of double;{三角形顶端顶点的坐标序列} l, h, t,

文档评论(0)

yigang0925 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档