分支限界法和回溯法的区别

一直没太搞明白分支限界和回溯有什么区别,今天算是终于搞明白了,以最经典的0-1背包问题为例。

n = 3, 0 -1背包问题;

w = [16, 15, 15];

p = [45, 25, 25];

CostMax = 30;

解空间树如下图所示,1代表选择,0代表不选。

初学者一直容易搞混的问题就是结点的问题,这里结点不是代表的解,每一条边才是代表的解;


分支限界法如下处理:

Step1:

可扩展结点:A     活结点队列:B,C

选择路径 :A

当前W:0

当前P:0

Step2:

可扩展结点:B; 活结点队列:C,D,E

选择路径:A->B

当前W:16

当前P:45

Step3:

可扩展结点:C    活结点队列:D,E,F,G

选择路径:A->C

当前W:0

当前P:0

Step4:

如果扩展D,那么当前w = 31 > 30越界,所以直接进行剪枝,解空间树变成如下:

                                         

Step5:

可扩展结点:E   活结点队列:F,G,J,K

选择路径:A->B->E

当前W:16

当前P:45

Step6:

可扩展结点:F   活结点队列:G,J,K,L,M

选择路径:A->C->F

当前W:15

当前P:25

Step7:

可扩展结点:G   活结点队列:J,K,L,M,N,O

选择路径:A->C->G

当前W:0

当前P:0

Step8:

如果扩展J,那么当前w = 16+15=31>30,所以对J剪枝,解空间树变为:


Step9:

可扩展结点:K  活结点队列:L,M,N,O

选择路径:A->B->E->G

当前W:16

当前P:45

Step10:

可扩展结点:L  活结点队列:M,N,O

选择路径:A->C->F->L

当前W:30

当前P:50

Step11:

可扩展结点:M  活结点队列:N,O

选择路径:A->C->F->M

当前W:15

当前P:25

Step12:

可扩展结点:N  活结点队列:O

选择路径:A->C->G->N

当前W:15

当前P:25

Step13:

可扩展结点:O  活结点队列:NULL

选择路径:A->C->G->O

当前W:0

当前P:0

活结点队列为空,算法终止,从可行解中筛选出最佳解为(0,1,1),maxP = 50;

回溯法比较好理解,就是本科数据结构教材上讲过的深度优先算法,这里不再多赘述。








评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值