Cara Menghitung Big O dari Kode: Loop Bersarang sampai Log n
Delapan contoh soal Big O dari kode Python: loop berurutan, bersarang segitiga, i *= 2, sampai rekurensi T(n) = 2T(n/2) + n, lengkap dengan hitungan iterasinya.

Di halaman ini
- Soal 1 sampai 4: loop tunggal, berurutan, dan bersarang
- Soal 1. Loop tunggal
- Soal 2. Dua loop berurutan
- Soal 3. Bersarang penuh
- Soal 4. Bersarang segitiga
- Soal 5 dan 6: dari mana log n muncul?
- Soal 5. Variabel dikali 2
- Soal 6. Luar linear, dalam logaritmik
- Soal 7 dan 8: jebakan yang membuat jawaban meleset
- Soal 7. Loop dalam bergantung pada m
- Soal 8. Bersarang tapi linear
- Rangkuman jawaban dan seberapa besar bedanya
- Kesalahan yang paling sering saat menghitung Big O
- Cara membuktikan Big O dengan konstanta C dan n0
- Rekurensi T(n) = 2T(n/2) + n sebagai jembatan ke teorema master
- FAQ
- Apa beda Big O, Big Omega, dan Big Theta?
- Apakah Big O sama dengan kasus terburuk?
- Kenapa O(1) tetap O(1) walaupun isinya 100 baris?
- Bagaimana menghitung Big O kode dengan if-else?
- Apakah O(n log n) selalu lebih cepat dari O(n²)?
Big O dari sebuah kode dihitung dengan cara menghitung berapa kali operasi paling dalam dijalankan sebagai fungsi dari , lalu membuang konstanta dan suku yang tumbuhnya lebih lambat. Loop berurutan dijumlahkan, loop bersarang dikalikan, dan loop yang variabelnya dikali atau dibagi 2 menghasilkan . Delapan contoh soal di bawah melatih ketiga aturan itu, masing-masing dengan jumlah iterasi yang bisa kamu cek sendiri.
Tiga aturan dasarnya:
- Berurutan dijumlah. Dua blok yang ditulis satu setelah yang lain memakan langkah. Ambil yang terbesar.
- Bersarang dikali. Loop di dalam loop memakan (iterasi luar) kali (iterasi dalam), asalkan loop dalam tidak bergantung pada variabel luar. Kalau bergantung, jumlahkan satu per satu.
- Buang konstanta dan suku kecil. ditulis . Konstanta 3 dan suku tidak mengubah bentuk pertumbuhan.
Contoh di bawah memakai Python, tapi logikanya sama untuk C, Java, atau pseudocode. Yang dihitung adalah berapa kali baris c += 1 dijalankan.
Soal 1 sampai 4: loop tunggal, berurutan, dan bersarang
Soal 1. Loop tunggal
for i in range(n):
c += 1
Badan loop jalan tepat kali. Jawaban: . Kalau loopnya range(0, n, 2), iterasinya (untuk genap tepat ), dan tetap karena faktor adalah konstanta.
Soal 2. Dua loop berurutan
for i in range(n):
c += 1
for j in range(n):
c += 1
Totalnya langkah. Jawaban: , bukan . Dua loop yang tidak bersarang tidak dikalikan.
Soal 3. Bersarang penuh
for i in range(n):
for j in range(n):
c += 1
Untuk setiap , loop dalam jalan kali. Totalnya . Jawaban: .
Soal 4. Bersarang segitiga
for i in range(n):
for j in range(i):
c += 1
Loop dalam bergantung pada , jadi tidak bisa langsung dikali. Saat loop dalam jalan 0 kali, saat jalan 1 kali, dan seterusnya sampai :
Untuk , hasilnya , dan kalau kodenya dijalankan, c memang berakhir di 120. Suku dominannya , jadi jawaban: . Loop segitiga memang kira-kira setengah lebih cepat dari soal 3, tapi kelas pertumbuhannya sama.
Soal 5 dan 6: dari mana log n muncul?
Soal 5. Variabel dikali 2
i = 1
while i < n:
i *= 2
c += 1
Nilai berjalan dan berhenti begitu . Setelah iterasi, . Loop berhenti saat , yaitu . Untuk , nilai yang dilewati adalah 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, total 10 iterasi, dan . Jawaban: .
Hal yang sama berlaku untuk i //= 2 yang dimulai dari , dan untuk binary search yang membuang separuh data tiap langkah.
Soal 6. Luar linear, dalam logaritmik
for i in range(n):
j = 1
while j < n:
j *= 2
c += 1
Loop dalam tidak bergantung pada , jadi aturan kali berlaku: . Untuk , hasilnya . Jawaban: .
Basis logaritma tidak ditulis di dalam Big O. Alasannya, , dan hanyalah konstanta.
Soal 7 dan 8: jebakan yang membuat jawaban meleset
Soal 7. Loop dalam bergantung pada m
for i in range(n):
for j in range(m):
c += 1
Banyak mahasiswa langsung menulis . Padahal ada dua input yang berbeda, misalnya baris dan kolom sebuah matriks. Jawaban yang benar: . Jawaban ini baru boleh disederhanakan menjadi kalau soal menyatakan .
Soal 8. Bersarang tapi linear
i = n
while i > 0:
for j in range(i):
c += 1
i //= 2
Ada loop di dalam loop, dan loop luar jalan sekitar kali, jadi godaannya menjawab . Hitung saja isinya: loop dalam jalan kali, lalu , lalu , dan seterusnya.
Untuk , totalnya , di bawah . Jawaban: . Soal ini menunjukkan kenapa aturan "bersarang dikali" hanya berlaku kalau loop dalam punya panjang tetap.
Rangkuman jawaban dan seberapa besar bedanya
| Soal | Pola | Iterasi tepat | Big O |
|---|---|---|---|
| 1 | Loop tunggal | ||
| 2 | Dua loop berurutan | ||
| 3 | Bersarang penuh | ||
| 4 | Bersarang segitiga | ||
| 5 | i *= 2 | ||
| 6 | Luar , dalam j *= 2 | ||
| 7 | Luar , dalam | ||
| 8 | Dalam mengecil separuh |
Supaya terasa bedanya, ini jumlah langkah untuk tiga ukuran input:
| 10 | 3,3 | 33 | 100 |
| 1.000 | 10,0 | sekitar 10 ribu | 1 juta |
| 1.000.000 | 19,9 | sekitar 20 juta |
Di sejuta, algoritma butuh sekitar 20 juta langkah, sedangkan butuh sejuta juta. Itu alasan sorting di tracing bubble, selection, dan insertion sort terasa lambat untuk data besar dibanding merge sort.
Kesalahan yang paling sering saat menghitung Big O
- Menjumlah padahal harus mengalikan. Soal 3 dijawab karena "ada dua loop". Dua loop bersarang dikalikan.
- Mengalikan padahal harus menjumlah. Kebalikannya, soal 2 dijawab . Lihat indentasinya: kalau loop kedua tidak berada di dalam loop pertama, jumlahkan.
- Menyertakan konstanta. , , dan bukan jawaban yang salah secara matematis, tapi hampir semua dosen akan mengurangi nilai karena bentuknya belum disederhanakan. Tulis dan .
- Menyamakan semua loop bersarang dengan . Soal 7 dan 8 menunjukkan dua cara loop bersarang tidak menghasilkan .
- Menghitung satu iterasi sebagai satu langkah padahal isinya memanggil fungsi. Kalau badan loop memanggil
sorted(data)ataux in daftar, operasi itu sendiri bukan . Pencarianinpada list Python adalah , jadi loop kali yang berisiinmenjadi .
Cara membuktikan Big O dengan konstanta C dan n0
Definisi formalnya: kalau ada konstanta positif dan sehingga untuk semua . Soal pembuktian biasanya meminta kamu menemukan pasangan dan itu.
Contoh: buktikan adalah .
Cara cepat: untuk , berlaku dan . Ganti setiap suku dengan batas atasnya:
Jadi dan memenuhi definisi. Selesai.
Pasangan itu tidak unik. Kalau kamu ingin lebih kecil, misalnya , syaratnya menjadi , atau . Akar positifnya , jadi . Cek: di , ruas kiri dan ruas kanan , benar. Di , ruas kiri dan ruas kanan , gagal. Pembuktian dengan sama sahnya dengan .
Rekurensi T(n) = 2T(n/2) + n sebagai jembatan ke teorema master
Begitu kode memanggil dirinya sendiri, menghitung loop tidak lagi cukup. Merge sort adalah contoh klasik: fungsi membagi data jadi dua, memanggil dirinya untuk tiap separuh, lalu menggabungkan hasilnya dalam langkah. Waktu jalannya ditulis sebagai rekurensi:
Cara paling mudah memahaminya adalah pohon rekursi. Gambar berikut untuk .

