Algoritmul Greedy Search este o abordare de rezolvare a problemelor care alege întotdeauna cea mai bună opțiune disponibilă la fiecare pas, fără a lua în considerare impactul pe termen lung al deciziei. Deși nu garantează găsirea soluției optime la nivel global, această metodă funcționează adesea rapid și este ușor de implementat.
Cum functioneaza
- Inițializare: Începeți cu o soluție goală sau inițială.
- Alegerea optimă locală: la fiecare pas, alegeți alegerea optimă locală pe baza funcției obiective sau a criteriilor definite.
- Aplicați alegerea: Aplicați alegerea optimă soluției curente.
- Repetați: repetați pașii de la 2 la 4 până când nu se poate face o alegere locală mai bună.
Exemplu: Knapsack Problem
Luați în considerare Knapsack Problem, unde avem un rucsac cu o greutate maximă și o listă de articole cu greutăți și valori. Scopul este de a selecta articole pentru a maximiza valoarea totală din rucsac. O abordare Greedy Search pentru această problemă este de a selecta articole pe baza celui mai mare raport valoare-greutate.
Exemplu de cod în 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;
}
În acest exemplu, folosim abordarea Greedy Search pentru a rezolva problema Knapsack Problem. Sortăm articolele în funcție de raportul descendent valoare-greutate și selectăm articolele cu cel mai mare raport care încă se încadrează în limita de greutate a rucsacului.