DSA In-class activity
2020/5/11
有 N 盤食物,每一盤有各自的上菜時間 r 與食用時間 e。
請按照下列四種 policy ,依照每盤食物吃完的順序,印出食用完畢的時間。
如果一盤菜在 t = 0 ready,耗時 1 秒吃完,在第 秒吃完
如果一盤菜在 t = 5 ready,耗時 3 秒吃完,在第 秒吃完
1
8
0
1
| index | ready time | eating time | remain time |
|---|---|---|---|
| 0 | 0 | 2 | 2 |
| 1 | 1 | 3 | 3 |
| 2 | 2 | 1 | 1 |
Time:
0
Ready:
0
Eat:
0
1
0
2
1
0
0
1
2
3
4
5
0, 1
1,2
1,2
1,2
2
0
1
1
1
2
| index | ready time | eating time | remain time |
|---|---|---|---|
| 0 | 0 | 2 | 2 |
| 1 | 1 | 3 | 3 |
| 2 | 2 | 1 | 1 |
Time:
0
Ready:
0
Eat:
0
1
0
0
2
1
0
1
2
3
4
5
0, 1
1,2
1
1
1
0
2
1
1
1
| index | ready time | eating time | remain time |
|---|---|---|---|
| 0 | 0 | 2 | 2 |
| 1 | 1 | 3 | 3 |
| 2 | 2 | 1 | 1 |
Time:
0
Queue:
0
Eat:
0
1
0
0
2
0
1
1
2
3
4
5
0, 1
1, 2
2, 1
1
1
0
2
1
1
1
維護一個 ready queue,每秒鐘從 queue 中 pop 一道菜,如果剩餘時間 > 0 則將此菜 enque。
該秒廚房準備好的菜,必須等到該秒吃完重新放進 queue 中後才接著放到 queue 中。(如第1秒時)
| index | ready time | eating time | remain time |
|---|---|---|---|
| 0 | 0 | 3 | 3 |
| 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 |
Time:
0
Ready:
0
Eat:
0
1
2
1
0
1
2
3
4
0, 1
0, 2
0.2
2
2
和 Policy 2 的差別是每秒都吃當前最快能吃完的那道菜
不一定要整道吃完才可以換下一道
(如果有多道菜剩餘時間相同,以 index 小者先吃)
0
5
0
1
0
0
2
2