Jon*_*lis 5 c# algorithm big-o datetime
在效率方面,我遇到了一项我正在努力的任务.我有一个数据库,可以有成千上万的交易和人.我的目标是找到通常在彼此附近进行交易的人(人X在人Y的10分钟内进行了交易,在5个不同的场合).
我正在努力绕过一个有效的方法来解决这个问题.最简单的方法是:
foreach(var doc in db.Transactions.OrderBy(d => d.TransactionID))
{
foreach(var doc2 in db.Transactions.Where(d => d.TransactionID > doc.TransactionID))
{
if(doc2.DateCreated.IsBetween(doc.DateCreated,minutes))
{
// hit found
}
}
}
Run Code Online (Sandbox Code Playgroud)
(TransactionID是一个bigint标识).一旦我有了我的列表hits,就很容易计算出现次数.但这显然很差.运行时间是
在1M +交易中,这将是非常缓慢的.我已经研究了一些算法,但我发现任何适用于我的情况.任何人都可以提供指导,从哪里开始加快这个速度?
几点提示:
10分钟的桶(假设10分钟是您的检测阈值).然后对于每个桶,您只需要检查相邻的桶,这应该减少比较操作的量.