Каждый ответ, отвечающий в настоящее время на этот вопрос, говорит вам, что это O(1)означает постоянное время (что бы это ни происходило с измерением; может быть время выполнения, количество операций и т. Д.). Это не совсем так.
Сказать, что время выполнения есть, O(1)означает, что существует такая константа c, что время выполнения ограничено сверху c, независимо от ввода. Например, возвращение первого элемента массива nцелых чисел O(1):
int firstElement(int *a, int n) {
return a[0];
}
Но эта функция O(1)тоже есть:
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
Время выполнения здесь ограничено выше 1 годом, но в большинстве случаев время выполнения составляет порядка наносекунд.
Сказать, что время выполнения есть, O(n)означает, что существует такая константа c, что время выполнения ограничено сверху c * n, где nизмеряет размер ввода. Например, определение количества вхождений определенного целого числа в несортированном массиве nцелых чисел с помощью следующего алгоритма O(n):
int count(int *a, int n, int item) {
int c = 0;
for(int i = 0; i < n; i++) {
if(a[i] == item) c++;
}
return c;
}
Это связано с тем, что мы должны перебирать массив, проверяя каждый элемент по одному.