几个区间范围的快速交集?

时间:2018-08-01 20:01:00

标签: matlab intervals

我有几个变量,它们都是数值范围:(行的间隔)

a = [ 1 4; 5 9; 11 15; 20 30];
b = [ 2 6; 12 14; 19 22];
c = [ 15 22; 24 29; 33 35];
d = [ 0 3; 15 17; 23 26];

(我的真实数据集中的值不是整数,但为清楚起见在此表示)。

我想找到至少三个变量相交的区间。在上面的示例中,[20 22]和[24 26]将是两个这样的情况。

一种实现此目的的方法是将我的值进行装箱并将这些箱加在一起,但是由于我的值是连续的,因此会产生“边缘效应”,而我首先会浪费将这些值装箱的时间。 (将数据集以所需的分辨率进行绑定会创建数百GB的数据)。

另一种不涉及分箱的方法将在所有可能的变量组合之间使用成对相交(我们称其为X),然后在X与所有其他变量O(n ^ 3)的交集上使用。

您对此有何看法?有没有可以解决此问题的工具的算法/库?

我当时正在考虑使用某种几何方法来解决这个问题:基本上,如果我认为我的区间是一维空间中的线段,那么我想要的输出将是三个线段(来自三个变量)相交的点。我不确定这在算法上是否有效。咨询吗?

1 个答案:

答案 0 :(得分:6)

O(N lg N)方法:

  1. 将每个间隔(t_A,t_B)转换为一对标记的端点('begin',t_A),('end',t_B)

  2. 按时间排序所有端点,这是最昂贵的步骤

  3. 进行一次穿行,跟踪嵌套深度(如果标签为“开始”,则递增;如果标签为“结束”,则递减)。这需要线性时间。

    • 当深度从2变为3时,这是输出间隔的开始。
    • 当它从3变为2时,它是一个间隔的结束。