c++中比较两个大数据列表的有效算法是什么?
What is an efficient algorithm to compare two large lists of data in C++?
我有两个以纳秒为单位的时间列表。每个列表可以有10^12个或更多的元素。我目前的实现是取两个列表的一个子集,比较该子集中使用for循环的时间和输出相关时间,然后取另一个子集。对于每个子集比较,运行时间大约为。(m*n),其中m为list 1子集的大小,n为list 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: %dn, list2[j].time() - list[1].time() );
}
}
}
}
如果您的两个列表按时间排序,则可以有效地遍历列表:
for( int i = 0, j = 0 ; i < list1.size() ; ++i )
{
while( j < list2.size() && list2[j].time() <= list1[i].time() )
{
++j;
}
int k = j;
while( k < list2.size() && list2[k].time() < list1[i].time() + window)
{
printf("Time: %dn, list2[k].time() - list1[i].time() );
++k;
}
}
如果列表是排序的,那么您肯定可以使用二进制搜索来找到"窗口"位置?
相关文章:
- c ++数据输入并读回列表中的结构结构中的数组
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- 用于筛子的最佳数据结构是什么(即一些被划掉的数字列表)?
- 使用初始化列表时如何获取私有数据?
- 从异构列表中提取数据
- C++ 中带有列表的树数据结构
- C++多种数据类型的列表.遗产
- 尝试创建排序的动态列表(数据结构)
- 如何制作一个结构程序,在其中可以存储无限量的数据,以便每次您想要时都可以将另一个产品添加到列表中?
- 链接列表(C )中(字符串)数据的用户输入
- 在数据类型类的列表中查找 elem
- 如何编写循环以通过列表迭代并打印列表中每个元素的数据的数据
- 存储数据列表并自动分配给结构的最佳方法是什么
- 实现双链接列表,其中数据存储在堆上
- QML自定义列表数据类型
- 使用队列和列表 STL 进行C++分配。在将数据填充到列表或队列中然后打印该数据时遇到问题
- 如何检索指向列表数据结构中的变量的指针?
- 数组、矢量、映射和列表数据搜索
- 如何使用智能指针(例如auto_ptr r shared_ptr)在 Linux 上的C++中生成链接列表数据结构
- 八度值列表数据类型