- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析第八章课件
;8.1 一般方法
8.2 8-皇后问题;入口;解的形式
n-元组(x1,…,xn),其中xi取自某个有穷集Si
规范函数 P(x1,…,xn)
假设集合Si的大小是mi,满足规范函数P的可能的元组数为m=m1m2…mn
硬性处理:构造m个n元组并依次测试是否满足P
回溯法
不断地用修改过的限界函数Pi(x1,…,xi)去测试正在构造的n元组的部分向量, 看是否可能导致最优解, 如果不能, 就将可能要测试的mi+1 … mn个向量略去。;回溯法的解需要满足一组综合的约束条件, 通常分为: 显式约束和隐式约束
显式约束条件: 限定每个x只从一个给定的集合上取值, 满足显式约束的所有元组确定一个可能的解空间
例: xi?0 , si={所有非负实数}
隐式约束条件: 描述了xi必须彼此相关的情况
隐式约束条件指前面提到的规范函数
解空间中满足隐式约束条件的元组称为可行解。;在一个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 子集和数问题;子集和数问题的描述;子集和数问题的描述--另一种表示;解空间的树结构;例8.3 n-皇后问题;1;1;17;回溯法在求问题的所有解时, 要遍历树才能结束。
回溯法在求问题的任一解时, 只要搜索到问题的一个解就可以结束。
回溯法在包含问题所有解的解空间树中, 按深度优先的策略, 从根结点出发搜索解空间树。
回溯法搜索至解空间树的任一结点时, 先判断该结点是否肯定不包含问题的解。如果肯定不包含, 则跳过以该结点为根的子树, 逐层向其祖先结点回溯。否则就进入该子树, 继续按深度优先的策略进行搜索。;解空间树(状态空间树)的术语;静态树(static trees): 树结构与所要解决问题的实例无关.
动态树(dynamic trees): 树结构是与实例相关的, 且树结构是动态确定的.
活结点: 自己已经生成而其所有的儿子结点还没有全部生成的结点.
E-结点(正在扩展的结点): 当前正在生成其儿子结点的活结点.
死结点: 不再进一步扩展或者其儿子结点已全部生成的生成结点.;问题状态的生成;结点2变成E-结点, 它再生成结点3, 路径变为(1, 2), 即皇后1在第1列上, 皇后2在第2列上, 所以结点3被杀死, 此时应回溯;8;13;18;;1、针对所给问题定义问题的解空间, 解空间应至少包含问题的一个最优解
2、确定易于搜索的解空间结构
3、以深度优先方式搜索解空间, 并在搜索过程中使用限界函数避免无效搜索;从根结点出发, 以深度优先方式搜索整个解空间。
首先根结点成为一个活结点, 同时也成为当前的扩展结点。在当前扩展结点处, 搜索向纵深方向移至一个新结点, 该新结点成为一个新的活结点, 并成为当前扩展结点。
如果在当前扩展结点处不能再向纵深方向移动, 则当前扩展结点就成为死结点。此时应回溯至最近的一个活结点处, 并使该活结点成为当前的扩展结点。
回溯法以这种方式递归地在解空间中搜索, 直至找到所要求的解或解空间中已没有活结点时为止。;回溯算法的形式化描述;回溯算法的形式化描述;13;procedure RBACKTRACK(k)
global X(1:n);
int k, n;
for ( 满足下式的每个X(k), X(k) ?T(X(1)…X(k-1))
and B(X(1),…B(k))=true) do
{ if (X(1),…,X(k))是一条抵达答案结点的路径 then
print (X(1)…X(k));
call RBACKTRACK(k+1);
}
end RBACKTRACK ;效率估计;一旦选定了一种状态空间树结构, 前三种因素对于所要解决的实例没有多大的关系, 只有第四种因素,对于问题的不同实例, 生成的结点数是不相同的。
易知,回溯算法最坏情况下的时间复杂度为O(p(n)2n)或O(q(n)n!),其中p(n)和q(n)为n的多项式。
由于回溯法对同一问题不同实例在计算时间上出现巨大差异,在n很大时,对某些实例仍然十分有效。
用回溯算法处理一棵树所要生成的节点数,可以用蒙特卡罗方法估算出来。;效率估计---估计满足Bi的X(k)的数目;效率估计---估计满足Bi的X(k)的数目;效率估计;回溯法求解问题
文档评论(0)