實驗五 揹包問題和帶時限的作業排序

2021-09-06 20:11:50 字數 2894 閱讀 9797

一、實驗名稱:揹包問題和帶時限的作業排序

二、實驗目的:掌握貪心演算法解決問題的思想和一般過程,學會使用貪心演算法解決實際問題。

三、實驗內容

實驗問題和程式執行結果:

第一部分 揹包問題

完善下列程式,並回答問題。

1 #include2

#define ksize 30

34 template

5class

knapsack6;

1617 template

18 knapsack::knapsack(int msize, float cap, float *wei, t *prof)

1928

};29

30 template

31void knapsack::print()

35 cout

收益陣列:";

36for( i = 0; i < n ; i ++)

37 cout<

38};

3940 template

41void knapsack::greedyknapsack(float *x)

4546

47void

main()48;

51float prof[ksize] = ;

52float m =20

;53 knapsackk(size,m,wei,prof);

54float

x [ksize];

55k.print();

56k.greedyknapsack(x);

57 cout<

最終的解陣列

"<

58for(int i = 0; i < size; i++) cout<

"<

59 cout<

60 }

view code

補充後的程式:

1 #include2

#define ksize 30

34 template

5class

knapsack6;

1617 template

18 knapsack::knapsack(int msize, float cap, float *wei, t *prof)

1928

};29

30 template

31void knapsack::print()

35 cout

收益陣列:";

36for(int i = 0; i < n ; i ++)

37 cout<

38};

3940 template

41void knapsack::greedyknapsack(float *x)

4849

for(int i=0;i)

53 x[i]=1.0

;54 u=u-w[i];55}

56int i=0;57

if(i

6162

63int

main()64;

67float prof[ksize] = ;

68float m =20

;69 knapsackk(size,m,wei,prof);

70float

x [ksize];

71k.print();

72k.greedyknapsack(x);

73 cout<

最終的解陣列

"<

74for(int i = 0; i < size; i++) cout<

"<

75 cout<

76 }

view code

1. 分析103頁程式6-1,畫出流程圖。

2. 分析knapsack類,私有變數,分別表示的含義為:

3. 分析greedyknapsack程式,畫出該演算法的流程圖。

4. 當揹包為:wp

m = 20 時:

解陣列的輸出為:

5. 完善greedyknapsack程式,使得輸出解陣列與原順序相同。當揹包的值為:wp

m = 45時,解陣列的輸出為:

第二部分 帶時限的作業排序演算法

完善下列程式,並回答問題。

1 #include2

3int js(int *d,int *x,intn)6

7void

main();

11int p = ;

1213 cout

輸入資料:";

14for(int i = 0; i"

".<

">";}

1516

intresult;

17for( i=0;i)

18for(int j=i+1;j)

1925

}26 cout

排序以後的結果:";

27for(i = 0; i"

".<

">";}

2829 result =js(d,x,n);

30 cout

輸出結果:";

31for(i = 0; i1 ;i++)

32 }

view code

分析程式6-4,畫出該演算法的流程圖。

分析程式6-4,分別說明變數d、x、n、k、r的含義。

當作業序列為:

時限價值

貪心演算法的最終結果為:

通過分析,或者在程式中增加適當的輸入語句。以上題為例,給出在貪心演算法的每一步解空間x的狀態,以及j、r、k的值。

四、實驗小結和心得:

帶時限的作業排序問題 經典問題

題目描述 設有乙個單機系統 無其它資源限制且每個作業執行相等時間,不妨假定每個作業執行1個單位時間。現有n 00,di為整數。如果作業能夠在截止期限之內完成,可獲得pi 0的收益。問題要求得到一種作業排程方案,該方案給出作業的乙個子集和該作業子集的一種排列,使得若按照這種排列次序排程作業執行,該子集...

常見的揹包問題 01揹包和完全揹包

有 n 件物品和容量為 m 的揹包,給出 n 件物品的重量 w i 以及價值 c i 求解讓裝入揹包的物品重量不超過揹包容量且價值最大,每個物品只能選擇一次 暴力解法 暴力列舉每件物品要不要放入揹包,時間複雜度o 2 n 顯然是不能接受的,而使用 dp 可以將時間複雜度變成o nm 動態規劃 用dp...

混合揹包問題,和多重揹包問題一樣的處理

如果將三種揹包問題混合起來。也就是說,有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的次數有乙個上限 多重揹包 應該怎麼求解呢?def change multiple to 01 n,v,c,w,m c w for i in range n t min v c i m...