网站大量收购闲置独家精品文档,联系QQ:2885784924

基本算法及其应用(张厚林报).ppt

  1. 1、本文档共85页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基本算法及其应用(张厚林报)

例1、方格填数。问题描述:如图所示的8个格子中放入1~8八个数字,使得相邻的和对角线的数字之差不为1。编程找出所有放法。 例2、火柴棒等式(NOIP2008)。问题描述:给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示: 例3、移动火柴棒(升级版)。问题描述:你被给出一个火柴拼成的等式,比如说下面这个:(5+7=7) BFS每次都先将搜索树某一层的所有节点全部访问完毕后再访问下一层,因此也被称作“按层搜索”。 广度优先搜索算法 初始化 循环 当前解是目标状态 (队不空) 是目标状态 当前解输出; 进队生成下一个可能的状态 不是最终状态 生成下一个可能的状态 例16、Mayan游戏(NOIP2011) 试题描述 分析: 算法1:直接输出“-1”,性价比最高,期望得分10分。 算法2:对于30%的数据全部都在一行上,我们可以对一行进行搜索。可以采用DFS一次枚举当前每一个格子向左或者向右移动。由于向右移动总比向左移动字典序小,所以可以让向右移动尽可能替代向左移动,仅有一种情况无法替代,例如:10122中第三个位置上的方块“1”可以采用向左移动到第二个位置。递归层数限制为N,若再N层恰好消除完,则输出方案。 算法3:对于全部数据,我们依然可以采用DFS的搜索策略。对于算法2的字典序结论依然成立,这样对于任何一个状态,我们最多可以扩展4*7=28个状态。全部数据需要考虑方块下落以及消除方块的问题。设方块下落的处理函数为down(),消除方块的处理函数为clear(),对于 down(),我们可以从下到上一次判断每一个方块下方是否为0,若为0则执行下落;对于clear(),我们一次枚举每一个方块然后进行向下和向右扩展,若存在同颜色且个数=3时,将这些方块标记,最后统一消除。由于每一次执行完clear()操作后,都有可能引发新的方块需要掉落,所以需要重复调用这两个函数,期望得分100. 剪枝: 1.若两种相同颜色的方块进行交换,显然没有意义; 2.可行性剪枝:若某一种颜色的个数=1或=2,则它显然无法消除; 3.最优性剪枝:若某一行中存在某一种颜色,它只有1个或2个方块,则它必须借助其他行来帮助它消除。设离当前行最近且含有当前颜色的行与当前行的距离是K,求出对于所有方块最大的maxK,则maxK就是消除全部方块的下界,如果比n-当前深度大,则可以剪枝。 这就是贪心 例17、排序。通常对一个长度为n(n=24)的整数数列进行排序操作,实际上是对它们按照从小到大的顺序重整。一般情况下可以比较任意两个数之间的大小并交换它们的位置,但这里我们限制只能数列的某一个前缀序列翻转,除此之外的任何操作都是不允许的。更精确地说,假设数列a1,a2,…,an,一个合法的操作是把数列变为ak,ak-1,…,a2,a1,ak+1,ak+2,…,an,其中1k=n。例如,数列3 2 1 4,可能的操作有3种,分别是2 3 1 4(即操作3,2),1 2 3 4(即操作3,2,1),4 1 2 3(即操作整个数组) 你的任务是求出一个序列用上面的方法排序至少需要多少步。 分析:这一题目范围比较小(n=24),且没有好而简单的算法。由于每一次变化的分支较多(与n相当),所以使用深度优先搜索较好。算法如下: Procedure search(step) Begin for (每一个k,表示一个前缀序列) do begin 翻转该前缀序列; if (到达目标) then 找出一个解,比较当前得到的解,如果步数少则保留此方案; else search(step+1) 进行下一步搜索; end; end; 这样的方法很粗糙,很多情况下不能得到最优解。我们要增加一些限制条件。 1.阙值min(分支定界)。如果从最后一位开始,逐步到位的方法是可以使用不超过2n步就完成排序,因此可以设定排序step的最大值,一开始min=2N,以后每搜索到一种方案就缩小min,直到找不到为止,min就是最后的结果。 2.剪枝条件。对当前序列,我们可以估计至少还要多少步才能得到解。估价方法是相邻两个位置差不是1(也就是最终排序后不相邻)的数对个数,可假设为最少需要的步数进行估价剪枝(贪心最优),因为每次操作最多只能使它们中的一个相邻。

文档评论(0)

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

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

1亿VIP精品文档

相关文档