如何根据键和时间间隔高效地查找 parent 条记录?

How to find parent records efficiently based on both key and time intervals?

定义

一条 parent 记录的类型为 'P',一个祖先键,一个日期间隔。

其 child 记录具有类型 'C',一个相同的祖先键,并且具有匹配或落在其 parent 的间隔内的日期间隔。

例子

Parent条记录可以是:

第一个 parent 记录的有效 children 可以是

问题

给定一组包含 parents 和 children 的随机记录,我如何有效地将集合分为不同的组,包括一个唯一的 parent 及其有效的 children 基于键和时间间隔?

保证每个child,只有一个parent。但有可能 parent 没有任何 children.

暴力破解

以线性时间识别所有 parent 记录。然后遍历它们并在平方时间内成对匹配所有其他记录。

问题

有没有更快的方法?

最简单的方法是制作一个P记录列表和一个C记录列表,然后将它们都按(ancestor_key, interval.start)

排序

然后遍历 parents 列表,对于每个 parent,从 child 列表中提取它的 children。由于排序,parent 和 child 列表将按相应的顺序排列,因此两个列表中感兴趣的位置只会向前移动。

总复杂度为 O(n log n),由排序决定。