分支限界法和回溯法的區別

一直沒太搞明白分支限界和回溯有什麼區別,今天算是終於搞明白了,以最經典的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;

回溯法比較好理解,就是本科數據結構教材上講過的深度優先算法,這裏不再多贅述。








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