Greedy Search 알고리즘은 결정의 장기적인 영향을 고려하지 않고 항상 각 단계에서 사용 가능한 최상의 옵션을 선택하는 문제 해결 방식입니다. 전역적으로 최적의 솔루션을 찾는 것을 보장하지는 않지만 이 방법은 종종 빠르게 작동하고 구현하기 쉽습니다.
작동 방식
- 초기화: 비어 있거나 초기 솔루션으로 시작합니다.
- 로컬 최적 선택: 각 단계에서 목적 함수 또는 정의된 기준을 기반으로 로컬 최적 선택을 선택합니다.
- 선택 적용: 현재 솔루션에 최적의 선택을 적용합니다.
- 반복: 더 나은 로컬 선택을 할 수 없을 때까지 2-4단계를 반복합니다.
예: Knapsack Problem
Knapsack Problem 최대 무게가 있는 배낭과 무게와 값이 있는 항목 목록이 있는 를 고려하십시오. 목표는 배낭의 총 가치를 최대화하는 항목을 선택하는 것입니다. 이 문제에 대한 Greedy Search 접근 방식은 가장 높은 가치 대 무게 비율을 기준으로 항목을 선택하는 것입니다.
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;
}
이 예제에서는 Greedy Search 접근 방식을 사용하여 Knapsack Problem. 가치 대 무게 비율이 내림차순으로 항목을 정렬하고 배낭의 무게 제한에 맞는 가장 높은 비율의 항목을 선택합니다.