我的问题是为基于事件的模拟选择数据结构。
N 个未来事件连同它们的发生时间一起被维护。N 是固定的或至少是有界的,范围从 10 到可能 10000。每个事件都有一个唯一的 ID,除了时间之外,原则上可以通过该 ID 检索它。
在一个循环中,会发生以下情况。下一个发生的事件被移除并执行,并生成一个随机未来时间的同类新事件来替换它。作为副作用,一些 (<10) 现有事件改变了它们的发生时间,需要重新安排。这些要重新安排的事件的 ID 是已知的,但不知道它们的发生时间。
我认为堆可以快速获得最低元素,但我还需要快速重新排序通过 ID 访问的任意元素。有BatHeap在 O(log N) 中查找元素和插入,但似乎不允许索引访问?
我更喜欢持久结构(部分用于教育目的),但如果只有可变结构可以快速运行,我会使用它。