我需要实现优先收集。
假设我们在集合中有以下三个值(及其优先级):
thisIsUrgent = Priority.High
thisIsImportant = Priority.Medium
thisIsBoring = Priority.Low
我想使用MoveNext()
来查看集合以获取其他值
假设我循环十次,每次打印MoveNext()
的值,所需的输出是:
thisIsUrgent
thisIsImportant
thisIsUrgent
thisIsUrgent
thisIsBoring
thisIsImportant
thisIsUrgent
thisIsUrgent
thisIsImportant
thisIsBoring
基本上,我得到五个高优先级值,三个正常值和一个低值。
有什么想法吗?
答案 0 :(得分:2)
最简单的方法是在一个界面后面有3个集合。当调用MoveNext
时,检查具有最高优先级的那个,如果有混乱,则返回它们直到队列变空。然后降低。然后你可以改进挑选下一个队列的算法,例如实现概率的算法。
在您的特定情况下,您应该使用概率性调度。
Urgent
有5/10 = 0.5
Medium
有0.3
Low
有0.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。