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

Java 查找定期重复出现的时间间隔是否相互重叠的算法?,java,algorithm,math,date-arithmetic,arithmetic-expressions,Java,Algorithm,Math,Date Arithmetic,Arithmetic Expressions,有多个重复的时间间隔,从开始时间到结束时间。每个间隔由重复的开始时间、结束时间(直到重复将要继续的点)、持续时间(当它处于活动状态且可以重叠时)和持续时间定义 采样间隔: startTime: 3 secs endTime: 30 secs onDuration: 3 secs (represented by x) offDuration: 5 secs (represented by -) |--[xxx]-----[xxx]-----[xxx]-----[xxx]-|

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

采样间隔

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

|--[xxx]-----[xxx]-----[xxx]-----[xxx]-|
startTime: 6 secs  
endTime: 15 secs  
onDuration: 3 secs  
offDuration: 6 secs  
重叠时间间隔:如果两个重复序列的开始和结束时间范围内的时间(x)重叠,则称为重叠

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

潜在区间

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

|--[xxx]-----[xxx]-----[xxx]-----[xxx]-|
startTime: 6 secs  
endTime: 15 secs  
onDuration: 3 secs  
offDuration: 6 secs  
PotentialInterval与SampleInterval不冲突,因为它在重叠之前结束

注释

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

  • 每个间隔的结束时间和开始时间都构成一个算术级数。开始时间=开始时间+(n-1)(持续时间+关闭持续时间),其中开始时间<结束时间。因此,可能会指向正确的方向,尽管我找不到一种方法将持续时间纳入其中

  • 样本要小得多。事实上,每次复发的个体间隔数将为数千(例如,从现在到未来10年,每天下午3点到4点)。而且,复发的数量可能是数百。因此,对数据进行非规范化(列出每次发生的情况)可能不可行

  • 此数据存储在NoSQL数据库中,因此不可能在数据库中进行日期-时间操作。这需要在内存中完成,最好是大约500毫秒


  • 我不认为有一个简单的公式/算法来确定两个序列是否重叠。我会详细说明一下。设s1=系列1的起始值,a1=固结,b1=关闭时间,e1=结束时间,c1=a1+b1。让我们也有s2,a2,b2,c2和e2类似的序列2。问题是,序列的on周期是否重叠


    让i1表示系列1的一个特定时期,i1>=0,i1闻起来像是家庭作业……你的问题是什么?@dat3450:这不是家庭作业,这是我目前正在处理的资源调度问题。虽然我希望我已经做了这样的作业,这样我就不会被困在现在:)@DawoodibnKareem:我已经编辑了它,将“任务”重命名为“问题”。我的问题是,在给定的时间范围内,一个给定的新的重复周期是否与任何现有的重复周期重叠。(注意#1也或多或少地谈到了同样的问题,除了我的问题是否需要布尔重叠,而OP那里期望实际重叠)你能一步一步地解决它吗?1.丢弃完全在之前或之后的所有合成间隔。2.在剩余的时间段中,检查哪些时间段相同(开+关持续时间)。如果周期相同,则只需检查它们之间的偏移量。3.现在你留下的合成层段有一个不同的周期,这意味着它们最终相交。您可以计算周期的最小公倍数。如果该值小于一般重叠值,则会出现持续时间重叠。4.剩下的可能适合于反规范化。
    0 <= i1 <= m1
    0 <= i2 <= m2
    i1 >= c2/c1*i2 + (s2-s1+a2-a1)/(2*c1)
    i1 < c2/c1*i2 + (2*a2+s2-s1)/(2*c1)