我在C语言中创建了一个基于二进制堆的优先级队列。我试图创建一个离散事件模拟。
这是我对事件模拟的了解:
假设我的优先级队列中有10个值,每个值代表一个事件。对于PQ中的每个值,程序将使一个值出队,并再插入10个值。换句话说,该程序正在为这10个事件进行新的计算。
但是PQ中的旧值会怎样?由于每个事件都会加入新值,因此先前的值是否不应该成为冗余?难道不应该将它们从PQ中移除,以免PQ不会太大吗?
答案 0 :(得分:0)
优先级队列事件列表中的待处理事件将一直保留在那里,直到1)被轮询并成为活动事件,或2)由于其他活动事件的逻辑而将它们取消(从优先级队列中明确删除)。 / p>
例如,考虑简化的空中交通模拟。起飞事件将在某个指定时间安排在目标目的地的到达事件。但是,天气事件或紧急事件可能会取消计划的到达时间,并以额外的延迟重新计划它的时间,或者将飞机转移到在不同的时间到达另一个目的地。但是,除非您明确取消了原定的到达时间,否则该事件将在事件列表中挂起,直到其预定时间到来为止。
最重要的是,没有魔术。作为建模者,您将以反映模型正确逻辑的方式安排或取消事件。优先级队列只是做簿记来处理执行顺序。