Anda di halaman 1dari 7

Nama : Mario Maysan Kokod

Nim : 4193250008

M.Kuliah : Desain Dan Analisis Algoritma

Kelas : ILKOM A 2019

SOAL :

Buatlah rangkuman dan contoh perhitungan secara manual dari Algoritma Dynamic


Programming!
PENYELESAIAN :

1. Programming Pengertian Dynamic


Dynamic Programming merupakan suatu teknik analisa kuantitatif untuk membuat tahapan
keputusan yang saling berhubungan. Teknik ini menghasilkan prosedur yang sistematis untuk
mencari keputusan dengan kombinasi yang optimal.
Program Dinamis (Dynamic Programming) adalah metode pemecahan masalah dengan cara
menguraikan solusi menjadi sekumpulan (stage), sedemikian sehingga solusi dari persoalan
dapat dipandang dari serangkaian keputusan yang saling berkaitan.
Dynamic Programming adalah prosedur matematis yang terutama dirancang untuk
memperbaiki efisiensi perhitungan masalah pemrograman matematis tertentu dengan
menguraikannya menjadi bagian masalah yang lebih kecil. Dynamic programming pada
umumnya menjawab masalah dalam tahap-tahap dengan setiap tahap meliputi tepat satu
variable optimasi. Perhitungan ditahap yang berbeda-beda dihubungkan melalui perhitungan
rekursi dengan cara yang menghasilkan pemecahan optimal bagi seluruh masalah.
Teori utama dalam dynamic programming adalah prinsip optimalitas. Prinsip itu pada
dasarnya menentukan bagaimana suatu masalah yang diuraikan dengan benar dapat dijawab
dalam tahap-tahap.
Pemecahan masalah dengan menggunakan dynamic programming mempunyai empat
tahapan, yaitu :
a. Memecah permasalahan asli menjadi bagian permasalahan yang juga disebut sebagai
tahapan dengan aturan keputusan ditiap-tiap tahapan.
b. Memecahkan tahapan terakhir dari permasalahan dengan semua kondisi dan keadaan yang
memungkinkan.
c. Bekerja mundur dari tahapan terakhir dan memecahkan tiap tahap. Hal ini dikerjakan
dengan mencari keputusan optimal dari tahap tersebut sampai dengan tahap terakhir.
d. Solusi optimal dari permasalahan didapatkan jika semua tahap sudah terpecahkan.

2.Model Dynamic Programming

Dalam dynamic programming perhitungan dilakukan dalam tahap-tahap dengan


memerincikan masalah menjadi beberapa bagian masalah. Setiap bagian masalah kemudian
dipertimbangkan secara terpisah dengan tujuan untuk mengurangi jumlah dan kerumitan
perhitungan. Tetapi karena semua masalah saling bergantung, harus dipikirkan sebuah prosedur
untuk menghubungkan perhitungan dengan cara yang menjamin bahwa pemecahan yang layak
untuk tiap-tiap tahap juga layak untuk keseluruhan masalah.
Semua keputusan dimasa yang akan datang dipilih secara optimal tanpa melihat
keputusan yang diambil sebelumnya. Sifat khusus ini merupakan prinsip optimalitas yang
merupakan dasar bagi keabsahan perhitungan dynamic programming.
Ada 2 (dua) Pendekatan pada Program dinamis, yaitu :
1. Program Dinamis Maju ( forward atau up-down)
2. Program Dinamis Mundur (Bacward atau button-up)

Pada prinsipnya Program Dinamis berdasarkan pada Graf multitahap (multistage graph).
Tiap simpul didalam garaf tersebut menyatakan status, sedanagkan V1,V2,… menyatakan
tahap.
Pada Persoalan Graph Multitaphap dikaitkan dengan program dinamis, dikenal :
1.Tahap (k) adalah proses memilih simpul tujuan berikutnya (Gambar 1, ada 5
tahap).
2. Status (s) yang berhubungan dengan masing-masing tahap adalah simpul-simpul
di dalam garaf.

Relasi rekurens berikut menyatakan lintasan terpendek dari status s ke x 4 pada tahap
k:

Tujuan Program Dinamis Maju mendapatkan dengan cara mencari


terlebih dahulu.

1. Karakteristik dan Konsep Dasar Dynamic Programming


Dynamic Programming memiliki beberapa karakteristik diantaranya :
 Permasalahan dibagia menjadi stage, dengan keputusan diperlukan pada tiap stage.
 Tiap stage punya nomor stage berhubungan dengan awal dari stage.
