System Init
0%
LOADING_ASSETSv2.0.26
blogs/algoritma-greedy-dalam-ngambil-gorengan--part-2
//Khay
Baca Bahasa Indonesia

Algoritma Greedy Dalam Ngambil Gorengan (Part 2)

AlgorithmFoodGreedy

Have you ever thought 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 in Friendships

When hanging out, utilizing a greedy algorithm to take the last piece of fried tofu provides an instant local optimum (your stomach is full). However, this frequently destroys the global optimum of the friendship. Your friend who was eyeing that tofu will cache a grudge that introduces latency the next time you ask them for help on an assignment.

It's better to use Dynamic Programming. You calculate the sub-problem of your friend's satisfaction. If you yield now (sacrificing your stomach), you will store a state of kindness in their memory. Later, when you genuinely need a massive favor (e.g., borrowing their motorcycle for a week), that state will be recalculated, yielding a return on investment vastly superior to a single piece of tofu. Think long term, compile your kindness.