Gourmet, again!

DSA In-class activity

2020/5/11

Goal

有 N 盤食物,每一盤有各自的上菜時間 r 與食用時間 e。

請按照下列四種 policy ,依照每盤食物吃完的順序,印出食用完畢的時間。

建立默契

如果一盤菜在 t = 0 ready,耗時 1 秒吃完,在第        秒吃完

 

如果一盤菜在 t = 5 ready,耗時 3 秒吃完,在第        秒吃完

1

8

0

1

Policy 1: FIFO

First in, first out,先到先吃

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

Policy 2: SJF

Shortest Job first

先吃最快能吃完的,吃完一道才能換下一道

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

Policy 3: RR

Round-Robin

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秒時)

Policy 4: PSJF

Preempitive shortest job first

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

Task

Implement a priority queue to solve the problem!

Made with Slides.com