Setiap level punya biaya total , karena jumlah simpul berlipat dua sementara ukurannya mengecil separuh. Banyaknya level pembagian adalah , ditambah satu level daun yang berisi kasus dasar. Totalnya:
Cek dengan menghitung manual: , , . Rumus memberi . Cocok. Jadi .
Teorema master memberi jawaban yang sama tanpa menggambar. Untuk bentuk , di sini , , dan . Karena tumbuh sama cepat dengan , rekurensi masuk kasus kedua dan hasilnya . Kasus pertama dan ketiga berlaku kalau jelas lebih lambat atau lebih cepat dari . Rekursi yang lebih sederhana, seperti faktorial dan Fibonacci, dibahas langkah demi langkah di rekursi Python dan tracing call stack.
FAQ
Apa beda Big O, Big Omega, dan Big Theta?
Big O adalah batas atas, Big Omega batas bawah, dan Big Theta berarti keduanya sekaligus. Soal 3 adalah karena jumlah langkahnya tepat . Menulis untuk soal 3 secara teknis tidak salah, tapi tidak informatif, sehingga di tugas kamu diminta batas yang paling ketat.
Apakah Big O sama dengan kasus terburuk?
Tidak persis. Big O adalah notasi untuk batas atas sebuah fungsi, sedangkan kasus terburuk, rata-rata, dan terbaik adalah tiga fungsi berbeda. Insertion sort, misalnya, punya kasus terbaik untuk data yang sudah urut dan kasus terburuk untuk data terbalik. Kalau soal tidak menyebut, biasanya yang diminta kasus terburuk.
Kenapa O(1) tetap O(1) walaupun isinya 100 baris?
Karena jumlah langkahnya tidak bergantung pada . Loop for i in range(100) jalan 100 kali, baik datanya berisi 10 maupun sejuta elemen. Konstanta sebesar apa pun ditulis .
Bagaimana menghitung Big O kode dengan if-else?
Ambil cabang yang paling mahal. Kalau cabang if berisi loop dan cabang else berisi satu perintah , seluruh blok dihitung untuk kasus terburuk.
Apakah O(n log n) selalu lebih cepat dari O(n²)?
Untuk besar, ya. Untuk sangat kecil, konstanta yang dibuang Big O bisa membuat algoritma menang. Itu sebabnya beberapa implementasi sorting di bahasa pemrograman memakai insertion sort untuk potongan data yang pendek.
