Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 几个区间范围的快速相交?_Matlab_Intervals - Fatal编程技术网

Matlab 几个区间范围的快速相交?

Matlab 几个区间范围的快速相交?,matlab,intervals,Matlab,Intervals,我有几个变量,都是数值范围:(行中的间隔) (我的真实数据集中的值不是整数,但为了清晰起见,在这里表示为整数) 我想找出至少3个变量相交的区间。在上述示例中,[20 22]和[24 26]将是两种这样的情况 实现这一点的一种方法是将我的值分类并将这些分类添加到一起,但由于我的值是连续的,这会产生“边缘效应”,我会浪费时间首先将这些值分类。(以所需的分辨率将数据集装箱将创建数百GB的数据) 另一种不涉及装箱的方法是在所有可能的变量组合之间使用两两相交(我们称之为X),然后是X与所有其他变量的相交O

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

(我的真实数据集中的值不是整数,但为了清晰起见,在这里表示为整数)

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

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

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

你对此有何看法?是否有算法/库具有解决此问题的工具

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

O(N lg N)方法:

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

  • 按时间对所有端点进行排序,这是最昂贵的步骤

  • 进行一次遍历,跟踪嵌套深度(标记为“开始”时递增,标记为“结束”时递减)。这需要线性时间

    • 当深度从2变为3时,它是输出间隔的开始
    • 当它从3变为2时,它是一个间隔的结束
  • 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];