代码之家  ›  专栏  ›  技术社区  ›  Nissim

如何实现优先级集合

  •  0
  • Nissim  · 技术社区  · 14 年前

    我需要实现一个优先收集。

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

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

    我想用 MoveNext()
    假设我循环十次,每次从 移动下一个() ,所需输出为:

    这一点很重要

    这很紧急

    这很无聊

    这很紧急

    这很紧急

    这很无聊

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

    4 回复  |  直到 10 年前
        1
  •  2
  •   Andrey    14 年前

    最简单的方法是在一个接口后面有3个集合。打电话时 MoveNext 检查具有最高优先级的消息,如果有消息,则返回它们,直到队列变空。然后越来越低。然后可以改进下一个队列的选取算法,例如实现概率队列。

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

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

    每转一圈,范围内的随机数 [0; 1] . 如果价值落入 [0; 0,5] 然后从中挑选 紧急的 排队,如果进入 [0,5; 0,8] 中等 [0,8; 1] -> ;

        2
  •  1
  •   Daniel MoÅ¡mondor    14 年前
        3
  •  1
  •   Martin Broadhurst    14 年前

    然后,当您想要获得下一个任务时,选择一个介于1和9之间的随机数。

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

    6至8:正常优先级

    9:低优先级

        4
  •  0
  •   Vivin Paliath    14 年前

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