Memahami Big O Notation bukan sekadar teori matematis kampus, melainkan kunci fundamental dalam mengoptimalkan performa aplikasi. Intip perbandingan nyata antara Bubble Sort dan Merge Sort untuk memahami trade-off antara kecepatan dan penggunaan memori.
Bagi siapa saja yang pernah menyelami dunia pemrograman—entah itu lewat program studi Computer Science, bootcamp, atau belajar otodidak—kemungkinan besar sudah tidak asing dengan istilah Big O Notation.
Saya sendiri pertama kali mengenal konsep ini di semester 4, tepatnya pada mata kuliah Analisis Algoritma. Saat itu, pertanyaan yang muncul di kepala saya adalah: "Sebenarnya untuk apa sih Big O Notation ini?"
Singkatnya, Big O Notation berfungsi sebagai alat ukur dan identifikasi. Tapi, apa sebenarnya yang diukur? Fokus utamanya ada dua: Waktu (Time Complexity) dan Memori (Space Complexity). Dari kedua parameter inilah kita bisa mendapatkan tolak ukur yang objektif untuk membandingkan tingkat efisiensi antara satu algoritma dengan algoritma lainnya.
Jujur saja, awalnya saya sempat meremehkan konsep ini. Rasanya terlalu teoritis dan sangat matematis. Namun, pandangan itu berubah total ketika berhadapan dengan real-world project. Ketika aplikasi tiba-tiba terasa sangat lambat atau memakan memori server yang tidak wajar, di titik itulah saya tertampar realita dan menyadari: Oh, ini alasan kenapa kita harus paham Big O Notation.
Lalu, bentuk rumus atau notasinya seperti apa? Sebenarnya ada banyak, tapi untuk tahap awal kita cukup kenalan dengan tiga tingkatan yang paling sering kita temui sehari-hari saat menulis kode:
O(1) - Constant Time: Ini kasta yang paling ngebut dan ideal. Sebanyak apa pun datanya, waktu eksekusinya tetap sama. Contoh sederhananya adalah saat kita memanggil data spesifik dalam array menggunakan indeksnya (misal: data[0]).
O(n) - Linear Time: Waktu eksekusi berbanding lurus dengan jumlah data. Kalau datanya 10, butuh 10 langkah. Datanya 100, butuh 100 langkah. Contoh paling umum adalah ketika kita menggunakan perulangan seperti for loop atau array.map() untuk mengecek data satu per satu.
O(n²) - Quadratic Time: Nah, ini yang sering bikin server menjerit atau antarmuka aplikasi (UI) terasa sangat berat jika datanya sudah puluhan ribu. Waktu eksekusi melonjak kuadratik seiring bertambahnya data. Penyebab utamanya biasanya adalah looping di dalam looping (nested loop).
O(n \log n) - Linearithmic Time: Nah, ini dia "kasta" tempat bernaungnya algoritma pengurutan modern seperti Merge Sort. Tingkatannya sedikit lebih lambat dari O(n) tapi jauh lebih cepat dibandingkan O(n²). Ia mengombinasikan teknik memecah data (O(\log n)) lalu memprosesnya kembali (O(n)). Sangat tangguh untuk memproses data besar.
O(n²) - Quadratic Time: Kalau yang ini, kasta yang sering bikin server menjerit atau antarmuka aplikasi (UI) terasa sangat berat jika datanya sudah puluhan ribu. Waktu eksekusi melonjak kuadratik seiring bertambahnya data. Penyebab utamanya biasanya adalah looping di dalam looping (nested loop), seperti pada Bubble Sort.
Agar tidak sekadar teori, mari kita coba analisis salah satu algoritma pengurutan data (sorting) yang paling klasik, yaitu Bubble Sort.
Bayangkan kita punya array berisi angka acak dan ingin mengurutkannya dari terkecil ke terbesar. Cara kerja Bubble Sort adalah membandingkan dua angka yang bersebelahan, lalu menukarnya jika posisinya salah. Proses ini diulang terus-menerus dari awal sampai ujung array, hingga tidak ada lagi angka yang perlu ditukar.
Jika diterjemahkan ke dalam kode JavaScript/TypeScript, bentuknya akan seperti ini:
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) { // Looping pertama berjalan sebanyak n kali
for (let j = 0; j < arr.length - i - 1; j++) { // Looping kedua berjalan di dalam looping pertama
if (arr[j] > arr[j + 1]) {
// Tukar posisi data
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}Bagaimana cara kita membaca Big O dari fungsi di atas?
Karena terdapat looping kedua yang berjalan di dalam looping pertama, maka operasi perbandingannya akan dieksekusi kira-kira sebanyak n * n. Hasilnya adalah n². Maka, time complexity dari algoritma Bubble Sort ini adalah O(n²).
Agar tidak sekadar membayangkan rumus matematika, mari kita bawa konsep ini ke dunia nyata.
Katakanlah kita sedang membangun fitur web dan mendapat tugas untuk mengurutkan 30.000 data pengguna yang susunannya acak. Kita akan membandingkan algoritma Bubble Sort dengan algoritma yang lebih modern seperti Merge Sort untuk melihat seberapa besar dampaknya terhadap sistem.
temp) saat menukar posisi data. Jadi, seberapa pun besarnya data, konsumsi memori (RAM) tidak akan membengkak.O(n log n)?O(n log n)
Algoritma ini menggunakan pendekatan divide and conquer (memecah belah data sebelum mengurutkannya). Dengan data sebanyak 30.000, jumlah operasinya kira-kira adalah 30.000 dikali log₂(30.000). Nilai log₂(30.000) itu sekitar 15. Jadi, total operasinya hanya 30.000 * 15 = 450.000 operasi.
Coba bandingkan: 900 juta operasi vs 450 ribu operasi. Dengan Merge Sort, sistem bisa menyelesaikannya dalam hitungan milidetik tanpa membuat aplikasi hang.O(n)
Namun, selalu ada harga yang harus dibayar. Merge Sort membutuhkan array tambahan saat memecah dan menggabungkan data. Artinya, untuk memproses 30.000 data, sistem harus mengalokasikan ruang memori ekstra yang sebanding dengan jumlah 30.000 data tersebut.Dari perbandingan angka yang gila-gilaan tadi, fungsi asli dari Big O Notation akhirnya terlihat jelas. Di dunia nyata software engineering, tidak ada algoritma yang sempurna. Selalu ada trade-off (kompromi) antara Waktu dan Memori.
Bubble Sort menang mutlak di urusan memori (O(1)) tapi hancur lebur di kecepatan (O(n²)). Sebaliknya, Merge Sort adalah juara soal kecepatan (O(n log n)), tapi menuntut server menyediakan memori ekstra (O(n)).
Pada akhirnya, belajar Big O Notation bukan sekadar untuk lulus mata kuliah atau lolos interview kerja. Ini adalah bekal pola pikir. Dengan memahami Big O, kita jadi tahu algoritma mana yang harus dipilih secara bijak berdasarkan kondisi nyata—apakah sistem kita sedang krisis memori, atau butuh kecepatan ekstra agar user tidak kabur? Semua keputusan teknis itu dimulai dari pemahaman fundamental ini.
No members yet — be the first!
React baru saja menjadi fenomena global, dan setiap orang ingin belajar. Masalahnya? Setup project React
94 views
Sarkss Dulu
23 views
Ada banyak cara untuk consume API di React—mulai dari ribet manual dengan useEffect, sampai simpel dan modern dengan TanStack Query. Tujuannya tetap sama: menampilkan data ke user. Bedanya ada di proses, effort, dan pengalaman developer
16 views