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