我试图找到一个有效的C++间隔树实现(很可能基于红黑树)没有病毒或限制性许可证.任何指向干净的轻量级独立实现的指针?对于我想到的用例,一开始就知道了一组区间(可能会有一百万个),我希望能够快速获得一个与给定区间重叠的区间列表.因此,一旦构建的树将不会改变 - 只需要快速查询.
我以前曾问过这个问题.这个想法是一样的,除了我必须找到确定的所有共同时间TimeSpan
.
背景
让我们假设,
我想见到一些人,我说我希望在Datetime X(2014-02-16 09:00:00.000)到DateTime Y(2014-02-26 05:00:00.000)之间遇到某些人.而且我说我希望会议能够持续至少N
几个小时.
然后我想见的人将回复说我将在以下日期提供:
Date1(Certain date from certain start time to certain end time),
Date2(certain date from certain time to certain time),
...
Run Code Online (Sandbox Code Playgroud)
等等.
目的
然后我必须找出是否存在包含在所有用户响应中的时间范围.
让我们考虑这些是回应
Attendee1
(一些GuidId):Response1:Start Time = 2014-02-23 09:00 AM,EndTime = 2014-02-23 11:00 AM,
Response2:Start Time = 2014-02-24 10:00 AM,EndTime = 2014-02-24 12:00 PM,
Response3:开始时间= 2014-02-25 10:00 AM,EndTime = 2014-02-25 11:00 AM,
Response4:Start Time = 2014-02-23 01:00 PM,EndTime = 2014-02-17 5:00 PM
Attendee2
(一些GuidId): …
我有两个排序的整数列表.我想分别从第一个和第二个列表中找到彼此相距一定距离的所有整数对.
天真的方法是检查每对,导致O(N ^ 2)时间.我确信有一种方法可以在O(N*logN)或更短的时间内完成.
在python中,天真的O(N ^ 2)方法如下:
def find_items_within(list1, list2, within):
for l1 in list1:
for l2 in list2:
if abs(l1 - l2) <= within:
yield (l1, l2)
Run Code Online (Sandbox Code Playgroud)
pythonic答案的额外点.
应用说明
我只是想指出这个小谜题的目的.我正在搜索文档,并希望在另一个术语的特定距离内找到一个术语的所有出现.首先,您可以找到两个术语的术语向量,然后您可以使用下面描述的算法来确定它们是否在彼此的给定距离内.
我有一个巨大的数据库表,有n个整数区间(例如{1-5},{4-16},{6434-114343}),需要找出哪些区间相互重叠.在SO上有很多 类似的问题,但不同之处在于我需要分别为每个区间返回一组重叠区间.
------------------ A -------------------
------ B ------- ----- D -----
--------- C ---------
Run Code Online (Sandbox Code Playgroud)
对于这个例子,输出将是 A:{B,C,D} B:{A,C} C:{A,B} D:{A}
最坏的情况是,所有间隔可能相互重叠,产生大小为O(n 2)的输出.这并不比天真的解决方案好(比较每对间隔).然而,在实践中,我知道我的间隔很少会与其他间隔重叠,当它们发生时,最多只有5个其他间隔.
鉴于此信息,我该如何解决问题?(最好,我想要一个SQL查询解决方案,因为数据在数据库中,但我认为只有常规的算法解决方案是可能的.)