ANALISIS ALGORITMA
DYNAMIC PROGRAMMING
Disusun Oleh :
Agung Eka Lukmantara
(10113319) Analgo
-4
Dosen :
Puji syukur kami panjatkan kepada Allah SWT. Yang telah melimpahkan rahmat
dan hidayah-Nya, serta dengan doa restu kedua orang tua, sehingga
Laporan ini merupakan salah satu tugas pada mata kuliah Analisis Algoritma
Penulis sadar bahwa laporan ini masih sangar kurang dari apa yang diharapkan,
namun penulis berharap mudah-mudahan hasil laporan ini dapat dimanfaatkan bagi
semua pihak, dan untuk kesempurnaan laporan ini bersedia untuk menerima
Penulis
DAFTAR ISI
KATA
PENGANTAR...............................................................................................
......2
DAFTAR
ISI .............................................................................................................
.....3 BAB
I ................................................................................................................
.............4
3.1.
Algoritma ....................................................................................................
...... 19
3.1.1. Algoritma Knapsack
Problem ........................................................................ 19
3.1.2. Algoritma Coin Change
Problem .................................................................. 21
3.1.3. Algoritma Traveling Salesman
Problem ......................................................... 22
3.2.
Program.......................................................................................................
...... 24
1.1.1. Program Knapsack
Problem ........................................................................... 24
1.1.2. Program coin Change
Problem ...................................................................... 26
1.1.3. Program Traveling Salesman
Problem ........................................................... 27
BAB
IV .............................................................................................................
........... 29
4.1.
Kesimpulan ..................................................................................................
..... 29
4.2.
Saran ..........................................................................................................
....... 29
DAFTAR
PUSTAKA ...................................................................................................
31
BAB I
PENDAHULUAN
solusi agar masalah tersebut terselesaikan dengan baik. Setiap masalah apapun
Dynamic Programming.
Maksud dari program dinamis adalah suatu teknik matematis yang biasanya
digunakan untuk membuat suatu keputusan dari serangkaian keputusan yang saling
berkaitan. Dalam hal ini program dinamis menyediakan prosedur sistematis untuk
tidak ada bentuk matematis standar untuk perumusan pemrograman dinamis. Akan
dan persamaan tertentu yang digunakan di dalamnya harus dibentuk sesuai dengan
(subproblem) yang juga disebut sebagai tahapan (stage), dengan aturan keputusan
di tiap-tiap tahapan.
3. Bekerja mundur dari tahap terakhir, dan memecahkan tiap tahap. Hal ini dikerjakan
dengan mencari keputusan optimal dari tahap tersebut sampai dengan tahap
terakhir.
terpecahkan.
BAB II
DYNAMIC PROGRAMMING
diuraikan menjadi sub-sub masalah yang lebih kecil yang terkait satu sama lain
i = Tahap keputusan ke - i.
X1 X2 Xi Xn-1 Xi
r1(S1,X1) r2(S2,X2
) ri(Si,Xi) rn-1(Sn-1,Xn-1) rn(Sn,Xn)
f1(S1,X1) f2(S2,X2) fi(Si,Xi) fn-1(Sn-1,Xn-1) fn(Sn,Xn)
untuk memecahkan masalah dimana solusi optimal dari masalah tersebut dapat
memiliki nilai masing-masing. Dan ingin ditemukan solusi dengan nilai yang
sebagai berikut :
menemukan solusi untuk suatu problem, langkah ke-4 dapat dilakukan jika nilai
beberapa prinsip dasar yang terkait erat satu sama lain. Prinsip-prinsip dasar
tersebut, yaitu :
masalah dapat dibagi menjadi bagian-bagian masalah yang lebih kecil. Masalah
yang lebih kecil atau sub masalah ini tersebut sebagai tahap keputusan (stage).
mendapatkan keputusan optimal dari tiap-tiap tahap yang pada akhirnya akan
menghasilkan satu keputusan yang optimal. Oleh karena itu model Dynamic
programming disebut juga model multi stage programming (model multi tahap).
Tahap 3
Tahap 2
Tahap 1
**Proses Urutan pembagian masalah Secara Mundur
informasi dari suatu tahap ke tahap berikutnya. Arus informasi yang masuk ke
suatu tahap disebut status input, sedangkan arus informasi yang keluar dari suatu
tahap diseebut stats output. Status input penting, karena keputusan pada tahap
berikutnya tergantung dari status input sebelumnya. Jadi, status input untuk tahap
keputusan n-1 merupakan status output dari tahap keputusan sebelumnya, yaitu
tahap keputusan n. Sedangkan status output dari tahao keputusan n akan menjadi
status input untuk tahap kepututsan berikutnya, yaitu tahap keputusan n-1.
dainyatakan dalam berbagai bentuk keputusan alternatif yang dapat dipilih pada
hubungan antara tahap keputusan yang satu dengan tahap keputusan yang lain
Hubngan status dalam tahap keputusan yang berurutan bersifat berulang, artinya
jika terdapat tahap keputusan n dalam hubungannya dengan thap keputusan n-1
maka perhitungan untuk nilai status n-1 menggunakan nilai status n dari keputusan
pada tahap n.
Proses pemecahan suatu masalah yang kompleks menjadi sub-sub masalah yang
ukuran masalah yang tidak selalu tetap dengan melakukan perhitungan satu per
tersebut.
tertentu.
Penentuan rute terpendek dari satu titik ke titik yang lain adalah masalah yang
berbeda, contohnya seorang pengemudi yang mencari jalur terpendek dari tempat
asal ke tempat tujuan, pengantar pesanan makanan cepat saji yang juga mencari
jalur terpendek dari tempat asal ke tempat tujuan, dan juga seorang desainer
jaringan komputer yang harus mendesain skema perutean pada jaringan yang dia
(multistage graph) dan algoritma efisien yang tersedia untuk menghitung rute
lintasan jarak dan waktu. Perumusan persoalan ini akan menjadi salah satu
kegunaan dari rute jarak terpendek. Algoritma yang digunakan untuk menentukan
Programming. Seiring dengan waktu yang berjalan dan juga perkembangan ilmu
Programming.
Algoritma yang digunakan untuk menentukan rute terpendek pada
optimalitas. Prinsip optimalitas yaitu jika solusi total optimal, maka bagian solusi
sampai tahap ke-k juga optimal. Prinsip optimalitas berarti bahwa jika kita bekerja
dari tahap k ke tahap k + 1, kita dapat menggunakan hasil optimal dari tahap k
sesuatu. Dan tentunya tidak semua objek dapat ditampung di dalam karung
tersebut, hanya menampung barang yang pentingnya saja. Karung tersebut hanya
dapat menyimpan beberapa objek dengan total ukurannya (weight) lebih kecil atau
sama dengan ukuran kapasitas karung. Setiap objek itupun tidak harus kita
semua atau tidak sama sekali atau setiap barang hanya tersedia satu unit.
Solusi Knapsack Bounded
Setiap barang tersedia lebih dari satu unit dan juga jumlahnya tak terbatas.
strategi algoritma yang bisa menghasilkan solusi optimal, diantaranya adalah Brute
Force. Tapi strategi ini tidak efisien, jadi knapsack problem pada laporan ini akan
diselesaikan dengan Greedy Algorithm yaitu solusi yang mencari nilai optimum.
langkah:
Mengambil pilihan terbaik yang bisa diperoleh saat itu juga tanpa memperatikan
Berharap bahwa dengan memilih optimum lokal pada setiap langkah akan berakhir
Contoh Permasalah :
0 0 - 0 (0, 0, 0)
1 0 - 0 (0, 0, 0)
2 0 65 65 (1, 0, 0)
3 0 65 65 (1, 0, 0)
4 0 65 65 (1, 0, 0)
5 0 65 65 (1, 0, 0)
S olusi Optimum
0 0 80 + (-) = - 0 (0, 0, 0)
1 0 80 + (-) = - 0 (0, 0, 0)
2 65 80 + (-) = - 65 (1, 0, 0)
3 65 80 + 0 = 80 80 (0, 1, 0)
4 65 80 + 0 = 80 80 (0, 1, 0)
Solusi Optimum
0 0 30 + (-) = - 0 (0, 0, 0)
1 0 30 + (-) = - 0 (0, 0, 0)
2 65 30 + 0 = 30 65 (1, 0, 0)
3 80 30 + 65 = 95 95 (1, 0, 1)
Coin change problem adalah proses di mana menukarkan kepala coin yang
muncul dengan tailnya, atau kasus yang lebih mudahnya adalah kasus
penukaran mata uang rupiah ke dollar , dimana jumlah nominal dalam rupiah
akan di kalikan dengan angka(dollar) yang user ingin kan. Dengan adanya
yang cukup lama dibahas dalam kajian optimasi. Masalahnya adalah bagaimana
seorang salesman mengunjungi seluruh kota di suatu daerah dan kembali ke kota
awal keberangkatan dengan aturan bahwa tidak boleh ada kota yang dikunjungi
1. Perjalanan dimulai dan diakhiri di kota yang sama sebagai kota asal sales.
terkunjungi.
meminimumkan jarak total rute yang dikunjungi dengan mengatur urutan kota.
untuk mengunjungi seluruh kota yaitu kota A sampai kota F. Perhatikan gambar
berikut.
Dari study kasus tersebut didapatkan salah satu kemungkinan jalur yang
paling optimum dengan jalur urutan kota di mulai dari kota A, di lanjutkan menuju
Algoritma :
Output<<" Knapsack dengan Dynamic programming";
Output<<" Berapabanyak item yang andaperlukan : ";
Input>>n;
Output<<"masukkan kapasitas ";
Input>>c;
Output<<"masukkan "<<n<<" items:";
For(i=1;i<=n;i++)
Output<<"\nitemke-"<<i<<" Berat:";
Input>>w[i];
Output<<"\nmasukkan profit/value"<<i<<" :";
Input>>v[i];
endfor
endprocedure
Procedure knapsack::knap(Input
i,n,c,j,d,w:integer) Kamus :
Algoritma :
For i:= 0 to
n do d[i]
[0]=0; For
j:= 1 to c do
d[0][j]=0;
For(i=1;i<=n;i++)
{
For(j=1;j<=c;j++)
{
if((j-w[i])<0)
then
d[i][j]=d[i-1][j];
else
d[i][j]=max(d[i-1][j],v[i]+(d[i-1][j-w[i]]));
endif
endfor
endfor
endprocedure
Procedure knapsack::output(Input
n,i,j,d,c:integer) Deklarasi :
Algoritma :
Output<<"Nilaiperhitungantertinggiuntuk "<< n <<" items:"<<endl;
For(i=0;i<=n;i++)
For(j=0;j<=c;j++)
Output<<d[i][j];
endfor
endfor
endprocedure
Function
knapsack::max(a :integer,b :integer )
integer if(a>b) then return a; else return
b; endfunction {Algoritma Utama}
Deklarasi : class knapsack
{
w[20],v[20],d[10][10],n,c,i,j:
integer; public:
Procedure input(Output n,c:integer; Input i:integer );
Procedure knap(Input i,n,c,j,d,w:integer);
Function knapsack::max(a :integer,b :integer ) integer
Procedure output(Input n,i,j,d,c:integer);
};
Algortima :
knapsack k;
k.input(Output n,c:integer; Input i:integer );
k.knap(Input i,n,c,j,d,w:integer);
k.output(Input n,i,j,d,c:integer);
{Algoritma Utama}
Deklarasi : jumlah
,d,size,ans,k :integer;
s,C:^integer
Function CoinChangeDynamic(input jumlah, d[], size, C[], s[] :
Integer) integer
Algoritma :
d[] = 1, 5, 10, 25, 50, 100,500,1000;
Output<<"Masukan Jumlah Nilai Koin =
";cin>>jumlah; size =
sizeof(d)/sizeof(d[0]); C^ = new
int[jumlah+1]; s^ = new int[jumlah+1];
ans = CoinChangeDynamic(jumlah, d, size, C, s);
Ouput<< "Minimal Koin = " << ans << endl;
Algoritma :
Output("Enter No. of Cities: ");
Input(n);
Output("Enter Cost Matrix : ");
For i:= i to n do
Output(" Enter Elements of Row # : ",i+1);
For j:= j to n do
Input(a[i][j]);
visited[i]=0;
endfor endfor
Output("The cost list is: ");
For( i=0;i<n;i++)
For( j=0;j<n;j++)
Output(a[i][j]);
Endfor
endfor
endprocedure
Procedure mincost(input
visited:integer;) Deklarasi :
city :integer; i,ncity:integer;
Algoritma :
visited[city]=1;
Output(city+1,"%>");
ncity= least(city);
if(ncity==999) then
ncity=0;
Output("%d",ncity+1);
cost+=a[city][ncity];
return;
endif
mincost(ncity);
endprocedure
Algoritma :
Output("nMinimum
cost: "); Output(cost);
endprocedure
{Algortima utama}
Deklarasi : a[10]
[10],visited[10],n,cost=0:inte
ger; i,j:integer;
Procedure get(output n,a:integer )
Function least(input c:integer)integer
Procedure mincost(input visited:integer;)
Procedure put(input cost:integer)
Algoritma :
Procedure get(output
n,a:integer ) Output("\n\nThe
Path is:\n\n"); mincost(0);
put();
3.2. Program
3.2.1. Program Knapsack Problem
#include <iostream>
#include <conio.h>
#include <stdlib.h>
void knapsack::input()
{
cout<<"Knapsack dengan Dynamic
programming"<< endl; cout << endl;
cout<<"Berapa banyak item yang anda
perlukan : "; cin>>n;
cout<<"Masukkan kapasitas :
"; cin>>c;
cout<<"Masukkan "<<n<<" items:";
for(i=1;i<=n;i++)
{
cout<<"\nitem ke-"<<i<<" Berat:";
cin>>w[i];
cout<<"\nmasukkan Profit/Value "<<i<<" :";
cin>>v[i];
}
}
void knapsack::knap()
{
for(i=0;i<=n;i++)
d[i][0]=0;
for(j=1;j<=c;j++)
d[0][j]=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=c;j++)
{ if((j-w[i])<0)
d[i][j]=d[i-1][j];
else
{
d[i][j]=max(d[i-1][j],v[i]+(d[i-1][j-w[i]]));
}
}
}
}
void knapsack::output()
{
cout << endl;
cout<<"Nilai perhitungan tertinggi untuk "<< n <<"
items:"<<endl; for(i=0;i<=n;i++)
{
for(j=0;j<=c;j++)
{
cout<<"\t"<<d[i][j];
}
cout<<endl;
}
}
int knapsack::max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
//system("cls");
knapsack k;
k.input();
k.knap();
k.output();
getch();
}
int CoinChangeDynamic(int jumlah, int d[], int size, int C[], int s[])
{
C[0] = 0; for(int j =
1; j <= jumlah; j++) {
C[j] = INT_MAX;
for(int i = 0; i < size; i++) {
if(j >= d[i] && 1 + C[j-d[i]]
< C[j] ) {
C[j] = 1 + C[j-d[i]];
// i-th denomination used for the
amount of j s[j] = i;
}
}
}
return C[jumlah];
}
int main()
{
int d[] = {1, 5, 10, 25, 50,
100,500,1000}; int jumlah ;//=
67;
cout <<"Masukan Jumlah Nilai Koin = ";cin >>jumlah;
int size = sizeof(d)/sizeof(d[0]); int *C
= new int[jumlah+1]; int *s = new
int[jumlah+1]; int ans =
CoinChangeDynamic(jumlah, d, size, C, s);
cout << "Minimal Koin = " << ans << endl;
delete[] C;
delete[] s;
return 0;
}
3.2.3. Program Traveling Salesman Problem
#include<stdio.h>
#include
<stdlib.h>
#include<conio.h>
using namespace
std;
int a[10][10],visited[10],n,cost=0;
void get()
{ int i,j;
printf("Enter No. of Cities:
"); scanf("%d",&n);
printf("\nEnter Cost Matrix:
\n");
for( i=0;i<n;i++)
{
printf("\n Enter Elements of Row # : %d\n",i+1);
for( j=0;j<n;j++)
scanf("%d",&a[i][j]);
visited[i]=0;
}
printf("\n\nThe cost list
is:\n\n"); for( i=0;i<n;i++)
{
printf("\n\n");
for( j=0;j<n;j+
+)
printf("\t%d",a[i][j]);
}
}
int least(int c)
{
int i,nc=999;
int
min=999,kmin
;
for(i=0;i<n;i++)
{
if((a[c][i]!=0)&&(visited[i]==0))
if(a[c][i]<min)
{
min=a[i][0]+a[c][i];
kmin=a[c][i];
nc=i;
}
}
if(min!=999)
cost+=kmin;
return nc;
}
BAB IV
PENUTUP
4.1. Kesimpulan
Pemrograman dinamis merupakan suatu teknik analisa kuantitatif untuk membuat
keputusan, dimana hasil keputusan dari satu tahap akan mempengaruhi keputusan
diuraikan menjadi sub-sub masalah yang lebih kecil yang terkait satu sama lain
4.2. Saran
Menurut penulis, dengan menggunakan metode dynamic programming
menggunakan metode ini permasalah yang dianggap rumit pun dapat terselesaikan
dengan banyak solusi. Misalkan, solusi knapsack problem, solusi coin change
problem, dan traveling salesman problem. Solusi tersebut sudah sangat membantu
menjadi sub-sub masalah yang lebih kecil dan membuat sumber permasalahan
dalam rangkaian proses masalah tersebut menjadi lebih jelas untuk diketahui.
Programming cenderung lebih fleksibel dari pada teknik optimasi lain. Prosedur
perhitungannya menurut ukuran masalah yang tidak selalu tetap dengan melakukan
http://mohamadrisalrozakamakali.blogspot.com/2013/05/program-
dinamis-dynamicprogramming.html
http://web.unair.ac.id/admin/file/f_12649_paper_dynamic_programming.
pdf http://fileex.blogspot.com/2013/10/skripsi-perancangan-simulasi-
dynamic.html http://repo.eepis-its.edu/718/1/1026.pdf
https://icomit.wordpress.com/2012/06/02/traveling-salesman-problem-
tsp-dalamdefinisi/
Dian Perdhana Putra 13507096, Teknik Informatika ITB. Jl. Ganesha 10 Bandung.
e-mail: if17096@students.if.itb.ac.id