Каждый ответ, отвечающий в настоящее время на этот вопрос, говорит вам, что это 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;
}
Это связано с тем, что мы должны перебирать массив, проверяя каждый элемент по одному.