【发布时间】:2013-09-04 12:04:46
【问题描述】:
考虑一个维度为Nx2 的矩阵,其中每一行包含一个统一PDF(即概率密度函数)的下限和上限。
我想统计重叠的数量,其中重叠定义为两个PDF重叠的情况,例如:
- PDF1:
[2,5] - PDF2:
[3,6] - 两个 PDF 在区间
[3,5]内重叠。
显然,如果三个 PDF 文件 p1、p2 和 p3 重叠,我计算三个重叠:p1 vs. p2、p1 vs.p3、p2 vs. p3.
我创建了以下计算重叠的 MATLAB 代码:
for m = 1:N-1
for k = m+1:N
l1 = dataService.getObjectCoordinate(m,1);
l2 = dataService.getObjectCoordinate(k,1);
u1 = dataService.getObjectCoordinate(m,2);
u2 = dataService.getObjectCoordinate(k,2);
if (l1 <= l2 && l2 <= u1) || (l2 <= l1 && l1 <= u2)
numOverlaps = numOverlaps + 1;
end
end
end
但是,您可以想象,这是 O(N^2),当 N 很大时,这非常糟糕。我在三个小时前使用N=10000 开始执行,它仍在运行。
您能否提出一种降低所提出算法复杂性的方法,或许可以排除一些先验比较?
提前致谢。
【问题讨论】:
-
@MZimmerman6:我链接到的问题至少有一个答案在 O(N·logN) 内完成。
-
@RodyOldenhuis 是的,我刚刚看过,我正在编写代码以减少...我想。我们将看看这是怎么回事。到目前为止,我所拥有的是不到一秒钟的时间
标签: performance matlab comparison complexity-theory