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