如果这是众所周知的解决方案类问题,请原谅我。我一直在搜索,但显然没有成功。
假设我有n个事件必须在一定间隔内发生(例如[0,1])。每个事件都与从预定义的分布中随机抽取的持续时间相关联。假设时间间隔远大于所有事件持续时间的总和:始终存在有效的计划。在[0,1]间隔内事件发生的概率并不统一,但是事件是独立的,只要它们不重叠即可。
安排这些事件的有效且准确的(随机)方法是什么?
这是我当前的伪代码:
lowerBound =分钟(间隔)
upperBound = max(间隔)
对于numEvents中的n {
绘制开始时间
绘制endTime
while(startTime小于lowerBound || endTime超过upperBound){
绘制开始时间
绘制endTime
}
添加事件
重置lowerBound和upperBound以定义最大的剩余(无事件)间隔
}
我认为,通过选择更大的剩余时间来安排新事件的时间,我使事件过于分散-与其他事件相比,它们之间的间隔更大。但是,这在事件数量较少时似乎非常有效,并且可能非常准确。
我正在使用C++,尽管这可能无关紧要。
如果您知道这种问题叫什么,我也非常感谢搜索词。
上下文:这里的准确性对我来说最重要。在整个程序中,这不是耗时的步骤。
最佳答案
我只是将每个事件随机放置,检查是否有碰撞,如果有碰撞,则将板岩擦干净并重新开始。
您说时间间隔远大于事件持续时间的总和,因此冲突将很少发生,因此这种方法在实践中相当快。
您说您想要准确的结果。我不确定这是什么意思,但是我猜想所有有效的解决方案都应该是同等可能的。问题中的当前解决方案不满足该要求,但是这一要求可以满足。