我正在建立一个离散事件模拟器。维基百科提到有几个通用优先级队列可以在DES中使用。具体来说,它提到日历队列是一个很好的结构。我找到了一个提到日历队列的pdf(从1988年开始),但在大多数情况下我找不到任何关于它们的内容。有人会介意解释什么是Calendar Queue,它们是如何使用的,以及我在哪里可以找到示例实现?
答案 0 :(得分:18)
是的,Brown 1988是我所知道的第一篇描述日历队列的论文,尽管布朗提到了几位在他之前的作者。下面是日历队列文献的相对完整的参考书目以及每篇论文的笔记。如果您想要任何出版物的副本,请给我留言。
此外,我们最近完成了描述Brown算法的变体,该算法应该表现得更好。描述是,我认为非常适合构建实现,本文提供了示例代码。该出版物的标题为Trading Space for Time: Constant-Speed Algorithms for Managing Future Events in Scientific Simulations
,由Lehman,Keene和Barnes撰写,并应在今年秋季的某个时候编入索引。如果您需要副本,请发表评论,我会将其发送给您。
要回答问题的其他部分,您可以将日历队列视为优先级队列,该队列针对优先级不断降低的事件进行了优化。通常,事件的优先级(时间)以某种方式被分箱,以避免必须触摸所有事件以插入一个事件(在某些形式的堆管理中可能发生)。
答案 1 :(得分:8)
Google搜索找到
研究离散事件日历队列中的优化桶宽 模拟器
http://pioneer.netserv.chula.ac.th/~achaodit/paper5.pdf
描述了第2部分中的日历队列。
答案 2 :(得分:4)
NIST的定义:
具有N个桶的快速优先级队列实现,每个桶具有宽度w或覆盖w时间。优先级p大于当前值的项目在桶(p / w)%N中。选择N和w以在每个桶中包含少量项目。保持项目在桶中排序。如果项目数量增加或减少很多,则将N加倍或减半并更改w。
Paul E. Black,“日历队列”,“算法和数据结构词典”[在线],Vreda Pieterse和Paul E. Black编辑。 2005年1月24日。(访问2014-03-10)提供:http://www.nist.gov/dads/HTML/calendarQueue.html