Anda di halaman 1dari 3

1.

Definisi Pemograman dinamis

Pemrograman Dinamis adalah teknik dalam pemrograman komputer yang membantu


memecahkan masalah dalam sebuah class secara efisien yang memiliki sub-masalah tumpang
tindih dan properti substruktur yang optimal.

Jika ada masalah yang dapat dibagi menjadi sub-masalah, yang pada akhirnya dibagi lagi
menjadi sub-masalah yang lebih kecil, dan jika ada tumpang tindih di antara sub-masalah
tersebut, maka solusi untuk sub masalah dapat disimpan untuk referensi di masa mendatang.
Dengan cara ini, efisiensi CPU dapat ditingkatkan. Metode pemecahan solusi ini disebut sebagai
pemrograman dinamis.

2. Langkah penggunaan pemograman dinamis

langkah-langkah penggunaan program dinamis:

1. Tentukan masalah optimasi yang akan dipecahkan, serta kriteria optimalnya. Misalnya,
apakah masalah tersebut mencari nilai maksimum atau minimum.
2. Identifikasi submasalah yang dapat digunakan untuk memecahkan masalah utama.
Submasalah harus bersifat overlap, artinya mereka harus saling bergantung satu sama
lain.
3. Kembangkan rekurensi yang merepresentasikan solusi optimal dari setiap submasalah.
Rekurensi harus mengacu pada submasalah yang lebih kecil, dan solusi dari submasalah
tersebut harus tersimpan dalam tabel.
4. Implementasikan algoritma bottom-up dengan menggunakan tabel yang sudah dibuat.
Algoritma ini akan menghitung solusi dari submasalah yang paling kecil terlebih dahulu,
dan menyimpannya dalam tabel. Kemudian, algoritma akan menghitung solusi dari
submasalah yang lebih besar berdasarkan solusi dari submasalah yang lebih kecil yang
sudah tersimpan dalam tabel.
5. Kembangkan algoritma top-down jika diperlukan. Algoritma ini menggunakan
pendekatan rekursif dengan memoisasi. Artinya, ketika algoritma menyelesaikan solusi
untuk suatu submasalah, solusi tersebut akan disimpan dalam tabel sehingga tidak perlu
dihitung kembali jika submasalah yang sama muncul lagi di kemudian hari.
6. Analisis kompleksitas waktu dan ruang dari program dinamis yang sudah dibuat. Pastikan
program dapat berjalan dengan efisien, terutama jika masalah yang ingin dipecahkan
berskala besar.

3. Contoh

contoh program dinamis menggunakan bahasa pemrograman Python:

# Program dinamis untuk mencari bilangan Fibonacci ke-n

def fibonacci(n):

# Jika n adalah 0 atau 1, maka kembalikan n if n <= 1: return n # Jika n lebih besar dari 1,
hitung bilangan Fibonacci ke-n

else:

return (fibonacci(n-1) + fibonacci(n-2))

# Tes program

print("Bilangan Fibonacci ke-5 adalah", fibonacci(5))

print("Bilangan Fibonacci ke-10 adalah", fibonacci(10))

Program di atas menggunakan teknik rekursi untuk menghitung bilangan Fibonacci ke-n. Ketika
fungsi fibonacci (n) dipanggil, ia akan memeriksa apakah n sama dengan 0 atau 1. Jika ya, maka
fungsi akan mengembalikan n. Jika tidak, maka fungsi akan memanggil dirinya sendiri dua kali,
dengan argumen n-1 dan n-2, dan kemudian menjumlahkan hasilnya untuk menghasilkan
bilangan Fibonacci ke-n.

Program di atas dinamis karena tidak bergantung pada jumlah bilangan Fibonacci yang telah
diketahui sebelumnya. Sebaliknya, ia dapat menghitung bilangan Fibonacci ke-n dengan cara
yang efisien dan efektif.

4. Karakteristik masalah yang cocok dengan pemogrman dinamis

Karakteristik masalah yang cocok dengan pemrograman dinamis:

1. Overlapping Subproblems: Masalah dapat dibagi menjadi submasalah yang lebih kecil,
dan solusi dari submasalah tersebut dapat digunakan kembali dalam solusi dari masalah
aslinya.
2. Optimal Substructure: Solusi optimal dari masalah dapat ditemukan dengan
menggabungkan solusi optimal dari submasalah yang lebih kecil.
3. Memoization: Solusi untuk setiap submasalah disimpan dalam tabel atau struktur data
lainnya sehingga tidak perlu dihitung lagi ketika submasalah itu muncul kembali.
4. Rekursi: Submasalah dapat dipecahkan dengan menggunakan rekursi.
5. Decisions: Masalah melibatkan keputusan atau pilihan yang harus diambil dalam setiap
langkah untuk mencapai solusi optimal.

Contoh masalah yang cocok dengan pemrograman dinamis meliputi Fibonacci sequence,
knapsack problem, shortest path problem, dan banyak lagi.

Anda mungkin juga menyukai