0

我在 C 中创建了一个基于二进制堆的优先级队列。我正在尝试创建一个离散事件模拟。

以下是我对事件模拟的理解:

假设我的优先级队列中有 10 个值,每个值代表一个事件。对于 PQ 中的每个值,程序将出列一个值并再插入 10 个值。换句话说,该程序正在为这 10 个事件进行新的计算。

但是 PQ 中的旧值会发生什么变化?由于每个事件都有新的值排队,以前的值不应该变得多余吗?不应该将它们从 PQ 中删除以使 PQ 不会变得太大吗?

4

1 回答 1

0

优先级队列事件列表中的待处理事件将一直保留在那里,直到 1) 它们被轮询并成为活动事件,或 2) 由于不同的活动事件的逻辑,它们被取消(从优先级队列中显式删除)。

例如,考虑一个简单的空中交通模拟。起飞事件将安排在某个指定时间到达目标目的地的事件。但是,天气事件或紧急事件可能会取消预定的到达时间,并且要么重新安排额外的延误,要么将飞机改道以不同的时间到达不同的目的地。但是,除非您明确取消了最初计划的到达,否则该事件将在事件列表中挂起,直到其预定时间滚动。

归根结底,没有魔法。作为建模者,您可以以反映模型正确逻辑的方式安排或取消事件。优先级队列只是记账以处理执行顺序。

于 2019-01-07T05:47:13.700 回答