Hasil dari setiap stage ditransformasikan pada stage yang lainnya.
 Prosedur penyelesaiannya dirancang untuk mendapatkan hasil yang optimal.
 Hasil optimal dari suatu stage tidak berhubungan dengan stage sebelumnya.
 Prosedur penyelesaiannya diawali dari stage terakhir.

Konsep dasar dalam dynamic programming ayaitu :


 Dekomposisi
Persoalan dynamic programming dapat dipecah-pecah menjadi subpersoalan atau
tahapan yang lebih kecil dan berurutan. Setiap tahap disebut juga sebagai titik
keputusan. Setiap keputusan yang dibuat pada suatu tahap akan mempengaruhi
keputusan-keputusan pada atahap berikutnya.
 Status
Status adalah kondisi awal dan kondisi akhir pada setiap tahap, dimana pada tahap
tersebut keputusan dibuat. Status akhir pada sebuah tahap tergantung keadaan status
awal dan keputusan ayang dibuat pada tahap yang bersangkutan. Status akhir pada
suatu tahap merupakan input bagi tahap berikutnya.
 Variable Keputusan dan Hasil
Keputusan yang dibuat pada setiap atahap merupakan keputusan yang berorientasi
kepada return yang diakibatkannya, tingkat maksimal atau minimal.
 Fungsi Transisi
Fungsi transisi menjelaskan secara pasti bagaimana tahap-tahap saling berhubungan.
Fungsi ini berbentuk fungsi hubungan antar status pada setiap tahap yang berurutan.
 Optimasi Tahap
Optimasi tahap dalam dynamic programming adalah menentukan keputusan optimal
pada setiap tahap dari bebagai kemungkinan nilai status inputnya.
 Fungsi Rekursif
Fungsi rekursif biasanya digunakan pada berbagai program computer, dimana nilai
sebuah variable pada fungsi itu merupakan nilai kumulatif dari nilai variable tersebut
pada tahap sebelumnya.

Dynamic Programming (DP) merupakan salah satu teknik perancangan algoritma yang
dikembangkan untuk menyelesaikan permasalahan yang sangat kompleks dengan memecah
permasalahan tersebut menjadi banyak sub-permasalahan. Perbedaan utama DP dengan Divide
and Conquer (D&C) adalah pada DP kita menggunakan kembali Perbedaan utama dari DP
dengan D&C adalah DP melakukan penyimpanan hasil penyelesaian sub-masalah sehingga
kita tidak perlu menyelesaikan sub-masalah yang sama berulang kali.

Contoh :
Perbedaan Dynamic programming dan Divide and Conquer (D&C) dalam perhitungan
bilangan fibonacci. Algoritma untuk menyelesaikan perhitungan fibonacci secara naif adalah
seperti berikut:
Algoritma fibonacci sederhana seperti di atas dapat dikatakan sebagai algoritma D&C, karena
kita membagikan perhitungan fibonacci ke dua fungsi fibonacci, sampai didapatkan nilai
hasil terkecilnya. Pemanggilan fungsi fibonacci di atas dapat digambarkan seperti berikut:

Perhatikan bagaimana f(n−2) dan f(n−3) dikalkulasikan sebanyak dua kali, dan semakin
kita masuk ke dalam pohon pemanggilan, kita akan melihat semakin banyak fungsi-fungsi
yang dipanggil berkali-kali. Pendekatan DP menghindari kalkulasi fungsi yang berulang kali
seperti ini dengan melakukan memoization, yaitu menyimpan hasil kalkulasi fungsi tersebut
dan menggunakan nilai yang disimpan ketika perhitungan yang sama dibutuhkan kembali.
Dengan menyimpan hasil kalkulasi seperti ini, tentunya jumlah total langkah perhitungan yang
harus dilakukan menjadi berkurang.
Misalnya, kita dapat menyimpan hasil kalkulasi dari fungsi fibonacci tersebut pada sebuah
dictionary, seperti berikut:

Dengan menyimpan hasil kalkulasi dari fungsi yang telah ada, maka proses pemanggilan
fungsi akan menjadi seperti berikut:
Seperti yang dapat dilihat, pohon pemanggilan fungsi terpotong setengahnya! Tentunya
perhitungan fibonacci akan menjadi sangat efisien dengan menggunakan fungsi yang baru ini.
Pendekatan lain dalam menghitung fibonacci lagi, yang masih adalah DP, yaitu dengan
menghitung nilai fibonacci dari bawah pohon (pada kode sebelumnya kita melakukan
perhitungan dari atas pohon):

Untuk ketiga fungsi tersebut, ketika ketiga fungsi tersebut dijalankan untuk n yang sama, akan
tampak perbedaan waktu eksekusinya.

Anda mungkin juga menyukai