Algoritma adalah urutan langkah yang jelas untuk menyelesaikan satu masalah, dan pasti selesai. Satu langkah adalah satu pekerjaan kecil yang bisa langsung dikerjakan, misalnya membandingkan dua angka atau menyimpan satu nilai. Mirip resep masakan: bahannya masuk, langkahnya diikuti satu per satu, lalu masakannya jadi.
🧪 Tebakan cepat: kamu mencari angka terbesar dari 5 angka acak. Paling sedikit berapa angka yang harus kamu lihat: 1, 3, atau 5? Tebak dulu, jawabannya ada di bagian "Contoh: cari angka terbesar".
Contoh: cari angka terbesar
Masalahnya: dari [3, 7, 1, 9, 4], mana yang terbesar? Resepnya dalam kata-kata:
- Anggap angka pertama yang terbesar, simpan sebagai
max. - Ambil angka berikutnya. Kalau lebih besar dari
max, gantimaxdengan angka itu. - Ulangi langkah 2 sampai angkanya habis, lalu kembalikan
max.
Jalannya, langkah demi langkah:
| Langkah | Yang dibandingkan | max sesudahnya |
|---|---|---|
| awal | ambil angka pertama, 3 | 3 |
i = 1 |
7 lebih besar dari 3? ya | 7 |
i = 2 |
1 lebih besar dari 7? tidak | 7 |
i = 3 |
9 lebih besar dari 7? ya | 9 |
i = 4 |
4 lebih besar dari 9? tidak | 9 |
Resep yang sama, ditulis di JavaScript:
function findMax(arr) {
let max = arr[0]; // anggap yang pertama terbesar
for (let i = 1; i < arr.length; i++) {
if (arr[i] > max) max = arr[i];
}
return max;
}
console.log(findMax([3, 7, 1, 9, 4])); // 9
let max = arr[0]adalah langkah 1: angka pertama jadi juara sementara.for (let i = 1; ...)mulai dari angka kedua (index 1).if (arr[i] > max) max = arr[i]adalah langkah 2: juaranya cuma diganti kalau ada yang lebih besar.return maxditulis sesudah loop, jadi baru jalan setelah semua angka dilihat.
Jawaban tebakan: 5, semuanya. Angka yang belum dilihat bisa saja yang terbesar, jadi gak ada jalan pintas.
Ciri algoritma yang benar
- Ada input dan output.
[3, 7, 1, 9, 4]masuk,9keluar. - Tiap langkah jelas.
arr[i] > max, bukan "angka yang kelihatan agak besar". Komputer butuh perintah yang pasti. - Pasti selesai. Langkahnya terbatas: loop berhenti waktu
isampaiarr.length. - Bisa dikerjakan. Cuma pakai pekerjaan dasar: membandingkan, menyimpan, maju ke angka berikutnya.
Algoritma gak terikat bahasa pemrograman: resep yang sama bisa ditulis di JavaScript, Python, atau di kertas.
Big-O: berapa langkah kalau datanya banyak
Satu masalah bisa diselesaikan dengan banyak algoritma. Yang lebih baik biasanya yang langkahnya lebih sedikit waktu datanya banyak. Banyaknya data disebut n.
findMax membandingkan tiap angka sekali: 5 angka butuh 4 perbandingan, 1.000 angka butuh 999. Langkahnya tumbuh sebanding dengan n, dan ini ditulis O(n) (dibaca "big O n"). Artinya: datanya dua kali lipat, waktunya kira-kira dua kali lipat. Big-O cuma melihat bentuk pertumbuhannya, bukan angka pastinya, jadi 999 tetap ditulis O(n).
Yang paling sering ketemu, dari yang paling cepat:
| Big-O | Artinya | Langkah untuk 1.000 data |
|---|---|---|
| O(1) | tetap, berapa pun datanya | 1 |
| O(log n) | datanya dua kali lipat, langkahnya cuma nambah satu | sekitar 10 |
| O(n) | datanya dua kali lipat, langkahnya dua kali lipat | 1.000 |
| O(n log n) | sedikit lebih berat dari O(n) | sekitar 10.000 |
| O(n²) | datanya dua kali lipat, langkahnya empat kali lipat | 1.000.000 |
log n artinya berapa kali n bisa dibelah dua sampai tinggal 1: 1.000 bisa dibelah dua sekitar 10 kali. n² (n kuadrat) biasanya muncul dari loop di dalam loop.
Bedanya makin terasa kalau datanya makin besar. Untuk 10.000 data, algoritma O(n log n) butuh sekitar 130.000 langkah, sedangkan O(n²) butuh 100 juta langkah. Jadi yang O(n log n) jauh lebih cepat, di bahasa apa pun.
⚠️ Jebakan yang sering ketemu
- "Yang penting jalan." Algoritma O(n²) terasa cepat untuk 100 data (10.000 langkah), tapi bisa macet di 100.000 data (10 miliar langkah).
- Lupa input yang aneh.
findMax([])mengembalikanundefined, karenaarr[0]di array kosong ituundefined. Coba juga array berisi satu angka, atau yang semua isinya sama. - Big-O bukan jam. O(n) gak berarti n detik. Big-O cuma bilang bagaimana jumlah langkahnya bertambah waktu datanya bertambah.
TL;DR: Algoritma adalah urutan langkah yang jelas, pasti selesai, dan bisa dikerjakan, dari input sampai output, dan gak terikat bahasa pemrograman. Contohnya findMax: pegang angka pertama, ganti kalau ketemu yang lebih besar, kembalikan sesudah semua dilihat. Big-O menjelaskan seberapa cepat langkahnya bertambah waktu datanya (n) bertambah: O(1) tetap, O(log n) nambah sedikit sekali, O(n) dua kali lipat, O(n²) empat kali lipat. Untuk data besar, O(n log n) jauh lebih cepat dari O(n²).