有一批貨櫃
,要裝上一艘載重量為
c的輪船。其中貨櫃
i的重量為wi
。 最優裝載問題要求確定
在裝載體積不受限制的情況下,將盡可能多的貨櫃裝上輪船。
最優裝載問題問題的形式描述:
•問題的形式描述是:給定c>
0,wi
>0,1≤i≤n,求n
元0-1向量
(x1, x2,
…, xn
),使得
輸入:貨櫃的數目n,船的載重量c,貨櫃i的重量為wi。
輸出:貨櫃i是否裝船,是的話輸出1,反之輸出0.
執行結果:
最優裝載問題可用貪心演算法求解。採用重量最輕者先裝的貪心選擇策略,可產生最優裝載問題的最優解。
根據w從小到大排序,t中儲存陣列下標,用的是簡單的氣泡排序。
template void sort(type *w, type *t, int n)
主要計算量為按照重量從小到大排序,演算法時間複雜度o(nlogn).
template void loading(int *x, type *w, type c, int n)
}
貪心選擇性質:設貨櫃已按其重量
由小到大
排序, (x
1, x
2, …, xn
)是最優裝載問題的乙個最優解. 令
若給定最優裝載問題有解, 則
1≤k ≤n.
(1)
當k=1
時, (x
1, x
2, …, xn
)是乙個滿足貪心選擇性質的最優解;
(2)
當k>1時,
取y1=1, yk
=0, yi
=xi, 1<
i≤n,
i≠k, 則
)是所給最優裝載問題的乙個可行解.
而由(y
1+ y
2+ … + yn
)= (x
1+ x
2+ …+ xn
)知, (y
1, y
2, …, yn
)是乙個
滿足貪心選擇性質的最優解.
最優裝載問題具有貪心選擇性質。
最優子結構性質:若(x
1, x
2, …, xn
)是最優裝載問題的乙個滿足貪心選擇性質的最優解
, 則有x1
=1。 (x
2, …, xn
)是輪船載重量為
c-w1
且待裝貨櫃為時,
相應最優裝載問題的乙個最優解.
最優裝載問題具有最優子結構性質。
由最優裝載問題的貪心選擇性質和最優子結構性質,容易證明演算法
loading的正確性。 演算法
loading的主要計算量在於將貨櫃依其重量從小到大排序,故演算法所需的計算時間為
o(nlogn)。
貪心,最優裝載問題
問題描述 有一批貨櫃要裝上一艘載重量為c的輪船,其中貨櫃i的重量為wi。最優裝載問題要求確定在裝載體積不受限制的情況下,將盡可能多的貨櫃裝上輪船。分析 可用貪心演算法求解,採用重量最輕者先裝的貪心選擇策略,可產生最優裝載問題的最優解。具體演算法描述如下 public static float loa...
最優裝載問題 貪心
問題描述 有一批貨櫃要裝上一艘載重量為c的輪船。其中貨櫃i的重量為wi。最優裝載問題要求確定在裝載體積不受限制的情況下,將盡可能多的貨櫃裝上輪船。程式設計任務 對於給定的n個貨櫃和輪船的載重量c,程式設計計算裝入最多時的貨櫃個數。輸入 輸入由多組測試資料組成。每組測試資料輸入的第1行中有2個正整數n...
最優裝載 貪心
最優裝載問題可用貪心演算法求解。採用重量最輕者先裝的貪心選擇策略,可產生最優裝載問題的最優解。template class type void loading int x type w type c,int n include h using namespace std const int max ...