Каждый ответ, отвечающий на этот вопрос, сообщает вам, что 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;
}
Это потому, что мы имеем для перебора массива проверки каждого элемента по одному ,
Это может помочь: http://stackoverflow.com/questions/471199/what-is-the-difference-between-n-and-on/471206#471206 –