알고리즘

탐욕알고리즘

아. 이렇게 하면 될거 같은데.. 2024. 2. 15. 00:49
728x90



탐욕 알고리즘

  • 탐욕알고리즘은 최적의 해를 구하는데 근시안 적인 방법이다
  • 여러 경우 중 하나를 선택 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식으로 진행하여 최종적인 해답에 도달한다.
  • 각 선택 시점에서 이루어지는 결정은 지역적으로는 최적이지만, 그 선택들을 계속 수집하여 최종적인 해답을 만들었다고 하여, 그것이 최적이라는 보장은 없다.

탐욕 알고리즘 프로세스

1. 선택 : 현재상황에서 최적의 해를 찾는다.

2. 실행 : 선택한 해를 실행하여 부분 해 집합 생성

3. 해 검토 : 새로운 해 집합이 문제의 조건을 만족하는지 확인

4. 해 검증 : 전체 해 집합이 주어진 문제의 최적해인지 검증


거스름돈 문제

화폐 단위 : 5000, 1000 ,500, 100, 50, 10

거스름돈 : 7680

 

위의 상황에서 최대한 적은개수의 화폐를 사용해서 거스름돈을 주는 경우

가장 큰 단위 부터 거스름 돈을 주는게 탐욕기법이 될 수 있다.

 

5000(1) : 7680 - 5000  = 2680

1000(2) : 2680 - 2000 = 680

500(1) : 680 - 500 = 180

100(1) : 180 - 100 = 80

50(1) = 80 - 50 = 30

10(3) = 30 - 30 = 0

 

5000 1개, 1000 2개, 500 1개, 100 1개, 50 1개, 10 3개  총 9개의 화폐가 나오게 된다.


배낭 짐싸기(Knapsack)

0-1 Knapsack

  • 배낭에 물건을 통째로 담아야 하는 문제
  • 물건을 쪼갤 수 없는 경우

Fractional Knapsack

  • 물건을 부분적으로 담는 것이 허용되는 문제
  • 물건을 쪼갤 수 있는 경우
0-1 Knapsack 완전검색

모든 부분집합을 구한후 부분집합의 총 무게가 W를 초과하는 집합들은 버리고, 나머지 집합에서 총 값이 가장 큰 집합을 선택할 수 있다.
물건의 개수가 증가하면 시간복잡도도 지수적으로 증가한다.

 

0-1 Knapsack 탐욕기법

값이 큰것을 먼저 넣는다 던지, 가벼운것을 먼저 넣는다 던지 조건을 부여하여 탐욕기법을 실행한다. 하지만 이러한 방식은 반례가 존재할 수 있으므로 주의가 필요 하다.

 

탐욕적 기법은 완전검색에 비교하여 반례가 존재할 수 있으므로 탐욕적 기법을 사용할때는 항상 반례를 생각해야 한다.


 

728x90
반응형