Algorithm 如何优化具有未知未来事件的事件调度?
情景: 我需要给用户机会为服务预订不同的时间。 需要注意的是,我没有提前预订,但我需要在他们进来时将其填满 预订可以表示为键值对:Algorithm 如何优化具有未知未来事件的事件调度?,algorithm,logic,maximum-profit-problem,Algorithm,Logic,Maximum Profit Problem,情景: 我需要给用户机会为服务预订不同的时间。 需要注意的是,我没有提前预订,但我需要在他们进来时将其填满 预订可以表示为键值对: [开始时间,持续时间] 例如,[9,3]意味着事件从9点开始,持续时间为3小时 规则: 用户一个接一个进来,从来没有一批用户请求 预订不能重叠 服务全天候提供,因此无需担心“工作时间” 用户自行选择duration 显然,一旦用户选择并确认了他的预订,我们就不能再洗牌了 我们不希望差距小于一定的时间。这是基于未来用户填补空白的可能性。例如,如果持续时间在用户预订中
[开始时间,持续时间]
例如,[9,3]
意味着事件从9点开始,持续时间为3小时
规则:
- 用户一个接一个进来,从来没有一批用户请求
- 预订不能重叠
- 服务全天候提供,因此无需担心“工作时间”
- 用户自行选择
duration
- 显然,一旦用户选择并确认了他的预订,我们就不能再洗牌了
- 我们不希望差距小于一定的时间。这是基于未来用户填补空白的可能性。例如,如果
持续时间
在用户预订中的分布使得未来用户填补小于
小时间隔的概率小于x
,那么我们需要一个间隔不能小于p
的规则。(对于这个问题,我们可以假设x
是硬编码的,这里我只解释原因)x
- 目标是最大化服务繁忙时间
[startTime,duration]
我首先检查理想情况,即gapLength=duration
。如果没有这样的间隙,我会找到满足条件gapLength-duration>minimumGapDuration
的所有插槽(间隙),并根据该gapLength-duration
值按降序排列gapLength-duration
的第一个间隙,因为这使我有最大的可能性,在这次预订之后剩余的间隙将来也会被填补