15.某工廠有一批貨物需要加工,現(xiàn)已知每批貨物到達(dá)工廠的時(shí)間和需要加工的時(shí)間,為了提高加工的效率,工廠管理員想到兩個(gè)加工的方法。
?①先到先加工:按貨物到達(dá)的時(shí)間順序依次加工,若第i件貨物正在加工,第i+1件貨物已經(jīng)到達(dá)工廠,則需等待第i件貨物加工完成后,才能開始第i+1件貨物的加工;
?②優(yōu)先加工“加工時(shí)間”最短的貨物:在已經(jīng)到達(dá)工廠的貨物中,找出“加工時(shí)間”最短的貨物進(jìn)行加工,其他貨物等其加工完再加工;已到達(dá)工廠的剩余貨物按同樣的方法加工。
工廠管理員想知道按這兩種不同的方法對(duì)貨物進(jìn)行加工,需要等待的時(shí)間分別為多少,以便更好選擇加工方案。
?某件貨物的等待時(shí)間=該貨物開始加工的時(shí)間-該貨物到達(dá)工廠的時(shí)間
?總等待時(shí)間=所有貨物的等待時(shí)間之和
如某批貨物加工時(shí)間如表所示。
貨物 |
到達(dá)時(shí)間 |
需加工時(shí)間 |
方案①等待時(shí)間 |
方案②等待時(shí)間 |
貨物1 |
0 |
10 |
0 |
0 |
貨物2 |
1 |
1 |
9 |
9 |
貨物3 |
2 |
5 |
9 |
12 |
貨物4 |
3 |
1 |
13 |
8 |
貨物5 |
4 |
2 |
14 |
8 |
總等待時(shí)間 |
44 |
37 |
(1)若如表中貨物4需加工的時(shí)間改為4,則使用方案①進(jìn)行加工,加工整批貨物的總等待時(shí)間為
。
(2)按方案①進(jìn)行加工的算法如下,請(qǐng)?jiān)跈M線處填入合適的代碼。
(3)按方案②進(jìn)行加工的算法如下,請(qǐng)?jiān)跈M線處填入合適的代碼。其中,為了能快速的找出已到達(dá)工廠的所有貨物中、加工時(shí)間最短的貨物,本算法使用Python的優(yōu)先隊(duì)列類PriorityQueue,該隊(duì)列類常用的方法如下:
方法 |
示例 |
說明 |
PriorityQueue( ?。?/td>
| q=PriorityQueue( ?。?/td>
| 創(chuàng)建一個(gè)優(yōu)先隊(duì)列q |
put(x) |
q.jye.ai(x) |
將數(shù)據(jù)x加入到隊(duì)列q中 |
get( ) |
x=q.jye.ai( ?。?/td>
| 將隊(duì)列q中的最小值出隊(duì),并賦給變量x |
empty( ) |
q.jye.ai( ?。?/td>
| 判斷隊(duì)列q是否為空,若為空返回True,否則返回False |
(4)主程序如下: