上一次介紹了貨櫃裝載問題的佇列式分支限界法,本次將分享優先佇列式分支限界法解決這個問題的演算法。
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的最小重量機器設計。之所以想記錄這個問題,是因為我覺得自己 用各個部件的最小重量作為未來最理想重量 的這個設計還挺特別。其他都是實驗...