给定两个日期范围,确定两个日期范围是否重叠的最简单或最有效的方法是什么?
举个例子,假设我们有通过日期时间变量表示的范围StartDate1来EndDate1 和 StartDate2到EndDate2.
我需要一个可以在一个维度内存储非重叠范围的数据结构.不需要完全覆盖整个尺寸范围.
一个例子是会议室调度程序.维度是时间.没有两个时间表可能重叠.会议室并非始终安排.换句话说,对于给定时间,最多可以有一个时间表.
快速解决方案是存储开始和结束时间的范围.
Range {
Date start
Date end
}
Run Code Online (Sandbox Code Playgroud)
这是非规范化的,要求容器不强制执行.对于两个相邻的范围,前一个'结束将在下一个开始时是多余的.
另一种方案可能涉及存储每个范围的一个边界值.但是对于连续的范围序列,总会有一个边界值而不是范围.为了解决这个问题,序列可以表示为交替的边界值和范围:
B =边界值,r =范围
BrBrB
数据结构可能如下所示:
Boundary {
Date value
Range prev
Range next
}
Range {
Boundary start
Boundary end
}
Run Code Online (Sandbox Code Playgroud)
从本质上讲,它是具有交替类型的双向链表.
最终,我使用的任何数据结构都将在内存(应用程序代码)和关系数据库中表示.
我很好奇学术界或行业所尝试的解决方案是什么.