System Init
0%
LOADING_ASSETSv2.0.26
blogs/algoritma-greedy-dalam-ngambil-gorengan--part-2
//Khay
Read in English

Algoritma Greedy Dalam Ngambil Gorengan (Part 2)

AlgorithmFoodGreedy

Pernah nggak sih mikir kenapa hal-hal di dunia nyata ini nggak se-elegan kode yang baru selesai di-refactor?

Manusia suka banget meromantisasi kerumitan. Mereka bilang "hidup itu perjalanan, nikmati prosesnya". Pretentious. Padahal kalau dipikir pakai logika, sebagian besar penderitaan kita itu murni karena algoritma pengambilan keputusan yang sub-optimal.

Gini deh, bayangin otak kamu itu legacy server yang udah jalan 20 tahun tanpa di-maintain. Kamu terus-terusan nambahin features baru (baca: ekspektasi, gaya hidup, drama sosial) tanpa pernah ngelakuin garbage collection memori masa lalu. Hasilnya? Memory leak. Kamu stres.

Dalam post kali ini, aku mau bedah satu fenomena pakai pisau analisis matematika. Nggak ada motivasi klise. Nggak ada kutipan senja. Cuma logika murni, probabilitas, dan sedikit sarkasme.

Definisi Masalah: Kenapa Kita Selalu Salah Pilih?

Kalau kita lihat dari sudut pandang Computational Complexity, masalah ini sebenernya NP-Hard. Ruang pencarian (search space) terlalu besar, dan fungsi objektif kita sering berubah-ubah sesuai mood.

Kamu nyoba optimasi variabel X (misal: dapet nilai A), tapi ternyata itu punya negative correlation sama variabel Y (waktu tidur). Ini yang disebut trade-off. Tapi anehnya, orang masih ngarep bisa maksimalin dua-duanya. Itu menyalahi hukum thermodynamics energi mental.

def make_decision(options, constraints):
    # This is what most people do
    try:
        return random.choice(options)
    except Exception as e:
        print("Panik dan salahkan keadaan")
        return None

Solusi: Heuristik dan Gradient Descent

Daripada nyari absolute optimum yang mustahil (dan butuh waktu komputasi selamanya), mending kita pakai pendekatan heuristik. Cari aja solusi yang "cukup bagus" (local minimum) dan stick with it.

  1. Inisialisasi Random: Mulai dari titik mana aja. Jangan overthinking di awal.
  2. Hitung Gradient: Liat arah mana yang bikin penderitaan (error rate) menurun.
  3. Update State: Ambil langkah kecil ke arah itu. Jangan langsung lompat ekstrim, nanti overshoot.

Intinya, stop bergantung sama motivasi. Motivasi itu volatile memory, ilang kalau server di-restart. Bangun sistem dan habit yang kuat, itu baru persistent storage.

Udah ah, gue mau lanjut debugging.

Greedy vs Dynamic Programming di Tongkrongan

Pas lagi nongkrong, algoritma greedy buat ngambil tahu isi terakhir emang ngasih local optimum yang memuaskan secara instan (perut lo kenyang). Tapi, ini sering ngancurin global optimum dari pertemanan. Temen lo yang dari tadi nungguin tahu isi bakal nyimpen dendam kesumat yang nambahin latency pas lu minta tolong kerjain tugas di masa depan.

Mending pake Dynamic Programming. Lu ngitung sub-problem dari kepuasan temen lu. Kalau lu ngalah sekarang (ngorbanin perut), lu bakal nyimpen state kebaikan di memori mereka. Nanti pas lu lagi bener-bener butuh bantuan gede (misal: nebeng motor seminggu), state itu bakal direkalkulasi dan ngehasilin return of investment yang jauh lebih tinggi daripada sebiji tahu isi. Think long term, compile kebaikan lu.