Algoritma dan Struktur Data

Di balik setiap aplikasi keren, game yang mulus, atau AI yang pintar, selalu ada dua pilar utama yang bekerja di latar belakang: Algoritma (langkah logis memecahkan masalah) dan Struktur Data (cara menyusun informasi agar mudah diolah).

Ibarat membangun sebuah rumah, struktur data adalah lemari dan rak tempat kamu menyimpan barang, sedangkan algoritma adalah prosedur atau langkah-langkahmu saat memasak di dapur atau membersihkan rumah. Jika keduanya digabungkan, program komputer akan berjalan dengan sangat efisien.

1. Algoritma: Cara Komputer Memecahkan Masalah

Komputer sebenarnya tidak “pintar”. Komputer adalah mesin yang sangat patuh namun polos. Mereka membutuhkan instruksi yang sangat detail, runtut, dan tidak ambigu. Instruksi step-by-step inilah yang disebut Algoritma.

Tiga Konsep Dasar Logika Pemrograman

Untuk membangun sebuah algoritma, kita menggunakan tiga struktur logika utama:

  1. Runtutan (Sequence): Komputer membaca kode dari atas ke bawah, baris demi baris secara berurutan.
  2. Percabangan (Conditionals/If-Else): Komputer mengambil keputusan berdasarkan kondisi tertentu.
    • Contoh: JIKA password benar, MAKA masuk ke beranda. JIKA TIDAK, tampilkan pesan eror.
  3. Perulangan (Loops/For/While): Komputer mengulang suatu tugas selama kondisi tertentu terpenuhi agar programmer tidak perlu menulis kode yang sama berulang kali.
    • Contoh: Kirimkan notifikasi ucapan selamat ulang tahun ke SEMUA pengguna yang berulang tahun hari ini.

Contoh Kasus: Algoritma Pencarian (Searching)

Bayangkan kamu diminta mencari angka 7 dalam deretan angka acak berikut: [2, 5, 1, 9, 7, 3]. Bagaimana komputer melakukannya?

  • Metode 1: Linear Search (Pencarian Lurus)Komputer mengecek dari kiri ke kanan satu per satu. “Apakah 2 = 7? Bukan. Apakah 5 = 7? Bukan… Apakah 7 = 7? Ya, ketemu!”
    • Kelemahan: Jika angkanya ada 1 juta dan targetnya di paling akhir, komputer harus mengecek 1 juta kali.
  • Metode 2: Binary Search (Pencarian Biner)Jika deretan angka sudah diurutkan terlebih dahulu: [1, 2, 3, 5, 7, 9]. Komputer langsung membelah dua deretan tersebut dan mengecek angka di tengah (angka 3). Karena 7 lebih besar dari 3, komputer otomatis membuang setengah deretan bagian kiri dan hanya mencari di bagian kanan. Proses ini diulang sampai ketemu.
    • Kelebihan: Jauh lebih cepat karena komputer memangkas setengah pilihan di setiap langkahnya.

2. Struktur Data: Bagaimana Data Disusun secara Efisien

Menyimpan data sembarangan di memori komputer akan membuat algoritma berjalan lambat. Oleh karena itu, kita memilih struktur data yang sesuai dengan kebutuhan aplikasi.

Berikut adalah beberapa jenis struktur data dasar yang paling sering digunakan:

📦 Array (Larik)

  • Konsep: Kotak penyimpanan berurutan di mana setiap elemennya memiliki nomor indeks (dimulai dari 0).
  • Karakteristik: Ukurannya biasanya tetap sejak awal dibuat. Sangat cepat jika kamu ingin mengambil data yang sudah kamu ketahui nomor indeksnya.
  • Analogi: Deretan loker bernomor di stasiun kereta.

🥞 Stack (Tumpukan)

  • Konsep: Mengikuti prinsip LIFO (Last In, First Out). Data yang terakhir dimasukkan adalah data yang pertama kali dikeluarkan.
  • Analogi: Tumpukan piring cucian. Kamu menaruh piring baru di paling atas, dan saat ingin mengambil piring, kamu juga mengambil yang paling atas terlebih dahulu.
  • Contoh Nyata: Fitur Undo (Ctrl+Z) di Microsoft Word atau tombol Back di browser internetmu.

🧍‍♂️🧍‍♀️ Queue (Antrean)

  • Konsep: Mengikuti prinsip FIFO (First In, First Out). Data yang pertama kali masuk adalah yang pertama kali dilayani.
  • Analogi: Antrean di kasir minimarket. Orang yang datang pertama akan dilayani dan keluar terlebih dahulu.
  • Contoh Nyata: Sistem antrean cetak (print queue) pada printer atau pengiriman pesan di WhatsApp.

🌳 Tree (Pohon)

  • Konsep: Struktur data hierarkis yang bercabang, dimulai dari satu elemen utama bernama Root (akar) dan bercabang ke elemen-elemen di bawahnya (Nodes).
  • Analogi: Silsilah keluarga atau struktur organisasi perusahaan.
  • Contoh Nyata: Struktur folder di dalam komputer kamu (C: -> Program Files -> Google -> Chrome).

3. Mengapa Efisiensi itu Penting? (Notasi Big O)

Dalam mengukur kehebatan sebuah algoritma, programmer menggunakan standar bernama Notasi Big O ($O$). Notasi ini mengukur seberapa berat kinerja algoritma seiring dengan bertambahnya jumlah data ($n$).

  • $O(1)$ – Waktu Konstan: Kecepatan super. Tidak peduli data berjumlah 10 atau 10 juta, waktu eksekusinya tetap sama. (Contoh: Mengambil barang dari loker Array yang sudah tahu nomor indeksnya).
  • $O(n)$ – Waktu Linear: Kecepatan standar. Waktu eksekusi berbanding lurus dengan jumlah data. Jika data naik 10 kali lipat, waktu proses juga naik 10 kali lipat. (Contoh: Linear Search).
  • $O(n^2)$ – Waktu Kuadrat: Kecepatan lambat (berbahaya). Biasanya terjadi karena ada perulangan di dalam perulangan (nested loops). Jika data ada 1.000, komputer harus melakukan 1.000 x 1.000 = 1.000.000 operasi. Ini yang sering membuat aplikasi freeze atau lag.

🤝 Kerja Sama Algoritma dan Struktur Data

Saat kamu membuka aplikasi peta digital (seperti Google Maps) untuk mencari rute terdekat dari rumah ke bioskop:

  1. Peta digital menyimpan koordinat jalanan dan persimpangan kota menggunakan struktur data bernama Graph (jaringan titik yang saling terhubung).
  2. Aplikasi kemudian menjalankan Algoritma Dijkstra atau A* (algoritma pencarian rute terpendek) untuk menyusuri jaringan Graph tersebut.
  3. Berkat kombinasi struktur data yang tepat dan algoritma yang efisien, rute terbaik bisa ditemukan dalam waktu kurang dari satu detik, menyelamatkan ponselmu dari panas berlebih akibat menghitung jutaan kemungkinan jalan secara acak.