Известна временная сложность кода. Система, на которой была выполнена программа, - это Intel Corei3 с двухъядерным процессором и процессором с частотой 2,4 ГГц - она имеет 4 логических процессора. С этими подробностями, как можно вычислить время выполнения кода?С известными и известными системными часами O (n) можно рассчитать время выполнения кода
public class PerfmTest {
public static void main(String[] args) {
getexeTime(1000000);
}
public static void getTime (long n) {
// long startTime = System.currentTimeMillis();
long startTime = System.nanoTime();
long k = 0;
for (int i = 1; i <=5; i++) {
// k = k + 5;
}
// long endTime = System.currentTimeMillis();
long estimatedTime = System.nanoTime() - startTime;
//System.out.println("Execution time for n = " + n + " is " + (endTime - startTime) + " milliseconds");
System.out.println("Execution time for n = " + n + " is " + estimatedTime + " nanoseconds");
}
}
Выходной сигнал составлял 855 наносекунд.
Я предполагаю, что вы не знали, что код без видимых побочных эффектов может быть оптимизирован во время компиляции. Независимо от того, что ** вы пытаетесь достичь с помощью этого упражнения? –
Я знаю, что код оптимизирован. Но точка в том, как в теории ее O (n) и как она работает с двумя двойными ядрами. Я работаю над проектом учебной помощи. – Uma
Теоретически это не O (n), потому что компилятор может исключить цикл (вы никогда не читаете 'k' после цикла - так что никаких побочных эффектов для его удаления нет, даже если вы добавите дополнение теория). Таким образом, ваш текущий код, теоретически, «O (1)». Кроме того, будьте осторожны с микро-бенчмарками. Существует JIT, и холодные прогоны отличаются от теплых пробегов (и для запуска JIT может потребоваться несколько прогонов). –