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