Şu anda bu soruya yanıt veren her yanıt size, O(1)
sabit zaman anlamına gelir (ölçüme ne olursa olsun; çalışma zamanı, işlem sayısı vb. Olabilir). Bu doğru değil.
Çalışma zamanının, girişten bağımsız olarak, çalışma zamanının yukarıda sınırlandırıldığı O(1)
bir sabit olduğu anlamına gelir . Örneğin, bir tamsayı dizisinin ilk öğesini döndürmek şudur :c
c
n
O(1)
int firstElement(int *a, int n) {
return a[0];
}
Ancak bu işlev O(1)
de:
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
Buradaki çalışma süresi yukarıda 1 yıl ile sınırlandırılmıştır, ancak çoğu zaman çalışma zamanı nanosaniye sırasındadır.
Çalışma zamanı olduğunu söylemek için O(n)
sürekli bir olduğu anlamına gelir c
zamanı yukarıda sınırlanan bu şekilde c * n
, burada n
önlemler giriş boyutu. Örneğin, sıralanmamış bir tamsayı dizisindeki belirli bir tamsayının oluşum sayısını n
aşağıdaki algoritma ile bulmak 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;
}
Bunun nedeni, her bir öğeyi birer birer inceleyerek dizi boyunca yineleme yapmamız gerektiğidir.