如何实现优先级集合

时间:2010-11-03 16:58:17

标签: data-structures collections

我需要实现优先收集。

假设我们在集合中有以下三个值(及其优先级):

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

我想使用MoveNext()来查看集合以获取其他值 假设我循环十次,每次打印MoveNext()的值,所需的输出是:

  

thisIsUrgent

     

thisIsImportant

     

thisIsUrgent

     

thisIsUrgent

     

thisIsBoring

     

thisIsImportant

     

thisIsUrgent

     

thisIsUrgent

     

thisIsImportant

     

thisIsBoring

基本上,我得到五个高优先级值,三个正常值和一个低值。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

最简单的方法是在一个界面后面有3个集合。当调用MoveNext时,检查具有最高优先级的那个,如果有混乱,则返回它们直到队列变空。然后降低。然后你可以改进挑选下一个队列的算法,例如实现概率的算法。

在您的特定情况下,您应该使用概率性调度。

  • Urgent5/10 = 0.5
  • Medium0.3
  • Low0.2

每次转弯时,gerate随机数范围为[0; 1]。如果值落入[0; 0,5],则从Urgent队列中挑选,如果进入[0,5; 0,8],则Medium[0,8; 1] - > Low;

答案 1 :(得分:1)

答案 2 :(得分:1)

使用3个集合,每个优先级都有一个,正如安德烈所说。

然后,当您想要完成下一个任务时,请选择1到9之间的随机数。

从相关集合中检索下一个任务,如下所示:

1到5:高优先级

6到8:正常优先级

9:低优先级

答案 3 :(得分:0)

也许你可以更好地澄清你的问题;为什么您需要输出按特定顺序排列并不是很明显。数据是在一个集合中,还是有多个集合?

但如果您正在寻找实现优先级的数据结构,我建议您使用经过验证的Priority Queue