GESP-3级-29.模拟算法(课件).pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

29.模拟算法;

本章内容

本章内容:介绍模拟算法的思想及实现要点。

模拟算不上一种算法,只能算作求解问题的一种方法,即模拟求解问题的步骤或过程,最终得到答案。;

1.从模拟考试说起

爸爸:抱一,快期末了,你们班会组织模拟考试吗?

抱一:什么是模拟考试?

爸爸:模拟考试是仿照实际真题考试的一种考试模式,就是按照期末考试的要求,仿照期末试卷的题型、考试范围出的一份试卷,考试时间也一样,用这种方式来检验同学们这学期学得怎么样。

抱一:我不要考试……

爸爸:……;

2.模拟算法的思想及实现要点

(1)模拟方法思想

现实中有些问题难以找到公式或规律来求解,只能按照一定的步骤不停的“模拟”下去,最后才能得到答案。对于这样的问题,用计算机来求解是十分合适的,只要让计算机模拟人在解决此问题时的行为即可。这种求解问题的思想,可以称为“模拟”。

模拟也是求解程序设计竞赛题目时经常采用的方法。适合采用模拟方法求解的题目大多带有游戏性质,求解此类问题的关键是理解游戏的规则和过程,在用程序实现时用适当的数据结构表示题目的状态,然后按照游戏规则模拟游戏过程。

因此,所谓模拟方法,就是采用合适的数据结构,模拟游戏过程或问题求解过程,在此过程中进行一定的判断或记录,从而求解题目。;

(2)模拟方法实现要点

采用模拟思路求解程序设计竞赛题目时,要特别注意以下问题:

①采用合适的数据结构来表示问题。例如,迷宫问题可以采用二维数组存储迷宫地图。常用数据结构包括数组、结构体、向量、队列、栈、双端栈、双端队列、树、二叉树、图等。当然,最简单的、最适合问题求解的数据结构就是最好的数据结构。本书最后一章,第30章,会介绍2种数据结构——向量和队列。

②在模拟过程中通常需要记录或更新问题的中间状态,以便下一步在此状态的基础上继续模拟。;

(2)模拟方法实现要点

③采用模拟法求解时,可能出现的一种情形是,当问题规模很小时,直接模拟即可,但???题规模较大时,直接模拟会超时或内存超出限制,这时就要分析问题的规律,直接根据规律求解,或把问题的规模变小再模拟。

④如果采用普通的模拟思路求解,提交后评判为超时,那就要分析题目是否符合分治、动态规划、贪心等这些优化算法的适用条件,可能需要用这些算法求解。;

解题报告——出列游戏;

题目描述:

n个人围成一圈,第1个人从1开始报数,报数报到m的人出列;然后又从下一个人从1开始报数;重复n-1轮游戏,每轮游戏淘汰1个人,最后剩下的人就是胜利者。模拟该游戏,输出最后的胜利者。

如下图所示,以n=8,m=4为例,图(a)~(g)演示了7轮游戏过程,依次出列的位置是:4852137,最后的胜利者是6号。图中方框里的数字表示这8个人的序号,空白的方框表示已出列的位置,方框旁边的数字表示报数过程。;;

输入描述:

输入占一行,为两个正整数n和m,2≤n≤100。;

分析:

以n=8,m=4分析该出列问题。8个人参加该游戏,需要进行7轮,因为每轮淘汰一个位置出列。在用程序模拟出列问题时,只需要模拟7轮游戏过程即可,用循环变量r来控制。

要表示8个人的序号,可以用一维数组a来存储8个位置上的号码。为了符合人们的习惯,只使用a[1]~a[8],因此数组长度为9。;

该出列游戏过程中依次出列的位置可以用下图表示。图中3个变量i、j、r的含义分别为:

变量r:用来表示游戏是第几轮,并且是通过该变量来控制游戏结束的。

变量i:标明每次报数是由哪个位置上的人报出来的(注意要跳过已经出列的位置)。变量j:实现报数,从1报数到4,再变成1,…。;

分析:

看似很简单的出列问题,在模拟时要注意以下3个问题:

①模拟报数过程,从1开始报数,达到4后(对应位置要出列),又从1开始报数。因此需要对4进行取模运算。变量j用来记录报数过程报出来的数,每次继续报数本来是j=(j+1)%4,但是(j+1)%4的范围是0~3,我们希望j取1~4,所以正确的式子是:j=(j+1-1)%4+1,即:j=j%4+1。

②需要记录每一个报数是由哪个人报出来的,变量i来表示这个人的序号。同样每;;

解题报告——单身贵族游戏;

题目描述:单身贵族游戏规则

您可能关注的文档

文档评论(0)

k12学习资料 + 关注
实名认证
文档贡献者

教师资格证持证人

k12学习资料

领域认证该用户于2023年06月02日上传了教师资格证

1亿VIP精品文档

相关文档