【问题标题】:What is a Calendar Queue?什么是日历队列?
【发布时间】:2011-08-25 16:29:56
【问题描述】:

我正在构建一个离散事件模拟器。 Wikipedia 提到有几个通用优先级队列非常适合在 DES 中使用。具体来说,它提到日历队列是一个很好的结构。我找到了一个 pdf(从 1988 年开始),其中提到了日历队列,但在大多数情况下,我找不到关于它们的任何其他信息。有人介意解释一下什么是日历队列、它们是如何使用的以及我在哪里可以找到示例实现吗?

【问题讨论】:

    标签: algorithm language-agnostic data-structures simulation priority-queue


    【解决方案1】:

    是的,Brown 1988 是我所知道的第一篇描述日历队列的论文,尽管 Brown 提到了他之前的几位作者。下面是日历队列文献的相对完整的参考书目以及我在每篇论文上的笔记。如果您想要任何出版物的副本,请给我留言。

    • Vaucher 1975 事件列表算法的比较。还介绍了三种新算法。灵感来自 Brown1988。
    • Henricksen 1977 事件列表算法 - 基于 Vaucher 和 Duval,适应间隔时间并在多种分布中表现良好
    • Ulrich 1978 Brown1988 声称这是 O(1),但溢出列表除外
    • Jones 1986 比较优先级队列,有早期版本的日历队列
    • Brown 1988 引入日历队列 [又名:Sorted-discipline 日历队列]
    • Davison 1989 发现了同样的情况,提到了一些重要的改进,布朗在同一封信中承认了这些改进,并有自己的一些想法。戴维森建议琼斯 1986 提供了一些有价值的日历机制
    • Ronngren 1991 懒惰的队列。具有近、远和非常远未来的日历队列 - 这可以实现延迟排序,从而大大加快测试速度
    • 斯坦曼 1994 年事件视界。生成的事件在它们发生的时间有一些概率分布,让我们用它来确定需要排序的内容。允许并行仿真
    • Steinman 1996 Event Horizo​​n 第 2 部分。将 Steinman1994 应用于事件列表管理。修改其他数据结构以用于 CQ。
    • Ronngren 1997 比较许多不同的日历队列。 Lazy Queue 表现良好,但 Brown1988 经常表现更好。 LazyQ 和 SCQ 的最坏情况性能很差,Skew Heap 和 Sply Tree 的最坏情况最好。
    • 哦 1997 动态延迟日历队列。提高传统 CQ 在不均匀事件分布上的性能
    • 哦 1999 年动态日历队列。适用于不均匀分布
    • Cazzolla 1998 Java 实现的延迟队列和分析(不是学术论文)。
    • Tan 2000 SNOOPy:使用最佳操作参数 CQ 进行统计增强。使用统计测试来制作一个 ebtter 桶。在某些情况下,运行速度比 DCQ 和 CQ 快 100 倍
    • Hui Thesis 学士论文,描述了 Hui 2002 论文的更多细节以及其他日历队列实现的优缺点
    • Hui 2002 未来事件现在不需要排序;因此,可以限制优先级队列本身的大小,从而减少调整大小的开销。
    • Goh 2003 MList。多层链表消除了调整大小操作。实验证明比 Calendar Queue、Dynamic CQ、SNOOPy CQ、2-tier Dynamic Lazy CQ 和 3-tier Lazy Queue 至少快 100%
    • Siangsukone 2003 优化了 CQ 中的铲斗宽度。证明存储桶宽度会对性能产生重大影响。
    • Goh 2004 DSplay。消除代价高昂的调整大小操作。至少比其他日历队列快 100%。
    • Tang 2005 梯形队列。即使在具有无限方差的队列分布下也能提供稳定的 O(1) 性能。类似于惰性队列,但更好。
    • Yan 2006 日历队列迟缓。当事件大多按顺序插入时,可以使用一些统计属性来实现 2 阶加速
    • Himmelspach 2007 事件有持续时间 - 在研究主线之外。需要额外的功能,此算法提供,但后续工作可能有限。

    此外,我们最近完成了对 Brown 算法的一种变体的描述,该算法的性能应该更好。描述是,我认为足够构建一个实现,并且本文中提供了示例代码。该出版物由 Lehman、Keene 和 Barnes 命名为Trading Space for Time: Constant-Speed Algorithms for Managing Future Events in Scientific Simulations,应该在今年秋天的某个时候被编入索引。如果您想要一份副本,请发表评论,我会发送给您。

    要回答您问题的不同部分,您可以将日历队列视为优先级队列,该队列针对优先级不断降低的事件进行了优化。通常,事件的优先级(时间)会以某种方式进行分箱,以避免为了插入一个事件而必须触及所有事件(这可能发生在某些形式的堆管理中)。

    【讨论】:

    • 嗨,Richard,我想我不能要您的论文副本吗?我正在研究这样一个问题,但我没有意识到这方面的研究仍在进行中!不过,我已经阅读了一些较旧的论文。如果你不能这样做,我理解,但我只是想我会问 - 祝你好运,凯文
    • 我读到 Cron 实现了 Franta 和 Maly 的算法,您认为 Cron 是否能够利用这项新研究?
    • @CMCDragonkai,你有链接吗?
    【解决方案2】:

    Google 搜索发现

    离散事件日历队列中优化桶宽度的研究 模拟器

    http://pioneer.netserv.chula.ac.th/~achaodit/paper5.pdf

    在第 2 节中描述了日历队列。

    【讨论】:

    • 谢谢 - 虽然从那个描述来看,它似乎只是一堆均匀间隔的优先级队列。
    【解决方案3】:

    NIST定义:

    一个快速优先队列实现,有 N 个桶,每个桶的宽度为 w,或覆盖 w 时间。优先级 p 高于当前的项目进入存储桶 (p/w)%N。选择 N 和 w 以使每个桶中的项目很少。保持物品在桶内分类。如果项目的数量增加或减少很多,则将 N 加倍或减半并更改 w。

    Paul E. Black,“日历队列”,算法和数据结构词典 [在线],Vreda Pieterse 和 Paul E. Black,合编。 2005 年 1 月 24 日。(2014 年 3 月 10 日访问)来自:http://www.nist.gov/dads/HTML/calendarQueue.html

    【讨论】:

      猜你喜欢
      • 2022-07-21
      • 2010-11-06
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      相关资源
      最近更新 更多