2010-11-03 72 views
0

我需要實現優先級集合。如何實現優先級集合

假設我們有集合(和它們的優先級)在以下三個值:

thisIsUrgent = Priority.High 
thisIsImportant = Priority.Medium 
thisIsBoring = Priority.Low 

我想用MoveNext()要經過收集得到另一個值。
假設我循環10次,每次從MoveNext()打印值,所期望的輸出是:

thisIsUrgent

thisIsImportant

thisIsUrgent

thisIsUrgent

thisIsBoring

thisIsImportant

thisIsUrgent

thisIsUrgent

thisIsImportant

thisIsBoring

所以基本上,我得到五個高優先級值,3例正常一低。

任何想法?

+2

我不明白的輸出。爲什麼它應該這樣出來? – 2010-11-03 17:00:59

+0

我沒有得到它:( – st0le 2010-11-03 17:02:00

+1

究竟是什麼問題? – YWE 2010-11-03 17:02:52

回答

2

最簡單的方法是有一個背後的接口3個集。當調用MoveNext時,請檢查具有最高優先級的那個,如果有消息返回它們直到隊列變空。然後越來越低。然後你可以改進挑選下一個隊列的算法,例如實現概率性的算法。

在您的特定情況下,你應該使用概率的調度。

  • Urgent具有5/10 = 0.5
  • Medium具有0.3
  • Low具有0.2

在每轉中範圍[0; 1] GERATE隨機數。如果值落入[0; 0,5]然後從Urgent隊列挑,如果成[0,5; 0,8]然後Medium[0,8; 1] - >Low;

+1

+1好主意 - as只有3個優先級的優先級隊列會被過度殺傷 – 2010-11-03 17:14:09

+0

我不明白這是如何提供OP所描述的輸出的如果你有三個代表不同的優先級的集合,你不應該移動到一個集合優先級較低,直到第一個集合耗盡爲止 – 2010-11-03 17:20:57

+0

@Vivin Paliath它依賴於調度算法,你說的是固定優先級調度。 – Andrey 2010-11-03 17:28:42

0

也許你可以更好地澄清你的問題;爲什麼你需要你的輸出是按照特定的順序,這並不是很明顯。數據是在一個集合中,還是存在多個集合?

但是,如果您正在尋找實施優先級的數據結構,我建議您使用經過驗證的Priority Queue

1

使用3個集合,每個優先級一個,如Andrey所說。

然後,當你想獲得下一個任務,選擇一個隨機數1到9之間

檢索相關的收集下一個任務如下:

1至5:高優先級

6至8:普通優先級

9:低優先級