我想知道是否有人已经实现/知道将处理循环间隔的(最好是javascript)区间树算法。通过循环,我的意思是具有开始的间隔>结束。请注意,这也需要限制间隔的大小。
这只是常见区间树问题的一个子句吗?
回应评论中提出的问题: 这是一个图像(感谢G. Bach和维基百科),我的意思是圆形子范围:
和(与上图无关)这里是范围的json表示示例: [{id:' range1',start:3,end:34},{id:' range2circular',start:30,end:6}]
希望
谢谢!
答案 0 :(得分:1)
与circular arc graphs背后的想法相关的声音(但不是图表本身,因为你从间隔开始并且不关心它们的圆弧图表示。)
假设它是什么,这意味着域可以用类似于圆的度数的周期来表示。然后,您有一个最小可能值min
和最大可能值max = min + 1*period
,您要做的第一件事是找到最小s
,使整数start = min + s + k*period
k
(基本上,这是一个模运算),同样你找到最小的e
,end = min + e + j*period
。
现在,您可以使用(s,e)
将时间间隔表示为s > e
。将其分为两个时间间隔(s, max)
和(min, e)
,将它们放入间隔树中,并为它们提供原始间隔(start, end)
的引用。如果您以可能与某个时段重叠的n
个时间间隔开始,则最终会在树中以2n
个时间间隔结束,并且渐近边界将保持不变。