탐욕 알고리즘 Greedy Algorithm
탐욕 알고리즘이란?
- 최적화 문제를 해결하는 알고리즘으로 근시안적인 방법이다.
- 그 순간이 최적이라고 생각되는 것을 선택해 나가는 방식이다.
- 각 결정은 지역(local)적으로는 최적이나, 전체(global)적으로 봤을 때 최적이라는 보장은 없다.
대표 문제
- 동전 문제
- 배낭 문제
- 활동 선택 문제(회의실 배정)
- ...
동전 문제
Q. 어떻게 거스름돈의 개수를 최소한으로 줄일 수 있을까?
[접근방법]
그 당시 거슬러줄 수 있는 가장 큰 액수의 동전을 선택한다.
- coin = 0 이면 종료
- coin > 0 이면, coin보다 작거나 같은 동전 중 가장 큰 동전(m)을 선택
- coin = coin - m
- 1~3 반복
*그러나 이 방법은 모든 coin system에서 동작한다는 것을 보장해주지 못한다.
반례 ex) 100원, 400원, 500원 동전이 있을 때 800원을 거슬러준다면 최소 개수는?
500 | 400 | 100 | 계 | |
Greedy | 1 | 0 | 3 | 4 |
최적해 | 0 | 2 | 0 | 2 |
위 표와 같이 Greedy로 풀었을 때는 동전의 개수는 4개 이지만 최적해는 2개임을 볼 수 있다.
따라서 그리디 알고리즘이 모든 coin system에서 동작하지 못한다는 것을 알 수 있다.
활동 선택 문제
Q. 회의실은 하나고 여러 시간대의 예약이 들어왔다. 이때 최대한 많은 회의가 열릴 수 있게 선택하자
[접근방법]
종료시간이 가장 빠른 활동을 먼저 선택하자
- 종료시간이 빠른 순서로 정렬한다.
- 종료시간이 가장 빠른 활동을 선택한다.
- 선택한 활동의 종료시간보다 빠른 시작시간을 가지는 활동들은 모두 제거한다.
- 2~3을 반복한다.
'알고리즘 > 알고리즘' 카테고리의 다른 글
여러가지 비트 연산 (4) | 2021.09.30 |
---|---|
비트마스크 (0) | 2021.03.05 |
[탐색] Lower Bound와 Upper Bound (0) | 2020.08.07 |
[탐색] 이분 탐색 Binary Search (0) | 2020.08.06 |