Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Struktur Data & Algoritma

Pelajaran 15 dari 17

Graf dan strategi algoritma

Pemrograman dinamis: memo dan tabel

Setelah pelajaran ini kamu bisa mengenali submasalah yang berulang, menyimpannya dengan functools.lru_cache, dan menyusun tabel dari bawah untuk koin paling sedikit.

±13 menitDiperiksa 1 Okt 2026

Materi

Pemrograman dinamis dipakai ketika masalah punya dua ciri. Pertama, jawaban optimum tersusun dari jawaban optimum submasalahnya. Kedua, submasalah yang sama muncul berulang kali. Rekursi biasa menghitung ulang setiap submasalah setiap kali ia muncul. Pemrograman dinamis menghitungnya sekali, menyimpannya, dan membacanya kembali.

Contohnya menghitung banyaknya cara menaiki n anak tangga bila setiap langkah naik satu atau dua anak tangga. Cara untuk n adalah cara untuk n − 1 ditambah cara untuk n − 2. Ditulis rekursif apa adanya, menghitung n = 30 membuat 2.692.537 panggilan fungsi, karena cara untuk 28, 27, dan seterusnya dihitung ulang berkali-kali. Padahal hanya ada 31 nilai n yang berbeda.

from functools import lru_cache

@lru_cache(maxsize=None)
def cara_dua(n):
    if n <= 1:
        return 1
    return cara_dua(n - 1) + cara_dua(n - 2)

print(cara_dua(30))   # 1346269, dengan 31 perhitungan saja

Ada dua cara menyimpan. Memo (memoization) mempertahankan bentuk rekursif dan menyimpan hasil setiap panggilan; di Python dekorator functools.lru_cache atau functools.cache melakukannya. Tabel (tabulation) membalik arah: isi larik dari submasalah terkecil ke yang terbesar dengan perulangan biasa, sehingga tidak ada rekursi sama sekali. Tabel juga menghindari batas kedalaman rekursi untuk n yang besar. Kelas Riset Operasi Dasar memakai cara yang sama untuk keputusan knapsack; di sini fokusnya pada biaya hitungnya.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Ciri masalah mana yang menandakan pemrograman dinamis layak dipakai?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke