【发布时间】:2012-07-06 05:48:17
【问题描述】:
现在在我的基本事件模拟引擎中,我只是简单地使用事件对象列表来根据模拟的每一步的优先级进行更新。我这样做是因为可以在事件更新期间创建新事件并将其附加到列表中,当事件到期时,我只需将其与列表中的最后一个事件“交换并弹出”以提高性能。我应该只使用两个优先级队列吗?似乎对每一步排序的 n log n 至少是相同的,如果不比将所有事件(n log n?)出队的成本低的话,将每个未过期的事件放入另一个列表中,该列表内置到下一个更新步骤的优先级队列中.
编辑:我认为将“事件”称为“进程”会更合适,而将整个事情称为进程调度模拟。队列中的每个对象都按优先级顺序更新其状态,然后只有当它过期(进入某种结束状态)时,它才会被丢弃并且不会重新插入队列中。这就是只有一个优先级队列可能是个问题的原因。当一个对象被重新插入时,它仍然具有最低的优先级,并且会再次被拉出。我正在考虑使用第二个队列来插入所有新生成的进程对象和未过期的进程对象,而不考虑优先级,然后我可以构建堆并在下一个更新周期开始之前将其与活动队列交换。
【问题讨论】:
标签: sorting heap simulation priority-queue heapsort