Big O(N), O(N²), dan O(N³)

·Abdul Wahid Kahar

Sebelum nulis kode, selalu tanya satu hal dulu:

"Kalau datanya makin banyak, program saya makin lambat seberapa?"

Nah, Big O adalah cara menjawab pertanyaan itu.

Bukan ngukur waktu dalam detik — tapi ngukur seberapa cepat kerjaan bertambah ketika datanya membesar.


O(N) — Satu Lapis Kerjaan

Bayangkan kamu disuruh nulis namamu sendiri sebanyak N kali.

N = 3 → nulis 3 kali N = 10 → nulis 10 kali N = 1.000.000 → nulis 1.000.000 kali

Simpel — kerjaan bertambah sama persis dengan N. Itulah O(N).

Contoh lain: cari nama "Budi" di daftar 1 juta orang dengan baca satu per satu → butuh maksimal 1 juta langkah.

go
for i := 0; i < n; i++ {
    fmt.Println(i)
}

Satu loop = O(N).


O(N²) — Dua Lapis Kerjaan

Sekarang tugasnya berbeda. Kamu disuruh nulis namamu N kali — tapi setiap kali nulis nama, kamu juga harus nulis alamatmu N kali.

N = 3: Budi → Jl. Merdeka, Jl. Merdeka, Jl. Merdeka Budi → Jl. Merdeka, Jl. Merdeka, Jl. Merdeka Budi → Jl. Merdeka, Jl. Merdeka, Jl. Merdeka Total = 3 × 3 = 9 kerjaan

Kalau N = 10 → 10 × 10 = 100 kerjaan. Kalau N = 1.000 → 1.000 × 1.000 = 1.000.000 kerjaan.

Kerjaan bertambah sesuai N × N. Jauh lebih lambat dari O(N)!

go
for i := 0; i < n; i++ {
    for j := 0; j < n; j++ {
        fmt.Println(i, j)
    }
}

Dua loop nested = O(N²).


O(N³) — Tiga Lapis Kerjaan

Polanya sama — tinggal tambah satu lapis lagi.

N = 3 → 3 × 3 × 3 = 27 kerjaan N = 10 → 10 × 10 × 10 = 1.000 kerjaan
go
for i := 0; i < n; i++ {
    for j := 0; j < n; j++ {
        for k := 0; k < n; k++ {
            fmt.Println(i, j, k)
        }
    }
}

Tiga loop nested = O(N³).


Satu Hal yang Sering Bikin Bingung

Bagaimana kalau loop keduanya batasnya bukan N, tapi angka tetap seperti 5?

go
for i := 0; i < n; i++ {
    for j := 0; j < 5; j++ { // selalu 5, tidak ikut N
        fmt.Println(i, j)
    }
}

Jawabannya tetap O(N) — bukan O(N²)!

Kenapa? Karena loop kedua selalu jalan 5 kali saja, tidak peduli N sebesar apapun. Jadi kerjaan totalnya tetap tumbuh sesuai N, bukan N × N.

N = 10 → 10 × 5 = 50 kerjaan N = 1000 → 1000 × 5 = 5000 kerjaan

Tumbuhnya tetap sesuai N. Makanya tetap O(N).


Aturan Simpel

1 loop = O(N) 2 loop nested = O(N²) 3 loop nested = O(N³) 2 loop terpisah = O(N) loop kedua batasnya tetap = O(N)