貪心 最優裝載問題

2021-09-30 16:34:15 字數 1929 閱讀 3124

有一批貨櫃

,要裝上一艘載重量為

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 ...