Wednesday, April 25, 2018

Pengertian Algoritma Greedy, lengkap dengan Contoh Programnya-Cplus

Pengertian Algoritma Greedy, Lengkap Dengan Contoh Program- C++
Algoritma greedy merupakan jenis algoritma yang menggunakan pendekatan penyelesaian masalah dengan cara mencari nilai maksimum sementara dari setiap step atau langkahnya. Nantinya nilai maksimum sementara ini dikenal dengan istilah local maximum. 

Pada kebanyakan kasus, algoritma greedy tidak menghasilkan solusi yang sangat optimal, tetapi lagoritma greedy  memberikan solusi yang mendekati nilai optimum dalam waktu yang cukup cepat.
Greedy artinya rakus atau tamak, maksud dari rakus atau tamak ialah algorimat greedy memilih nilai yang paling besar dahulu digunakan, kemudian jika nilai terbesar sudah habis, maka nilai yang lebih kecil dibawahnya akan digunakan lagi, begitu seterusnya sampai semua solusi sudah selesai.

Biasanya didalam algoritma greedy ada yang namanya Optimation. Optimation adalah solusi yang paling cepat dan paling kecil atau pendek. Dimana biasanya ini sebagai penentu solusi mana yang akan dipakai untuk menyelesaikan suatu kasus.

Didalam kebanyakan contoh kasus dari algoritma greedy, ada yang menggunakan untuk mencari atau penukaran mata uang maupun koin, itu sebabnya penulis atau saya akan membagikan sesuai dengan judul artikel ini pengertian Algoritma Greedy, lengkap dengan contoh Program.
Diatas sudah saya terangkan mengenai pengertian atau pembahasan dari greedy dan Optimation itu sendiri. 

Perlu anda katahui program yang saya buta ini adalah  program dalam bahasa C++ yang didalamnya coding atau script ataupun perintah yang support pada Dev-c++ bukan Turbo-c++. Namun jika anda ingin menjalankannya pada turbo c++, anda harus melakukan perubahan diberbagai sisi. 

Contoh : di Dev-c++ kita menggunakan Int main () nah di Turbo-c++ harus menggunakan Void main (). 

Jadi saran saya untuk mejalankannya dengan Dev-C++, atau mungkin anda yang mahir dalam membaca jalan program, anda tinggal membaca dan memahami dari program dibawah ini dan langsung anda implementasikan didalam bahasa program apa saja dengan tidak copas, SANGAT-SANGAT DISARANKAN BRO... jadinya anda akan membuat sesuatu yang merupakan hasil kerja anda.

Namun, jika anda yang sudah kebelet untuk tugas atau semacamnya mengenai Algoritma Greedy dalam sebuah program, ya silahka copas, langusng jalankan. 

Berikut adalah program sederhana Greedy dalam bahasa C++;

Gambar hasil program greedy, yaitu penukaran koin atau mata uang

Dan dibawah ini merupakan script/coding dalam bahasa c++ untuk program seperti gambar diatas.

#include <iostream>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>

using namespace std;

void gotoxy(int x, int y){
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
void delay(unsigned int mseconds)
{
clock_t goal=mseconds+clock();
while(goal>clock());
}

int main(int argc, char** argv)
{
{system("cls");}
//deklarasi variable umum

int total=0,greedy;
int loop,koin,x,baris,tukar,sem,no,i,c,z,op;
x=1;
baris=1;

//penginputan koin
gotoxy(5,4);cout<<"Banyaknya Koin/uang Penukaran : ";cin>>koin;
int banyak[koin];
int jumlah[koin];
gotoxy(5,5);cout<<"Deret Koin/uang  : ";
for(int loop=0;loop<koin;loop++){
gotoxy(22+baris,5);cin>>banyak[loop];
baris=baris+5;
}

//pengurutan koin secara Descending (dari yang terbesar ke yang terkecil
cout<<"     Descending  : ";
{
for(int c=0 ;c<=koin;c++){
for (int d=c+1;d<=koin;d++){
if (banyak[c]<banyak[d]){
sem=banyak[c];
banyak[c]=banyak[d];
banyak[d]=sem;
}
}
}
for (int e=1;e<=koin;e++){
cout<<banyak[e]<<" ";
}
}


gotoxy(5,7);cout<<"Yang Ditukar: ";cin>>tukar;
{
i=0;
no=1;
for( z=1;z<=koin;z++){
if(banyak[z]<=tukar){
for( c=z;c<=koin;c++){
if(i<=tukar){
if((i+banyak[c])<=tukar){
i=i+banyak[c];
c=c-1;
total=total+1;
}
}

  }
jumlah[z]=total;
no=no+1;
}
{
cout<<endl;
total=0;
i=0;
}
}
 op=jumlah[1];

for (i=2;i<=koin;i++){
if (op>=jumlah[i]){
op=jumlah[i];
}
}
}
i=0;
no=1;
for( z=1;z<=koin;z++){
if(banyak[z]<=tukar){
gotoxy(5,8+z);cout<<no<<". ";
for( c=z;c<=koin;c++){
if(i<=tukar){
if((i+banyak[c])<=tukar){
i=i+banyak[c];
cout<<banyak[c]<<" ";
c=c-1;
total=total+1;
}
}

  }
jumlah[z]=total;


gotoxy(7+(tukar*2),z+8);cout<<" : "<<total<<" Koin";

if (no<2){
greedy=banyak[z];
}

no=no+1;
}
{
cout<<endl;
total=0;
i=0;
}
}
 op=jumlah[1];
for (i=2;i<=koin;i++){
if (op>=jumlah[i]){
op=jumlah[i];
}
}
cout<<"\n            Greedy adalah     : "<<greedy;
cout<<"\n            Optimation adalah : "<<op<<"  Koin";

}

Program diatas sebenarnya bisa disingkat, hanya saja ada beberapa sisi nantinya akan bentrok, karena ada beberapa perulangan yang saling ketergantungan. Jadi silahkan anda pahami, copas juga gak masalah, tapi yang penting itu cobalah untuk membuat sendiri dan menjadikan scipt atau koding diatas sebagai acuan atau refrensi saja, itu sangat membantu anda memahami sebuah bahasa program itu sendiri.

Mungkin itulah yang bisa saya bagikan, semoga ertikel ini bisa bermanfaat bagi pembaca. Terima kasih.


EmoticonEmoticon