A Greedy Search algoritmus egy olyan problémamegoldó megközelítés, amely minden lépésnél mindig az elérhető legjobb lehetőséget választja anélkül, hogy figyelembe veszi a döntés hosszú távú hatását. Bár nem garantálja a globálisan optimális megoldás megtalálását, ez a módszer gyakran gyorsan működik, és egyszerűen megvalósítható.
Hogyan működik
- Inicializálás: Kezdje üres vagy kezdeti megoldással.
- Helyi optimális választás: Minden lépésben válassza ki a helyileg optimális választást a célfüggvény vagy a meghatározott kritériumok alapján.
- Választás alkalmazása: Alkalmazza az optimális választást az aktuális megoldásra.
- Ismételje meg: Ismételje meg a 2–4. lépéseket, amíg nem lehet jobb helyi választást tenni.
Példa: Knapsack Problem
Tekintsük a Knapsack Problem, ahol van egy hátizsákunk maximális súllyal és egy listánk a súlyokkal és értékekkel. A cél az, hogy olyan elemeket válasszunk ki, amelyek maximalizálják a hátizsák összértékét. A Greedy Search megközelítés erre a problémára az, hogy a tételeket a legmagasabb érték-súly arány alapján választják ki.
Kódpélda C++ nyelven
#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;
}
Ebben a példában a Greedy Search megközelítést használjuk a Knapsack Problem. A cikkeket a csökkenő érték-tömeg arány alapján rendezzük, és a legmagasabb arányú tételeket választjuk ki, amelyek még beleférnek a hátizsák súlyhatárába.