ii
i
LOGIKA DAN ALGORITMA
REVIEW ALGORITMA
(Algoritma Dynamic Programming)
DISUSUN OLEH :
YULIANTI
1329041056
PTIK 03 2013
PENDIDIKAN TEKNIK INFORMATIKA DAN KOMPUTER (S1)
JURUSAN PENDIDIKAN TEKNIK ELEKTRO
FAKULTAS TEKNIK
UNIVERSITAS NEGERI MAKASSAR
TAHUN 2015
KATA PENGANTAR
Puji syukur penyusun panjatkan kehadirat Allah SWT. Tuhan semesta alam yang senantiasa melapangkan jiwa, memberikan petunjuk dan ketenangan hati sehingga penyusun dapat menyelesaikan makalah ini.
Makalah ini berjudul "Dynamic Programming" sebagai Tugas Pertama dalam Mata Kuliah Logika dan Algoritma. Diharapkan dengan adanya konsep yang jelas, akan mempermudah pembaca untuk menggali, memahami dan mengembangkan kemampuannya dalam bidang programming.
Penyusun menyadari bahwa dalam penyusunan makalah ini masih jauh dari sempurna dan harus dikembangkan lebih lanjut untuk bisa memberikan kontribusi yang lebih bermanfaat bagi kemajuan Dunia Teknologi khususnya Informatika dan Komputer
Akhirnya, semoga makalah ini dapat menambah wawasan bagi para pembaca agar insya'Allah dapat mengembangkan ilmunya dengan lebih baik.
Makassar, Juli 2015
Penyusun
DAFTAR ISI
KATA PENGANTAR i
DAFTAR ISI ii
BAB I PENDAHULUAN 1
Latar Belakang 1
Rumusan Masalah 1
Tujuan 1
BAB II PEMBAHASAN 2
Algaoritma 2
1. Definisi dan Sifat Algoritma 2
Efisiensi Algoritma 2
Algoritma Dynamic Programming 3
Pengertian Dynamic Programming 3
Model Dynamic Programming 4
Karakteristik dan Konsep Dasar Dynamic Programming 7
BAB III PENUTUP 12
Kesimpulan 12
DAFTAR PUSTAKA
BAB I
PENDAHULUAN
Latar Belakang
Algoritma adalah hal yang mendasar dalam Dunia Programming. Algoritma merupakan serangkaian kata atau instruksi untuk mendapatkan hasil khusus dalam beberapa langkah berhingga. Algoritma diartikan sebagai langkah-langkah penyelesaian masalah secara sistematis, Sebuah algoritma tidak hanya harus benar tetapi juga harus efisien.
Dalam menganalisis suatu algoritma yang menjadi perhatian utama adalah
berapa waktu tempuh dan berapa ruang dalam memori yang dibutuhkan untuk menjalankan algoritma tersebut. Memori yang dibutuhkan dalam pemrograman berhubungan dengan perangkat keras komputer. Dengan semakin pesatnya perkembangan teknologi saat ini maka efisiensi memori bukanlah masalah yang serius. Oleh karena itu waktu proses merupakan fektor yang lebih penting dibanding memori.
Makalah ini akan membahas tentang Algoritma Dynamic Programming
Rumusan Masalah
Adapun rumusan masalah dari makalah ini, yaitu sebagai berikut :
Bagaimana Definisi dan Sifat Algoritma ?
Apa Pengertian Dynamic Programming ?
Bagaimana Model Dynamic Programming ?
Bagaimana Karakteristik dan Konsep Dasar Dynamic Programming ?
Tujuan
Adapun tujuan yang ingin dicapai dalam pembuatan makalah ini yaitu agar Mahasiswa dapat mengetahui,
Definisi Algoritma, Algoritma Dynamic Programming
Model Dynamic Programming;
Karakteristik dan Konsep Algoritma Dynamic Programming;
BAB II
PEMBAHASAN
A. Algoritma
Definisi dan Sifat Algoritma
Algoritma merupakan serangkaian kata atau instruksi untuk mendapatkan hasil khusus dalam beberapa langkah berhingga (Chartrand & Oellerman, 1993).
Algoritma juga bisa diartikan sebagai langkah-langkah penyelesaian masalah secara sistematis. Sebuah algoritma tidak hanya harus benar tetapi juga harus efisien (Munir, 2005).
Sifat-sifat algoritma meliputi hal-hal sebagai berikut:
jelas, yaitu setiap langkah pada setiap algoritma harus dinyatakan dengan jelas, tidak bermakna ganda dan ditetapkan dengan cermat;
logis (urut), yaitu algoritma dibuat berdasarkan aturan yang tetap, berdasarkan pada alur berfikirnya;
terhingga, yaitu sebuah algoritma harus berhenti setelah melakukan satu langkah atau lebih dalam suatu interval waktu tertentu. Tanpa sifat ini, sebuah algoritma tidak bisa diimplementasikan oleh mannusia maupun mesin;
menyelesaikan masalah, yaitu dengan input tertentu suatu algoritma akan menyelesaikan masalah dalam kelasnya;
efektif, yaitu sebuah algoritma harus menegaskan tindakan sederhana yang dapat dilakukan secara efektif. Sifat ini menjamin bahwa setiap langkah pada suatu algoritma secara nyata dapat dijalankan.
Efisiensi Algoritma
Dalam menganalisis suatu algoritma yang menjadi perhatian utama adalah
berapa waktu tempuh dan berapa ruang dalam memori yang dibutuhkan untuk menjalankan algoritma tersebut. Meskipun suatu algoritma memberikan hasil yang mendekati optimal tetapi waktu yang dibutuhkan sangat lama maka algoritma tersebut biasanya jarang dipakai.
Beberapa keadaan dalam kompleksitas waktu adalah:
best case (suatu keadaan terbaik), yaitu waktu minimum yang dibutuhkan untuk menjalankan algoritma;
worst case (suatu keadaan terburuk), yaitu waktu maksimum yang dibutuhkan untuk menjalankan algoritma;
average case yaitu suatu keadaan rata-rata dari waktu untuk beberapa nilai masukan.
Kompleksitas waktu (T(n)) :
diukur dari jumlah tahapan komputasi yang dibutuhkan untuk menjalanan algoritma sebagai fungsi dari ukuran masukan n;
dihitung dari jumlah operasi dasar yang dilakukan di dalam algoritma sebaga fungsi ukuran masukan (n).
Ada aspek lain yang berhubungan dengan efisiensi algoritma yaitu memori yang digunakan. Memori yang dibutuhkan dalam pemrograman berhubungan dengan perangkat keras komputer. Dengan semakin pesatnya perkembangan teknologi saat ini maka efisiensi memori bukanlah masalah yang serius. Oleh karena itu waktu proses merupakan fektor yang lebih penting dibanding memori.
Algoritma Dynamic Programming
Pengertian Dynamic Programming
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.
Istilah Program Dinamis muncul karena kecenderungan penggunaan metode ini dalam menganalisa dan mendokumentasikan hasil perhitungan pada setiap tahapnya melibatkan pengambilan keputusan yang berkaitan dengan waktu. Tetapi, situasi lain dimana waktu bukan merupakan factor juga dipecahakan oleh dynamic programming dimana prosedur itu pada umumnya menentukan pemecahan dalam tahap-tahap.
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 :
Memecah permasalahan asli menjadi bagian permasalahan yang juga disebut sebagai tahapan dengan aturan keputusan ditiap-tiap tahapan.
Memecahkan tahapan terakhir dari permasalahan dengan semua kondisi dan keadaan yang memungkinkan.
Bekerja mundur dari tahapan terakhir dan memecahkan tiap tahap. Hal ini dikerjakan dengan mencari keputusan optimal dari tahap tersebut sampai dengan tahap terakhir.
Solusi optimal dari permasalahan didapatkan jika semua tahap sudah terpecahkan.
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 maslah salaing 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.
Sebuah tahap dalam dynamic programming didefinisikan sebagai bagian dari masalah yang memiliki beberapa alternative yang saling menggantikan yang darinya alternatif terbaik akan dipilih. Gagasan dasar dynamic programming adalah secara praktis menghilangkan pengaruh saling ketergantungan antar tahap-tahap dengan menghubungkan definisi suatu keadaan dengan setiap tahap. Suatu keadaan biasanya didefinisikan untuk menunjukkan suatu batasan yang mengikat semua tahap secara bersama-sama.
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 :
Program Dinamis Maju ( forward atau up-down)
Program Dinamis Mundur (Bacward atau button-up)
Misalkan x1,x2, …., xn menyaatakan peubah (variable) keputusan yang dibuat masing-masing untuk tahap 1,2,…, n. Maka ,
Program dinamis maju. Program dinamis bergerak mulai dari tahap 1, terus maju ke tahap 2, 3, dan seterusnya sampai tahap n. runtunan peubah keputusan adalah x1, x2, .., xn .
Program dinamis mundur. Program dinamis bergerak mulai dari tahap n, terus mundur ke tahap n-1, n-2, dan seterusnya sampai atahap 1. Runtunan peubah keputusan adalah xn, xn-1, …, x1.
Dengan demikian, Prinsip optimalitas pada program dinamis maju adalah ongkos pada tahap k +1 = (ongkos yang dihasilkan pada tahap k) + (ongkos dari tahap k ke tahap k + 1), k = 1, 2, …, n – 1
Sedangkan prinsip optimalitas pada program dinamis mundur adalah ongkos pada tahap k = (ongkos yang dihasilkan pada tahap k + 1) + ( ongkos dari tahap k + 1 ke tahap k), k = n, n – 1,…, 1.
Pada prinsipnya Program Dinamis berdasarkan pada Graf multitahap (multistage graph). Tiap simpul didalam garaf tersebut menyatakan status, sedanagkan V1,V2,… menyatakan tahap.
Gambar 1 : Garph multitahap
Pada Persoalan Graph Multitaphap dikaitkan dengan program dinamis, dikenal :
Tahap (k) adalah proses memilih simpul tujuan berikutnya (Gambar 1, ada 5 tahap).
Status (s) yang berhubungan dengan masing-masing tahap adalah simpul-simpul di dalam garaf.
Relasi rekurens berikut menyatakan lintasan terpendek dari status s ke x4 pada tahap k :
Tujuan Program Dinamis Maju mendapatkan dengan cara mencari terlebih dahulu.
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 ayang 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 atahap 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:
Pemanggilan Fungsi Fibonacci
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:
Pemanggilan Fungsi Fibonacci Dynamic Programming
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.
BAB III
PENUTUP
Kesimpulan
Algoritma bisa diartikan sebagai langkah-langkah penyelesaian masalah secara sistematis. 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.
DP (Dynamic Programming) menyelesaikan masalah dengan memecah masalah menjadi sub-permasalahan.
Setiap solusi dari sub-permasalahan yang telah didapatkan disimpan untuk digunakan kembali jika terdapat sub-permasalahan yang sama. Teknik ini dikenal dengan nama memoization.
DAFTAR PUSTAKA
http://www.academia.edu/12301059/Penentuan_Rute_Terpendek_Menuju_Kampus_Menggunakan_Algoritma_Dynamic_Programming
https://ekosuwono.wordpress.com/2010/01/13/dynamic-programming/#more-186
http://bertzzie.com/knowledge/analisis-algoritma/DynamicProgramming.html
http://yulianus-putra.blogspot.com/2012/03/sejarah-dynamic-programming.html
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0CDgQFjAD&url=http%3A%2F%2Fthesis.binus.ac.id%2FAsli%2FBab2%2F2009-2-00442-TI%2520BAB%25202.pdf&ei=vx2cVdzjE5a3u-QSc1a7wAQ&usg=-AFQjCNFX7ZQHyASxbBj1tsmwn6rtdvbBog&sig2=-DoRkx4dnXMx5qTDnZlyHDg
1