查找定期重复的时间间隔是否相互重叠的算法?

时间:2017-05-10 03:29:45

标签: java algorithm math date-arithmetic arithmetic-expressions

从startTime到endTime,有多个重复的时间间隔。每个间隔由重现的开始时间,结束时间(直到重复将继续的点),onDuration(当它处于活动状态,并且可以重叠)和offDuration定义。

示例间隔

startTime: 3 secs  
endTime: 30 secs  
onDuration: 3 secs (represented by x)   
offDuration: 5 secs (represented by -)  

|--[xxx]-----[xxx]-----[xxx]-----[xxx]-|

重叠间隔:如果两个重复序列在每个序列的开始和结束时间范围内具有重叠的开启时间(x),则称其重叠。

问题:有几十个这样的间隔。提供了一个新的重复间隔,由相同的参数(startTime,endTime,onDuration,offDuration)定义。在startTime和endTime的时间范围内,此新的重复间隔是否与任何现有间隔重叠?

PotentialInterval

startTime: 6 secs  
endTime: 15 secs  
onDuration: 3 secs  
offDuration: 6 secs  

PotentialInterval与SampleInterval不冲突,因为它会在重叠之前结束。

备注

  1. 这与this question非常相似,但我无法完全理解解决方案的正确性。此外,我只对确定它们是否冲突(布尔值为true或false)感兴趣,而不是实际的冲突间隔。

  2. 每个间隔的结束时间和开始时间都形成算术级数。 startTime n = startTime +(n-1)(onDuration + offDuration)其中startTime n <时间结束。因此,也许this question可能指向正确的方向,但我无法找到将持续时间纳入其中的方法。

  3. 样本要小得多。实际上,每次重复的个别间隔的数量将是几千(例如,从现在到下一个10年,每天从下午3点到下午4点)。此外,重复次数可能是数百次。因此,对数据进行非规范化(列出每个出现的数据)可能不切实际。

  4. 此数据存储在NoSQL数据库中,因此无法在数据库中进行日期时操作。这需要在存储器中完成,并且优选地以~500毫秒

  5. 的顺序进行

0 个答案:

没有答案