Hai, Rawwrvers! Sebelum mulai menjelaskan. Liatin dulu tuuuh apa kata pa Steve, suruh...π€belajar...π΅π«programming...π€§ceunah euuuyyyyyπ€. Jadi kita semua harus semangat yaa ngerjain tugas nyaππ₯°
Eeeh~ hehehe... Kalau ngomongin dunia pemrograman, udah pasti ga jauh-jauh dari kata "ALGORITMA" , yeee kan? Nah, kali ini aku mau ajak rawrvers kenalan sama algoritma yang satu ini, namanya algoritma Greedy. Algoritma ini emang terkenal simpel banget (katanya sihπ€«), soalnya dia selalu pilih solusi yang keliatan paling oke di depan mata, tanpa mikir panjang ke depannya.
eiittss....Tapi, tunggu duluπ! Apakah strategi yang (katanya) keliatan gampang ini selalu kasih hasil yang maksimal? Di artikel ini, kita bakal bahas tuntas tentang gimana sih cara kerja algoritma Greedy ini, kapan dan dimana rawrvers bisa pakai, dan tentunya contoh-contoh kasus biar rawrvers makin PAHAMπ€~. Rawrvers juga bakal lihat nih beberapa masalah klasik yang ternyata bisa diselesaikan cuma dengan cara yang simpel pake Greedy.
Yuk, langsung aja kita masuk ke dunia Greedyπ©π»π
PENGERTIAN
Algoritma Greedy adalah pendekatan dalam pemrograman yang memilih solusi terbaik yang tersedia saat ini, tanpa mempertimbangkan konsekuensi jangka panjang. Maksudnya, algoritma ini selalu membuat keputusan yang tampak paling baik di setiap langkah, dengan harapan keputusan tersebut akan menghasilkan solusi optimal secara keseluruhan.
Sebagai Contoh, kamu lagi main game dan tiap kali ada pilihan, kamu selalu ambil yang paling keren atau paling gampang di situasi itu juga, tanpa mikirin efek ke depannya. Jadi intinya, algoritma ini fokus ke pilihan terbaik saat ini, meski belum tentu yang terbaik buat keseluruhan.
okee singkat saja, ayo kita langsung ke contoh soal supaya makin PAHAMπ€
oke Rawrvers, ini adalah tugas di halaman 32,
saatnya menyelesaikan masalahπ©π».
Langkah-langkahnya:
- Urutkan PR berdasarkan waktu pengerjaan yang paling kecil ke besar.
- Pilih PR satu per satu dari yang memiliki waktu terkecil sampai waktu total mencapai 8 jam.
- Hitung total nilai akhir berdasarkan PR yang dipilih.
Urutkan PR berdasarkan waktu pengerjaan:
- PR D = Waktu pengerjaan 0,5 jam
- PR I = Waktu Pengerjaan 0,5 jam
- PR C = Waktu Pengerjaan 1 jam
- PR F = Waktu Pengerjaan 1 jam
- PR H = Waktu Pengerjaan 1 jam
- PR A = Waktu Pengerjaan 1.5 jam
- PR J = Waktu Pengerjaan 2 jam
- PR G = Waktu Pengerjaan 2.5 jam
- PR B = Waktu Pengerjaan 3 jam
- PR E = Waktu Pengerjaan 4 jam
Selanjutnya, rawwrvers memilih PR satu per satu hingga total waktu mencapai 8 jam:
- PR D: waktu = 0.5 jam
- PR I: waktu = 0.5 jam (total waktu = 1 jam)
- PR C: waktu = 1 jam (total waktu = 2 jam)
- PR F: waktu = 1 jam (total waktu = 3 jam)
- PR H: waktu = 1 jam (total waktu = 4 jam)
- PR A: waktu = 1.5jam (total waktu = 5.5 jam)
- PR G: waktu = 2.5 jam (total waktu = 8 jam)
nah rawwrvers, disini aku menggunakan PR G yang membutuhkan waktu 2.5 jam dan bukan menggunakan PR J yang hanya membutuhkan waktu 2 jam. Alasannya karena, kalo aku menggunakan PR J maka waktu nya bisa kurang dari 8 jam, sedangkan Cici memiliki waktu maksimum sebanyak 8 jam.
Berikut program yang akan dijalankan:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Struktur untuk menyimpan data PR
struct PR {
char name;
double time;
};
// Fungsi untuk membandingkan waktu pengerjaan PR
bool compare(PR a, PR b) {
return a.time < b.time;
}
int main() {
// Daftar PR dan waktu pengerjaannya
vector<PR> pr_tasks = {
{'A', 1.5},
{'B', 3},
{'C', 1},
{'D', 0.5},
{'E', 4},
{'F', 2},
{'G', 1.5},
{'H', 1},
{'I', 0.5},
{'J', 2.5}
};
// Waktu maksimal yang tersedia
double max_time = 8;
// Mengurutkan PR berdasarkan waktu pengerjaan dari yang terpendek
sort(pr_tasks.begin(), pr_tasks.end(), compare);
// Memilih PR yang dapat diselesaikan dalam waktu maksimal
vector<char> selected_pr;
double total_time = 0;
for (const auto& pr : pr_tasks) {
if (total_time + pr.time <= max_time) {
selected_pr.push_back(pr.name);
total_time += pr.time;
}
}
// Menampilkan hasil
cout << "PR yang dapat diselesaikan: ";
for (const auto& pr : selected_pr) {
cout << pr << " ";
}
cout << endl;
cout << "Total waktu yang digunakan: " << total_time << " jam" << endl;
return 0;
}
Menghasilkan output sebagai berikut:
Hasil Akhir:
Jadi dengan algoritma greedy, PR yang dikerjakan Cici adalah PR D, I, C, F, H, A, dan G dengan total waktu maksimum 8 jam.
Nah begitu deh rawwrvers.. cara menerapkan Algoritma Greedy dalam kehidupan sehari-hari. Semoga pembahasan ini mudah di pahami yaa oleh rawwrversπΈ.
0 Komentar