一、實驗名稱:揹包問題和帶時限的作業排序
二、實驗目的:掌握貪心演算法解決問題的思想和一般過程,學會使用貪心演算法解決實際問題。
三、實驗內容
實驗問題和程式執行結果:
第一部分 揹包問題
完善下列程式,並回答問題。
1 #include2view code#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 }
補充後的程式:
1 #include2view code#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 }
1. 分析103頁程式6-1,畫出流程圖。
2. 分析knapsack類,私有變數,分別表示的含義為:
3. 分析greedyknapsack程式,畫出該演算法的流程圖。
4. 當揹包為:wp
m = 20 時:
解陣列的輸出為:
5. 完善greedyknapsack程式,使得輸出解陣列與原順序相同。當揹包的值為:wp
m = 45時,解陣列的輸出為:
第二部分 帶時限的作業排序演算法
完善下列程式,並回答問題。
1 #include2view code3int 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 }
分析程式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...