lec_6 回溯法(修改).pptVIP

  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文档。上传文档
查看更多
lec_6 回溯法(修改)

对于大部分问题来说,其解空间的规模为输入规模的指数函数甚至更高。 我们要介绍的回溯法属于一种——智能穷举搜索。 else if (x[k]=n kn) k=k+1; //放置下一个皇后 else { x[k]=0; //重置x[k],回溯 k=k-1; } } } bool Place(int k) //考察皇后k放置在x[k]列是否发生冲突 { for (i=1; ik; i++) if (x[k]= =x[i] | | abs(k-i)= =abs(x[k]-x[i])) return false; return true; } 思考题 1.亚瑟王打算请150名骑士参加宴会,但是有些骑士相互间会有口角,而亚瑟王知道谁与谁不和。亚瑟王希望能让他的客人围着一张圆桌坐下,而所有不和的骑士都不会挨着坐。请回答下列问题: (1)哪一个经典问题能够作为亚瑟王问题的模型? (2)请说明,如果与每个骑士不和的人数不超过75,则问题有解; (3)设计回溯算法求解亚瑟王问题。 * 回溯法 显然,在如此巨大的解空间实施穷举将是费时费力、低效率的。 因此,寻找更加有效的搜索手段就是算法不断推进的源动力。 智能穷举的核心思想,顾名思义,有两个:穷举(在最坏情况下要对整个解空间进行指数级搜索)+智能(利用各种途径减少搜索量)。 解空间树的动态搜索(1) 回溯法从根结点出发,按照深度优先策略遍历解空间树,搜索满足约束条件的解。在搜索至树中任一结点时,先判断该结点对应的部分解是否满足约束条件,或者是否超出评估函数的界,也就是判断该结点是否包含问题的(最优)解,如果肯定不包含,则跳过对以该结点为根的子树的搜索,即所谓剪枝(Pruning);否则,进入以该结点为根的子树,继续按照深度优先策略搜索。 例如,对于n=3的0/1背包问题,三个物品的重量为{20, 15, 10},价值为{20, 30, 25},背包容量为25,从图8.2所示的解空间树的根结点开始搜索,搜索过程如下: 1 不可行解 价值=20 价值=55 价值=30 价值=25 价值=0 1 1 1 1 0 0 0 0 0 0 1 1 2 8 11 12 14 15 13 10 6 9 不可行解 再如,对于n=4的TSP问题,其代价矩阵如图8.5所示, C= ∞ 3 6 7 12 ∞ 2 8 8 6 ∞ 2 3 7 6 ∞ 图8.5 TSP问题的代价矩阵 2 3 4 4 2 2 1 2 3 1 3 4 1 3 1 3 1 2 3 2 1 2 1 4 2 4 1 4 3 2 2 4 3 4 1 2 3 1 2 4 1 3 4 图8.6 TSP问题的搜索空间 5 47 54 4 11 27 46 48 51 53 58 3 8 13 24 29 35 40 45 50 55 60 2 18 34 24 1 2 3 4 1 C= ∞ 3 6 7 12 ∞ 2 8 8 6 ∞ 2 3 7 6 ∞ TSP问题的代价矩阵 回溯法的搜索过程涉及的结点(称为搜索空间)只是整个解空间树的一部分,在搜索过程中,通常采用两种策略避免无效搜索: (1)用约束条件剪去得不到可行解的子树; (2)用评估函数剪去得不到最优解的子树。 这两类函数统称为剪枝函数(Pruning Function)。 需要注意的是,问题的解空间树是虚拟的,并不需要在算法运行时构造一棵真正的树结构,只需要存储从根结点到当前结点的路径。 组合问题中的回溯法 八皇后问题 八皇后问题 八皇后问题是十九世纪著名的数学家高斯于1850年提出的。问题是:在8×8的棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。可以把八皇后问题扩展到n皇后问题,即在n×n的棋盘上摆放n个皇后,使任意两个皇后都不能处于同一行、同一列或同一斜线上。 若两个皇后摆放的位置分别是(i, xi)和(j, xj),在棋盘上斜率为-1的斜线

文档评论(0)

ligennv1314 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档