- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机算法复习第6章
* 分支限界法 * 算法设计与理论 一、基本思想 1. 适用范围 (1)解空间很大。 (2)希望以最小的成本或代价寻找答案解。 第六章 分枝限界法 第一节 方法概述 2.基本思想 相对于回溯法而言,若能使用更有效的约束函数来控制搜索进程,使之能以最小的代价朝着状态空间树上具有答案解(即找这个解将花费的代价最小)的分枝推进,以便尽快地找到一个答案解,这就是分枝限界法。它是使用约束函数的广度优先生成方法。 估值函数 --关键 3.与回溯法的区别(思考:两者的共同点) (1)回溯法是结合规范函数的深度优先节点生成方法,而分枝限界法是结合了估值函数的广度优先生成方法。 (2)回溯法是找一个或全部解,但是分枝限界法是希望用最小的成本或代价找答案解。 问题:规范函数和估值函数的作用有什么不同? 4.应用范围 货郎担问题,0/1背包问题,工作分配问题。 5.两种基本搜索 分枝限界法是限界函数的广度优先生成方法,其中对于儿子结点的存放,可以是队列也可以是堆栈,即宽度优先生成和D-检索或称FIFO和FILO。 (1)FIFO搜索法:它对于状态空间树的搜索是这样的:对于当前扩展节点,先从左到右地产生它的所有儿子,然后按约束函数检查,只要儿子不是死结点,就将它加入活节点表中(按队列的顺序)。然后从活结点表中依次取出一个结点作为当前扩展结点,并产生它的所有儿子加入活结点表的末尾,产生顺序仍是从左到右的。只要当前扩展结点的所有可以产生的儿子还没有产生完,就不考虑下一个结点。如果只要求出一个解,搜索进行到产生一个解为止,如果要求出所有的解,搜索一直进行到活节点表空为止。 (2)FILO搜索法:与FIFO不同的是:活节点表是堆栈,开始时,堆栈只有一个节点,它是根节点,即是当前扩展节点,先产生它的所有儿子,并依次加入到栈中,然后删除这个节点,并将栈顶的那个活节点变成当前扩展节点,搜索一直进行到找到一个答案节点或栈为空才终止。 见图例。 注意:以上两种基本的搜索都必须结合约束函数来控制搜索进程,否则就不能为更快找到或逼近一个解而有效地选择下一个扩展节点。 二、估值函数 1、最小代价搜索法(LC-搜索):这种搜索对一棵状态空间树定义一个成本函数c(X),在搜索此树时,对每一个活节点产生一个函数值,通过对这些函数值的分析,在活节点表中选择一个最有利的节点作为当前扩展节点,从而在一定程度上可以克服搜索的盲目性,以期尽快找到答案解。 2、成本函数c(X) 状态空间树的根结点到X的成本 若X是答案结点 c(X)= ? 若X不是答案结点且子树X不包含任何答案结点 子树X中具有最小成本的答案结点的成本 否则 Note:要得到结点成本函数c(.)所用的计算工作量与解原问题具有相同的复杂度,所以要得到精确的成本函数一般是不现实的。 计算一个节点X的成本通常需要检索以X为根结点的整个子树才能确定。 3.估值函数:以上的成本函数可以根据从一个活节点直到到达一个答案节点所需的计算量来给定。但是这往往是很困难的,因此只能考虑给出一个估值函数来代替。 注意:计算量的一般计算方法: ① 生成一个答案结点之前,子树X需要生成的结点数 ② 子树X中离X最近的那个答案结点到X的路径长度 找适当的估值函数是分支限界法的关键 6、估值函数的计算: 估值函数的一般形式: =f(X)+ 其中: f(X)是从状态空间树的根节点到X的路径的长, 是在以X为根的子树上到达一个答案节点的最短路径长的估计值。 4.估值函数的作用: 是为了找到一个更有利的E节点,从而花费最小的代价找到答案解,这是因为分枝限界法是广度优先生成。(与回溯法中的规范函数的作用相比较) 5.估值函数的选取:常用问题的目标函数做估值函数。 关键 5. 15-迷问题: 它是在一个4*4的方格棋盘上,将数字1,2,3,…14,15以任意顺序置入棋盘的各个方格中,空出一格。问题是希望通过有限次的移动,把一个给定的初始状态变成如下(b)的目标状态。移动的规则是:每次只能在空格周围的四个数字中任选一个移入空格。 定义:l(i)是棋盘上第i+1格到第16格中,较 i 中的棋子号码小的棋子个数。 定理8.1 对于一个给定的初态,如果和 +j+k 是偶数,那么这个初态就可以变成目标状态,其他的任何初态都不可能变成目标状态。 两个判定函数:C1(X)和C2(X) C1(X):在节点X的状态下,没有达到目标状态下正确位置的数字个数, C2(X): ,这里j表示空格的位置。 例如:C1(1)=C1(5)=6 三、LC-搜索的形式化描述 设T是一棵状态空间树,
文档评论(0)