- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析课件第08章
第 八 章 回 溯 解的形式 n-元组(x1,…,xn),其中xi取自某个有穷集Si 规范函数 P(x1,…,xn) 假设集合Si的大小是mi,满足规范函数P的可能的元组数为m=m1m2…mn 硬性处理:构造m个n元组并依次测试是否满足P 回溯法 不断地用修改过的限界函数Pi(x1,…,xi)去测试正在构造的n元组的部分向量, 看是否可能导致最优解, 如果不能, 就将可能要测试的mi+1 … mn个向量略去。 例8.1(8-皇后问题) 在一个8*8棋盘上放8个皇后, 使每两个皇后之间都不能互相“攻击”, 即:使得每两个皇后都不能在同一行、同一列及同一条斜角线上。 将皇后i放在行i上,8皇后问题可以表示为8-元组(x1,…x8),其中xi是皇后i被放置的列号。 显式约束条件: Si={1, 2, 3, 4, 5, 6, 7, 8}, 1≤i≤8 隐式约束条件: 没有两个xi可以相同, 且没有两个皇后可以在同一条斜角线上。 例8.2 子集和数问题 已知n+1个正数:wi, 1?i?n, 和M。要求找出{wi }的所有子集使得子集中元素之和等于M。 例如:n=4, (w1,w2,w3,w4)=(11,13,24,7),M=31。 则满足要求的子集是(11,13,7) 和(24,7) 可表示为(1,2,4) 和 (3,4) 子集和数问题的描述 解是k-元组(x1,…,xk) ,1?k?n 显示约束条件 xi?{j|j是整数,wj的下标且1?j?n} 隐式约束条件 xi互不相同且相应的wk的和数是M, k=xi,xixi+1 (1, 2, 4)和(3, 4) 子集和数问题的描述--另一种表示 解是大小固定的n-元组(x1,…,xn) ,其中 xi ?{0,1}, 1?i?n, 若 xi=0, 解集合不包含wi; 若 xi=1,解集合包含wi; 则例中的解可以表示为(1,1,0,1)和(0,0,1,1) 解空间的树结构 搜索算法通过系统的检索给定问题的解空间来确定问题的解。解空间可以用树结构加以描述。 对于一个给定的解空间,可能有多种树结构。 例8.3 n-皇后问题 n-皇后问题是8 -皇后问题的推广。n个皇后将被放置在n×n的棋盘上且使得没有两个皇后可以互相攻击。这是8 -皇后问题的推广,其解空间由n-元组(1,2,…,n)的n!个排列所组成。 n=4时的树结构--排列树。树的边由xi的可能的取值标记。由i级到i+1级节点的边给出xi的值。解空间由从根节点到叶节点的所有路径定义。 效率估计 回溯法的效率主要取决于四种因素: 生成下一个X(k)的时间 满足显示约束条件的X(k)的数目 限界函数Bi的计算时间 满足Bi的X(k)的数目 限界函数:减少结点数,本身的计算时间 效率估计 一旦选定了一种状态空间树结构, 前三种因素对于所要解决的实例没有多大的关系, 只有第四种因素,对于问题的不同实例, 生成的结点数是不相同的。 易知,回溯算法最坏情况下的时间复杂度为O(p(n)2n)或O(q(n)n!),其中p(n)和q(n)为n的多项式。 由于回溯法对同一问题不同实例在计算时间上出现巨大差异,在n很大时,对某些实例仍然十分有效。 用回溯算法处理一棵树所要生成的节点数,可以用蒙特卡罗方法估算出来。 效率估计---估计满足Bi的X(k)的数目 蒙特卡罗方法 在状态空间树中生成一条随机路径。 设X是这条路径上第i级的一个结点。 在结点X处用限界函数确定没受限界的儿子结点数目mi,在这mi个儿子结点中随机选择一个结点作为这条路径上的下一个结点。 这条路径在以下结点处结束:或者它是一个叶子结点,或者该结点的所有儿子结点都已被限界。 用这些mi可以估算出这棵状态空间树中不受限界结点的总数m。 效率估计---估计满足Bi的X(k)的数目 蒙特卡罗方法 优点: 找到所有答案结点的情况非常有用, 限界函数固定不变,计算方便,对状态空间树中同一级结点都适用。 缺点: 只求一个解时,生成的结点数远小于m, 随着检索的进行,限界函数应该更强,使得m的值更小。 效率估计 Procedure ESTIMATE //程序沿着状态空间树中一条随机路径产生这棵树中不受限界结点的估计数// m ?1; r ?1; k ?1 loop Tk ?{X(k):X(k) ? T(X(1), …,X(k-1) ) and Bk (X(1), …,X(k-1))} if SIZE(Tk)=0 then exit endif r ?r?SIZE(Tk) m ?m+r
文档评论(0)