算法(八)分枝-限界法

1 定义

1.1 部分定义

活结点:没有生成全部儿子结点

死结点:儿子已经全部生成的结点,或已经剪枝无需向下扩展的结点

E-结点:正在生成其儿子结点的活结点。

1.2 与回溯法的异同(重要)

同:都是在解空间树上搜索问题解的算法。

异:

  1. 求解目标
    回溯法:找出解空间树中满足约束条件的所有解。
    分支限界法:找出满足条件的一个解或者找到使某个函数达到极大或极小的解,即某种意义下的最优解。
  2. 解空间树的构造过程:
    回溯法:当前E-结点一旦生成一个新的子结点,孩子就进入活结点表,且变成新的E结点
    分支限界法:当前E-结点要生成其全部子结点到变为死结点,子结点进入活结点表,之后从活结点表中选择一个作为新的E-结点

2 一般方法

2.1 类似于BFS检索:FIFO

FIFO检索:活结点表用队列,先进先出(BFS广度优先)
在这里插入图片描述

2.2 类似于D-检索:LIFO

LIFO检索:活结点表用堆栈,先进后出(DFS深度优先)
在这里插入图片描述

2.3 LC-检索

之前那些E结点的选择都相当死板,所以用一个“有智力的”排序函数c来选取下一个结点。从上帝视角来看,每个结点的c值是这样的(所有结点分为三类):
在这里插入图片描述
但是得到这种函数显然是不显示的,因为这种函数需要结点全部展开才能得到准确值,所以用c(X)= g ^ \hat{g} g^(X)表示当前节点到答案结点所需做的附加工作的估计函数。

一个E-结点X的儿子Y,有 g ^ \hat{g} g^(Y)≤ g ^ \hat{g} g^(X),又因为X身为E-结点是从节点表中选出 g ^ \hat{g} g^最小的结点,那结点表中其他结点的 g ^ \hat{g} g^也都小于Y的 g ^ \hat{g} g^值。

但这样的结果是变成LIFO了,所以要改进,加上一个根到结点的成本h(X),这样的新成本函数为 c ^ \hat{c} c^(X)=f(h(X))+ g ^ \hat{g} g^(X)

2.4 定义

LC-检索:选取成本估计函数 c ^ \hat{c} c^的值最小的活结点作为下一个E-结点。

值得一提的是,LIFO和FIFO都算特殊的LC-检索。
LIFO: c ^ \hat{c} c^(X)= g ^ \hat{g} g^(X)
FIFO: c ^ \hat{c} c^(X)=f(h(X))=X的级数

LC分支-限界检索:伴有限界函数的LC-检索。

3 15-谜问题

考试考9-迷。

c ^ \hat{c} c^(X)=f(X)+ g ^ \hat{g} g^(X)

g ^ \hat{g} g^(X):不在其目标位置的非空白数目
f(X):根到结点X路径的长度

4 一些定理

定理9.2 当c(Y)<c(Z)时一定有 c ^ \hat{c} c^(Y)< c ^ \hat{c} c^(Z)时,那么在 c ^ \hat{c} c^作为c的估计值时,算法LC到达一个最小的成本答案结点时终止。

但其仍未一定可以找到最小答案结点。

定理9.3 c ^ \hat{c} c^(X)≤c(X)且对于每一个答案X有 c ^ \hat{c} c^(X)=c(X),那么所找到的答案时具有最小成本的答案结点。

4 带期限的作业排序

每个作业(p i _i i,d i _i i,t i _i i)
其中t i _i i是作业的处理时间,d i _i i是作业的期限,p i _i i是超期限的罚款,问如何使罚款总额最小。

例:在这里插入图片描述
下界:当前结点的最大序号i,比i序号小的作业还未完成的直接罚款。
上界:所有未完成的作业都不要了,产生的罚款。
在这里插入图片描述
当一个结点的下界已经>其他结点的上界,就没必要展开了。

最后找到那个上限最小的点。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值