Я пишу алгоритм, который делает большой цикл над целочисленным массивом от конца до начала с условием if внутри. В первый раз, когда условие ложно, цикл может быть прерван.
Итак, для цикла for, если условие ложно, оно продолжает повторяться с простыми изменениями переменных.
При использовании цикла while с параметром условие as, в то время как цикл будет остановлен, если условие ложно, и должно сохранить некоторые итерации.
Однако цикл while остается немного медленнее цикла for!
Но, если я поставлю значение int в качестве счетчика и посчитаем итерации, цикл For, как и ожидалось, будет выполнять гораздо больше итераций.
Однако на этот раз время выполнения метода mofified For со счетчиком будет намного медленнее, чем у метода while со счетчиком!
Есть объяснения?
здесь код с циклом for:
for (int i = pairs.length - 1; i >= 0; i -= 2) {
//cpt++;
u = pairs[i];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
if (duv > delta) {
execute();
}
}
время исполнения: 6473
время выполнения со счетчиком: 8299
Всего итераций: 2584401
вот код с циклом while:
int i = pairs.length - 1;
u = pairs[i];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
while (duv > delta) {
//cpt++;
execute();
u = pairs[i -= 2];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
}
время исполнения: 6632
время выполнения со счетчиком: 7163
число итераций: 9793
Время в мс, я повторил эксперимент несколько раз с разными размерами, меры остались практически неизменными. Метод execute () обновляет значение дельты. Метод getDistance () представляет собой просто матрицу int [] [] доступа.
Спасибо за любую помощь.