我有两个以纳秒为单位的时间列表。每个列表可以有 10^12 个或更多元素。我当前的实现是获取两个列表的一个子集,使用 for 循环比较该子集中的时间并输出相关时间,然后获取另一个子集。对于每个子集比较,这大约运行。(m*n) 其中 m 是列表 1 子集的大小,n 是列表 2 子集的大小,这显然是一个糟糕的算法。
我还有一个比我的数据集的总时间更小的时钟,所以在某些时候需要关注数据中的翻转。
清单 1 有某些事件,清单 2 有次要事件。我想知道次要事件是否在主要事件的某个时间内发生。还有很多噪音,所以我需要创建一个相关时间的直方图,并寻找一个有统计意义的信号的时间。
我想知道是否有任何开源库中可以在 C++ 中使用的已知有效算法,或者我可以实现的有效算法来搜索两个列表的时间,并输出落在窗口内的项目.
下面是蛮力函数的一个例子:
int correlate_lists( int window )
{
for( int i = 0 ; i < list1.size() ; i++ )
{
for( int j = 0 ; j < list2.size() ; j++ )
{
if( list2[j].time() > list1[i].time() && (list2[j].time() - list1[j].time()) < window )
{
printf("Time: %d\n, list2[j].time() - list[1].time() );
}
}
}
}