Saya tahu dengan O (n), Anda biasanya memiliki satu loop; O (n ^ 2) adalah loop ganda; O (n ^ 3) adalah triple loop, dll. Bagaimana dengan O (log n)?
Anda benar-benar melakukannya dengan cara yang salah di sini. Anda mencoba mengingat ekspresi O besar mana yang sesuai dengan struktur algoritmik yang diberikan, tetapi Anda harus benar-benar hanya menghitung jumlah operasi yang dibutuhkan algoritma dan membandingkannya dengan ukuran input. Algoritma yang mengulang seluruh inputnya memiliki kinerja O (n) karena menjalankan loop n kali, bukan karena memiliki loop tunggal. Inilah satu loop dengan kinerja O (log n):
for (i = 0; i < log2(input.count); i++) {
doSomething(...);
}
Jadi, algoritma apa pun di mana jumlah operasi yang diperlukan adalah berdasarkan urutan logaritma ukuran input adalah O (log n). Hal penting yang diberitahukan oleh analisis big-O adalah bagaimana waktu eksekusi suatu algoritma berubah relatif terhadap ukuran input: jika Anda menggandakan ukuran input, apakah algoritma tersebut mengambil 1 langkah lebih banyak (O (log n)) , dua kali lebih banyak langkah (O (n)), empat kali lebih banyak langkah (O (n ^ 2)), dll.
Apakah itu membantu untuk mengetahui dari pengalaman bahwa algoritma yang berulang kali mempartisi input mereka biasanya memiliki 'log n' sebagai komponen kinerja mereka? Yakin. Tetapi jangan mencari partisi dan langsung ke kesimpulan bahwa kinerja algoritma adalah O (log n) - itu mungkin sesuatu seperti O (n log n), yang sangat berbeda.