第七章分枝-限界法一般方法分枝-限界法是在生成当前E-结点全部儿子之后,再生成其他活结点的儿子,并且使用限界函数帮助避免生成不包含答案结点子树的状态空间的检索方法
根据对状态空间树中结点检索次序的不同,可将分枝-限界的设计策略分为:–FIFO检索,活结点采用一张先进先出表–LIFO检索,活结点采用一张先进后出表例7
1:4-皇后问题3955本例考察用一个FIFO分支-限界算法检索4-皇后问题的状态空间树的基本过程
起初,只有一个活结点,即结点1
这表示没有皇后被放在棋盘上
扩展这个结点,生成它的儿子结点2,18,34和50
这些结点分别表示皇后1在第1行的1,2,3,4列情况下的棋盘
现在仅有的活结点是2,18,34和50
如果按这样的次序生成这些结点,则下一个E-结点就是结点2
扩展结点2,生成结点3,8和13
利用限界函数,结点3立即被杀死,将结点8和13加到活结点队列
结点18变成下一个E-结点,生成结点19,24和29,限界函数杀死结点19和24,结点29被加到活结点队列
下一个E-结点是34
图中显示了由FIFO分枝-限界检索生成图6
2中的那棵树的一部分
由限界函数杀死的那些结点的下方有一个B字
结点内的数与图6
2所示的结点内的数对应
结点外的数给出了用FIFO分枝-限界法生成结点的次序
在到达答案结点31时,仅剩下活结点38和54
1可以看出,对于这个问题回溯法占优势
1LC-检索问题:在LIFO和FIFO分枝-限界法中,对下一个E-结点的选择规则相当死板,在某种意义上是盲目的
方法:对活结点使用一个“有智力”排序函数c(
)来选取下一个E-结点往往可以加快到达一答案结点的速度
对任意结点X,可用两种标准来量度:–在生成一个答案结点之前,子树X需要生成的结点数–在子树X中离X最近的那个答案结点到X的路径长