Algoritam Greedy Search pristup je rješavanju problema koji uvijek odabire najbolju dostupnu opciju u svakom koraku bez razmatranja dugoročnog utjecaja odluke. Iako ne jamči pronalaženje globalno optimalnog rješenja, ova metoda često djeluje brzo i jednostavna je za implementaciju.
Kako radi
- Inicijalizacija: Počnite s praznim ili početnim rješenjem.
- Lokalni optimalni izbor: U svakom koraku odaberite lokalno optimalan izbor na temelju funkcije cilja ili definiranih kriterija.
- Primijeni izbor: Primijeni optimalni izbor na trenutno rješenje.
- Ponavljanje: Ponavljajte korake od 2 do 4 dok se ne može napraviti bolji lokalni izbor.
Primjer: Knapsack Problem
Razmotrimo Knapsack Problem, gdje imamo naprtnjaču s maksimalnom težinom i popis predmeta s težinama i vrijednostima. Cilj je odabrati predmete koji će maksimizirati ukupnu vrijednost u naprtnjači. Pristup Greedy Search za ovaj problem je odabir stavki na temelju najvećeg omjera vrijednosti i težine.
Primjer koda u C++
#include <iostream>
#include <vector>
#include <algorithm>
struct Item {
int weight;
int value;
};
bool compare(Item a, Item b) {
double ratioA =(double)a.value / a.weight;
double ratioB =(double)b.value / b.weight;
return ratioA > ratioB;
}
double greedyKnapsack(int maxWeight, std::vector<Item>& items) {
double totalValue = 0.0;
std::sort(items.begin(), items.end(), compare);
for(const Item& item: items) {
if(maxWeight >= item.weight) {
totalValue += item.value;
maxWeight -= item.weight;
} else {
totalValue +=(double)maxWeight / item.weight * item.value;
break;
}
}
return totalValue;
}
int main() {
int maxWeight = 10;
std::vector<Item> items = {{2, 6}, {5, 12}, {3, 8}, {7, 14}, {4, 10}};
double maxValue = greedyKnapsack(maxWeight, items);
std::cout << "Max value in knapsack: " << maxValue << std::endl;
return 0;
}
U ovom primjeru koristimo pristup Greedy Search za rješavanje Knapsack Problem. Predmete razvrstavamo na temelju opadajućeg omjera vrijednosti i težine i odabiremo predmete s najvećim omjerom koji još uvijek odgovaraju ograničenju težine naprtnjače.