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

一直没太搞明白分支限界和回溯有什么区别,今天算是终于搞明白了,以最经典的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;

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








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章