算法笔记6——分支限界

分支限界法与回溯法的不同:

(1)求解目标:
回溯法是找出解空间树中满足约束条件的所有解,分支限界法是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。
(2)搜索方式:
回溯法以深度优先的方式搜索解空间树分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。

分支限界的基本思想:

分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。
在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。

经典问题:

一、0-1背包

算法的思想:

首先,要对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。在下面描述的优先队列分支限界法中:
节点的优先级=已装袋的物品价值+剩下的最大单位重量
价值的物品装满剩余容量的价值和算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子结点是可行结点,则将它加入到子集树和活结点优先队列中。当前扩展结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时才将它加入子集树和活结点优先队列。当扩展到叶节点时为问题的最优值。
在这里插入图片描述

二、旅行商问题

算法描述:

1、首先考虑s=n-2的情形,此时当前扩展结点是排列树中某个叶结点的父结点。如果该叶结点相应一条可行回路且费用小于当前最小费用,则将该叶结点插入到优先队列中,否则舍去该叶结点。
2、当s<n-2时,算法依次产生当前扩展结点的所有儿子结点。由于当前扩展结点所相应的路径是x[0:s],其可行儿子结点是从剩余顶点x[s+1:n-1]中选取的顶点x[i],且(x[s],x[i])是所给有向图G中的一条边。对于当前扩展结点的每一个可行儿子结点,计算出其前缀(x[0:s],x[i])的费用cc和相应的下界lcost。当lcost<bestc时,将这个可行儿子结点插入到活结点优先队列中。
在这里插入图片描述
在这里插入图片描述

三、单源最短路径

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、批处理作业调度

在这里插入图片描述
数组m表示所给的N个作业在机器1和机器2上所需要的处理时间,数组B储存排好序的作业处理时间,数组A表示M与B之间的关系。
在这里插入图片描述
F1=机器1上最后的完成时间
F2=机器2上最后完成的时间
SF2=当前机器2上完成的时间和
BB=当前完成时间和下界

在这里插入图片描述

发布了23 篇原创文章 · 获赞 2 · 访问量 486

猜你喜欢

转载自blog.csdn.net/weixin_42385782/article/details/103827310