改进数组的步进两次(同一数组上的嵌套循环)

Dav*_*ave 6 java algorithm performance big-o loops

为了确定从时间点'D1'到未来'D2'的某个时间点的数据集的各种统计数据,我想要循环一大段数据.基本上,我想在每次值之间的差异大于10时添加到数据库.例如:

Datum[] data = x;
for( Datum d1 : data ){
    Datum[] tail = y; //From d1 up to 10 elements ahead
    for( Datum d2 : tail ){
        //Calculate difference
        if( (d2.val - d1.val) > 10 ){
            //Insert into database
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有更好的算法/方法来做到这一点?由于尾部的9个元素在外循环的下一次迭代中被重用,我可以从中获益吗?我的目标是将其降低到远远小于(Big-O Notation)O(n 2),但我无法绕过它.通常,找到满足标准的D1,D2对意味着下一个D1元素也将具有更大的匹配机会.我可以利用这个优势吗?

我试图让它尽可能高效,因为数据集非常大.

Ben*_*igt 1

基于索引的 for 循环可能比迭代器执行得更好,因为您可以直接索引原始数组并避免复制到新数组。你会有更好的内存局部性,更少的错误共享的机会,等等。