ANALISIS ALGORITMA
Diajukan untuk memenuhi tugas Mata Kuliah Analisis Algoritma yang di ampuh
dosen: Dwikeu Novi Asrika, S.kom,M.kom
Disusun oleh :
Kelas IF -8/S1/V
TEKNIK INFORMATIKA
BANDUNG
A. Pengertian Algoritma Greedy
Algoritma greedy adalah algoritma yang menggunakan pendekatan penyelesaian masalah dengan mencari
nilai maksimum sementara pada setiap langkahnya. Istilah maksimum sementara ini dikenal dengan
istilah lokal maksimum. Pada kebanyakan kasus, algoritma greedy tidak akan menghasilkan solusi yang
paling optimal, algoritma greedy biasanya memberikan solusi yang mendekati optimum dalam waktu
yang cukup, dan juga hanya memiliki dua optimasi yaitu maksimasi dan minimasi. Algoritma greedy
memiliki prinsip take what you can get now, dan memiliki karakteristik mengambil pilihan terbaik tanpa
memikirkan konsekuensi ke depan, berharap bahwa dengan memilih optimum lokal di setiap langkah,
akan berakhir pada optimum global. Greedy memiliki fungsionalitas dasar yaitu fungsi untuk melakukan
penelusuran masalah, untuk memilih lokal maksimum dari pilihan-pilihan yang ada tiap langkahnya,
untuk mengisikan local maksimum ke solusi keseluruhan, dan untuk menentukan apakah solusi telah
didapatkan
Algoritma greedy memiliki elemen elemen sebagai berikut :
1. Himpunan kandidat, C.
2. Himpunan solusi, S.
5. Fungsi obyektif.
Algoritma greedy melibatkan pencarian sebuah himpunan bagian(S) dari himpunan kandidat(C) . Dalam
hal ini , S harus memenuhin beberapa kriteria yang ditentukan, yaitu menyatakan suatu solusi dan S
dioptimasi oleh fungsi obyektif.
Algoritma greedy disusun oleh elemen-elemen berikut:
Himpunan kandidat.
Berisi elemen-elemen pembentuk solusi.
Himpunan solusi
Berisi kandidat-kandidat yang terpilih sebagai solusi persoalan.
B. Contoh Kasus
Persoalan: Sebuah server (dapat berupa processor, pompa, kasir di bank, dll) mempunyai n pelanggan
(customer, client) yang harus dilayani. Waktu pelayanan untuk setiap pelanggan sudah ditetapkan
sebelumnya, yaitu pelanggan i membutuhkan waktu ti. Kita ingin meminimumkan total waktu di dalam
sistem,
Karena jumlah pelanggan adalah tetap, meminimumkan waktu di dalam sistem ekivalen dengan
meminimumkan waktu rata-rata.
t1 = 5, t2 = 10, t3 = 3,
Urutan T
=================================
1, 2, 3: 5 + (5 + 10) + (5 + 10 + 3 ) = 38
1, 3, 2: 5 + (5 + 3) + (5 + 3 + 10) = 31
2, 1, 3: 10 + (10 + 5) + (10 + 5 + 3) = 43
2, 3, 1: 10 + (10 + 3) + (10 + 3 + 5) = 41
3, 1, 2: 3 + (3 + 5) + (3 + 5 + 10) = 29 ¬ (optimal)
3, 2, 1: 3 + (3 + 10) + (3 + 10 + 5) = 34
Strategi greedy untuk memilih pelanggan berikutnya adalah:
Pada setiap langkah, masukkan pelanggan yang membutuhkan waktu pelayanan terkecil
di antara pelanggan lain yang belum dilayani.
Agar proses pemilihan pelanggan berikutnya optimal, maka perlu mengurutkan waktu
pelayanan seluruh pelanggan dalam urutan yang menaik. Jika waktu pengurutan tidak
dihitung, maka kompleksitas algoritma greedy untuk masalah minimisasi waktu di
dalam sistem adalah O(n).
C. Algoritma
procedure PenjadwalanPelanggan(input n:integer)
{ Mencetak informasi deretan pelanggan yang akan diproses oleh server tunggal
Masukan: n pelangan, setiap pelanggan dinomori 1, 2, …, n
Keluaran: urutan pelanggan yang dilayani
}
Deklarasi
i : integer
Algoritma:
{pelanggan 1, 2, ..., n sudah diurut menaik berdasarkan ti}
for i¬1 to n do
write(‘Pelanggan ‘, i, ‘ dilayani!’)
endfor
Pseucode
Contoh Algoritma Greedy Pada C++ Dengan Contoh Aplikasi Penukaran Koin Logam
#include
#include
#define size 99
void sort(int[], int);
main()
{
int x[size],i,n,uang,hasil[size];
printf("\n Banyak Koin :");
scanf("%d", &n);
printf("\n \n Masukkan Jenis Koin : \n");
for(i=1;i<=n;i++)
{
scanf("%d", &x[i]);
}
sort(x,n);
printf("\n Koin yang Tersedia :");
for(i=1;i<=n;i++)
{
printf("%d", x[i]);
printf("\n");
}
printf("\n");
printf("\n Masukkan Nilai yang Dipecah :");
scanf("%d", &uang);
printf("\n");
for(i=1;i<=n;i++)
{
hasil[i]=uang/x[i];
uang=uang%x[i];
}
for(i=1;i<=n;i++)
{
printf("Keping %d", x[i]);
printf("-an sebanyak : %d", hasil[i]);
printf("\n \n");
}
getch();
return 0;
}
for(j=0;j<=siz-2;j++)
{
if(a[j+1] < a[j+2])
{
hold=a[j+1];
a[j+1]=a[j+2];
a[j+2]=hold;
}
}
}
}
Kontribusi
Muhamad Rizki Ramadhan Membuat bagian pengertian
Link Video
https://drive.google.com/drive/folders/1tookInmUeIbyb-
MtwLeEqyIIQTMBYo3W?usp=sharing