Approximation algorithms: vertex cover 2-approximation, set cover (ln n)-approx, dan kapan cukup dibanding exact. Online algorithms: ski rental problem, competitive ratio, dan decision tanpa knowledge masa depan.

Setelah di episode 24 kita membahas Randomized Algorithms, pada episode ini kita membahas Approximation & Online Algorithms — dua kategori yang relevan ketika solusi optimal tidak praktis (terlalu lambat) atau tidak mungkin (informasi tidak lengkap).
Approximation algorithms menawarkan solusi hampir optimal dengan jaminan kualitas — kita tahu seberapa jauh solusi dari optimal. Online algorithms membuat keputusan tanpa knowledge masa depan — dan kita ingin menjamin kualitas keputusan dibandingkan situasi ideal jika semua informasi tersedia.
Approximation ratio: rasio antara solusi approximation dan solusi optimal. Jika solusi optimal = OPT, approximation ratio α berarti solusi approximation ≤ α × OPT (untuk minimization) atau ≥ OPT/α (untuk maximization).
Vertex cover: pilih minimum vertex sehingga setiap edge minimal memiliki satu endpoint yang dipilih. NP-hard untuk minimum vertex cover.
2-approximation: pilih semua edge, untuk setiap edge yang belum ter-cover, pilih kedua endpoint-nya. Solusi ≤ 2 × OPT.
def approx_vertex_cover(edges, n):
"""edges: list of (u, v)"""
covered = set()
selected = set()
remaining = set(range(n))
for u, v in edges:
if u not in covered or v not in covered:
selected.add(u)
selected.add(v)
covered.add(u)
covered.add(v)
return selectedMengapa 2-approx?: setiap edge yang dipilih minimal memiliki satu endpoint di optimal solution. Kita memilih dua endpoint per edge → ≤ 2 × |OPT|.
Note
Vertex cover 2-approximation sangat sederhana tetapi memberikan jaminan: solusi tidak lebih dari 2× optimal. Untuk kebanyakan practical applications, 2× sudah cukup baik — terutama karena optimal solution sendiri membutuhkan waktu eksponensial.
Set cover: pilih minimum jumlah set sehingga union-nya mencakup semua elemen. NP-hard, tetapi greedy memberikan approximation ratio O(ln n).
def approx_set_cover(universe, sets):
"""Greedy set cover: O(ln n) approximation"""
uncovered = set(universe)
selected = []
while uncovered:
# Pilih set yang mencakup paling banyak uncovered elements
best_set = max(sets, key=lambda s: len(s & uncovered))
if not (best_set & uncovered):
break
selected.append(best_set)
uncovered -= best_set
return selectedBukti O(ln n): setiap iterasi menutupi setidaknya 1/|uncovered| dari elemen yang tersisa → O(ln n) iterasi.
| Masalah | Approximation Ratio | Algoritma |
|---|---|---|
| Vertex cover | 2 | Greedy edge |
| Set cover | O(ln n) | Greedy set |
| Travelling salesman (triangle ineq.) | 1.5 | Christofides |
| MAX-SAT | 7/8 | Randomized |
Online algorithm: membuat keputusan input per input tanpa melihat input masa depan. Competitive ratio: rasio antara performa online dan performa optimal offline (yang tahu semua input sebelumnya).
Masalah klasik: kalian bisa sewa ski ($1/hari) atau beli ski ($B). Berapa hari kalian harus menyewa sebelum memutuskan beli?
Strategi optimal: sewa selama B-1 hari, beli di hari ke-B.
def ski_rental(decision_point, buy_threshold, cost_rent, cost_buy):
"""Simulasi ski rental"""
total = 0
for day in range(1, decision_point + 1):
if day < buy_threshold:
total += cost_rent
else:
total += cost_buy
break
return total| Problem | Competitive Ratio | Strategi |
|---|---|---|
| Ski rental | 2 | Rent B-1 days, buy |
| Paging (k cache) | k | LRU eviction |
| k-server | 2k-1 | Deterministic marking |
Tip
Online algorithms relevan untuk sistem production: kalian tidak tahu request masa depan (traffic spike, pattern baru), tetapi harus membuat keputusan sekarang (allocate resources, cache policy). Competitive ratio menjamin kualitas keputusan dibanding situasi ideal.
Implementasi greedy approximation untuk Travelling Salesman Problem (nearest neighbor heuristic) pada graph kecil (5-10 kota). Bandingkan hasil dengan optimal (brute force). Hitung approximation ratio aktual.
Pada episode 25 ini, kalian telah memahami:
Di episode 26 selanjutnya kita akan membahas Problem Classification, Tren 2026 & Competitive Programming Patterns — pola masalah, tren AI algorithms, dan pattern recognition untuk coding interview. Sampai jumpa di episode 26!