我正在开发一个离散事件模拟器。维基百科提到有几种通用的优先队列适用于离散事件模拟器。具体来说,它提到了日历队列是一种很好的数据结构。我找到了一份1988年的pdf文件提到了日历队列,但大多数情况下我找不到其他相关信息。请问有人可以解释一下什么是日历队列,它们如何使用以及我在哪里可以找到样例实现?
我正在开发一个离散事件模拟器。维基百科提到有几种通用的优先队列适用于离散事件模拟器。具体来说,它提到了日历队列是一种很好的数据结构。我找到了一份1988年的pdf文件提到了日历队列,但大多数情况下我找不到其他相关信息。请问有人可以解释一下什么是日历队列,它们如何使用以及我在哪里可以找到样例实现?
是的,Brown 1988 是我所知道的第一篇描述日历队列的论文,尽管Brown提到了几位先于他的作者。以下是一个相对完整的日历队列文献目录以及每篇论文的笔记。如果您需要任何出版物的副本,请给我留言。
此外,我们最近描述了布朗算法的一种变体,应该会表现更好。我认为描述已经相当充分,可以建立实现,并且样例代码在论文中提供。该出版物名为《用空间换时间:科学模拟中管理未来事件的恒定速度算法》(Lehman、Keene和Barnes),预计今年秋季之前将被编入索引。如果您想要一份副本,请留言,我会把它发送给您。
回答您问题的另一部分,您可以将日历队列视为针对具有不断降低优先级的事件进行优化的优先队列。通常以某种方式对事件的优先级(时间)进行分组,以避免必须触碰所有事件才能插入一个新事件(这可能会发生在某些堆管理形式中)。
通过谷歌搜索,找到了一篇名为“离散事件模拟器中日历队列优化桶宽度的研究”的论文。
链接如下:http://pioneer.netserv.chula.ac.th/~achaodit/paper5.pdf
其中第二部分介绍了日历队列。
NIST定义:
一种快速优先队列实现,每个桶的宽度为w,或覆盖w时间。具有比当前优先级p更高的项目进入桶(p/w)%N。选择N和w使每个桶中的项目较少。保持桶内项目排序。如果项目数量增加或减少,则将N加倍或减半并更改w。
Paul E. Black,“calendar queue”,收录于《算法和数据结构词典》[在线],Vreda Pieterse和Paul E. Black编辑,2005年1月24日。(访问日期:2014-03-10)可从http://www.nist.gov/dads/HTML/calendarQueue.html获取。