Każda odpowiedź aktualnie odpowiadająca na to pytanie mówi, że O(1)oznacza to stały czas (cokolwiek dzieje się z pomiarem; może to być czas działania, liczba operacji itp.). To nie jest dokładne.
Powiedzieć, że środowisko wykonawcze O(1)oznacza, że istnieje stała ctaka, że środowisko wykonawcze jest ograniczone powyżej c, niezależnie od danych wejściowych. Na przykład zwrócenie pierwszego elementu tablicy nliczb całkowitych to O(1):
int firstElement(int *a, int n) {
return a[0];
}
Ale ta funkcja O(1)też jest :
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
W tym przypadku czas wykonywania jest ograniczony powyżej 1 roku, ale w większości przypadków jest on rzędu nanosekund.
Powiedzenie, że środowisko wykonawcze O(n)oznacza, że istnieje taka stała c, że czas wykonania jest ograniczony powyżej c * n, gdzie nmierzy rozmiar danych wejściowych. Na przykład znalezienie liczby wystąpień określonej liczby całkowitej w nieposortowanej tablicy nliczb całkowitych za pomocą następującego algorytmu to 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;
}
Dzieje się tak, ponieważ musimy iterować po tablicy, sprawdzając każdy element po kolei.