Setiap jawaban yang saat ini menanggapi pertanyaan ini memberi tahu Anda bahwa O(1)
waktu konstan rata-rata (apa pun yang terjadi pada pengukuran; bisa jadi runtime, jumlah operasi, dll.). Ini tidak akurat.
Untuk mengatakan bahwa runtime O(1)
berarti ada konstanta c
sedemikian rupa sehingga runtime dibatasi di atas c
, tidak tergantung pada input. Misalnya, mengembalikan elemen pertama dari array n
bilangan bulat adalah O(1)
:
int firstElement(int *a, int n) {
return a[0];
}
Tetapi fungsi ini O(1)
juga:
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
Runtime di sini dibatasi di atas oleh 1 tahun, tetapi sebagian besar waktu runtime berada pada urutan nanodetik.
Untuk mengatakan bahwa runtime O(n)
berarti ada konstanta c
sedemikian rupa sehingga runtime dibatasi di atas c * n
, di mana n
mengukur ukuran input. Misalnya, mencari jumlah kemunculan bilangan bulat tertentu dalam larik n
bilangan bulat yang tidak diurutkan dengan algoritme berikut adalah 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;
}
Ini karena kita harus melakukan iterasi melalui larik yang memeriksa setiap elemen satu per satu.