有一批貨櫃要裝上一艘載重量為c的輪船。其中貨櫃i的重量為w。最優裝題要求確定在裝載體積不受限制的情況下,將盡可能多的貨櫃裝上輪船。
該問題可形式化描述為
其中,變數xi=0表示不裝入貨櫃i,xi=1表示裝入貨櫃i。
演算法描述
最優裝載問題可用貪心演算法求解,採用重量最輕者先裝的貪心選擇策略,可產生最優裝載問題的最優解。具體演算法描述如下:
public
static
float
loading
(float c,
float
w,int[
] x)
return opt;
}其中,element類說明如下:
public
static
class
element
implements
comparable
public
intcompareto
(object x)
}
最優子結構性質
設(x1,x2,…,xn)是最優裝載問題的滿足貪心選擇性質的最優解,則容易知道,x=1,且( x1,x2,…,xn )是輪船載重量為c-w1,待裝船貨櫃為{2,3,…,n時相應最優裝載問題的最優解。也就是說,最優裝載問題具有最優子結構性質。
由最優裝載問題的貪心選擇性質和最優子結構性質,容易證明演算法loading的正確性。演算法loading的主要計算量在於將貨櫃依其重量從小到大排序,故演算法所需的計算時間為o(nlogn).
貪心演算法例項
問題描述 馬的遍歷問題。在 方格的棋盤上,從任意指定方格出發,為馬尋找一條走遍棋盤每一格並且只經過一次的一條路徑。傳統演算法 首先這是乙個搜尋問題,運用深度優先搜尋進行求解。演算法如下 輸入初始位置座標 x,y 步驟c 如果 c 64 輸出乙個解,返回上一步驟 c x,y c 計算 x,y 的八個方...
貪心演算法例項
貪心演算法 又稱貪婪演算法 是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當...
經典貪心演算法 貪心演算法概述
貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...