탐욕 알고리즘은 최적해를 구하는데 사용되는 근시안적인 방법으로, 현재 상황에서 가장 좋아보이는 선택을 하며 답을 찾아가는 알고리즘
입니다. 각 선택의 시점에서 이루어지는 결정은 지역적으로 최적이라고 판단되는 선택을 하는 것이 특징입니다.
탐욕 알고리즘은 대부분의 경우 최적해를 보장하지는 않습니다. 하지만 경우에 따라서는 최적해를 구할 수 있는데, 이를 풀이하는 문제들은 탐욕 알고리즘으로 푸는 것이 바람직합니다. 또한, 탐욕 알고리즘은 다른 알고리즘에 비해서 빠른 속도를 보이기도 합니다.
탐욕 알고리즘의 기본적인 동작 과정은 다음과 같습니다.
최적해(Optimal solution)
주어진 제약 조건(constraints)에서 가능한 모든 Solution들 중에서, 가장 좋은 Solution를 의미합니다.
function knapsack(items, capacity) {
const n = items.length;
let totalValue = 0;
let totalWeight = 0;
for (let i = 0; i < n; i++) {
const [value, weight] = items[i];
const remainingCapacity = capacity - totalWeight;
if (weight <= remainingCapacity) {
totalValue += value;
totalWeight += weight;
} else {
const fraction = remainingCapacity / weight;
totalValue += fraction * value;
totalWeight += fraction * weight;
break;
}
}
return totalValue.toFixed(2);
}
const items = [
[60, 10],
[100, 20],
[120, 30]
];
const capacity = 50;
console.log(knapsack(items, capacity)); // Output: 240.00