Улучшение выхода через массив дважды (вложенная петля на тот же массив)

У меня есть большой набор данных, которые я хочу проехать, чтобы определить различные статистические данные о данных, установленных из точки во времени «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
        }
    }
}

Мой вопрос, есть ли лучший алгоритм / метод для этого? Поскольку 9 элементов из хвоста повторно используются в следующем итерации внешней петли, могу ли я принести пользу как-то из этого? Моя цель состояла в том, чтобы получить его намного меньше, чем (Big-O обозначений) O (N 2 ), но я не могу обернуть голову вокруг него. Как правило, нахождение пары D1, D2, которая удовлетворяет критериям означает, что следующий элемент D1 также будет иметь большую вероятность сопоставления. Могу ли я использовать это в моих преимуществах?

Я пытаюсь получить это, чтобы быть максимально эффективным, потому что набор данных просто настолько велик.

6
задан templatetypedef 30 August 2011 в 01:09
поделиться