優先佇列式分支限界法 輪船裝載問題(貨櫃問題)

2021-10-05 05:38:19 字數 1123 閱讀 6711

上一次介紹了貨櫃裝載問題的佇列式分支限界法,本次將分享優先佇列式分支限界法解決這個問題的演算法。

problem:

裝載問題的問題提出是,有一批共n個貨櫃要裝上2艘載重量分別為 c1和c2 的輪船,其中貨櫃i的重量為 wi,且(貨櫃總重量和)w<=c1+c2 。問是否有乙個合理的裝載方案能將這n個貨櫃裝上這兩艘輪船。

由於 王曉東先生著的《演算法設計與分析》裡面的**由於缺少了最大堆類的描述,所以並不能執行,這裡對該演算法進行了增加與修改。若有需要的同學可以參考一下。

//優先佇列式分支限界法_貨櫃裝載問題

public class prioritybbloding

}

static class heapnode implements comparable//堆的元素型別類

public int compareto(object x)

} //取出堆頂元素,並且重新調整堆為最大堆的演算法

static heapnode removeheapsort()

//將堆元素node加入堆,並且調整堆

static void insert(heapnode node)

//將堆頂元素取出,並且調整堆

public heapnode removemax()

} public static int maxloading(int w,int c,int bestx)

//搜尋子集空間樹

while(i!=n+1)

for(int j=n;j>0;j--)

return ew;

}public static void main(string args) ;//貨櫃重量

int c=120;//輪船載重量

int bestx=new int[n+1];//最優解

int a=maxloading(w,c,bestx);

system.out.println("最優載重量為:"+a);

system.out.println("最優解為:");

佇列式分支限界法 裝載問題

今晚終於把老師發布的演算法題的思路理清楚了,很是開心。這次的演算法是用佇列式分支限界法解決裝載問題。下面對於演算法的幾乎每一步都給了詳細解釋。需要的同學可以借鑑一下。嘻嘻。希望大家一起共同進步呀 佇列式分支限界法 貨櫃問題 public class fifobbloding 佇列類 private ...

演算法實驗 優先佇列式分支限界法解01揹包問題

分支限界法採用的是廣度優先搜尋,而優先佇列採用的是佇列裡最優的出隊,這裡可以使用最大堆來實現活接墊優先佇列,最大堆以活節點的界值作為優先順序。左子樹的解的上界與父節點相同,不用計算。右子樹的解的界值是 將剩餘物品以其單位重量價值排序,然後依次裝入物品,直到裝不下時,再裝入物品的一部分來裝滿揹包,即採...

優先佇列式分支限界法 最小重量機器設計問題

問題描述 設某一機器由n個部件組成,每一種部件都可以從m個不同的 商處購得。設是從 商j處購得的部件i的重量,是相應的 試設計乙個優先佇列式分支限界法,給出總 不超過d的最小重量機器設計。之所以想記錄這個問題,是因為我覺得自己 用各個部件的最小重量作為未來最理想重量 的這個設計還挺特別。其他都是實驗...