본문 바로가기
Algorithm

[Algorithm] Greedy Algorithm (그리디 알고리즘)

by graygreat 2021. 1. 4.
728x90
반응형

그리디(Greedy) 알고리즘은 '당장 눈 앞에 보이는 최적의 상황만을 쫓는 알고리즘'이다.

그리디 알고리즘은 항상 최적의 결과를 도출하는 것은 아니지만 어느 정도 최적의 해에 근사한 값을 빠르게 구할 수 있다는 장점이 있다. 또한 '특정한 상황'에 있어서는 그리디 알고리즘이 최적의 해를 보장할 수도 있다.

 

그리디 알고리즘의 대표적인 예는 거스름 돈 문제이다.

853원의 거스름돈을 주어야 할 때 1원짜리 853개를 주는 것보다 500원 1개, 100원 3개, 50원 1개, 1원 3개를 주는 것이 더 효율적이다. 따라서 이런 경우 '무조건 더 큰 화폐 단위부터 거슬러 준다'는 알고리즘을 사용하면 최적의 해를 보장할 수 있다.

 

그리디 알고리즘은 무조건 큰 경우, 작은 경우, 긴 경우, 짧은 경우와 같이 극단적인 문제에 접근한다는 점에서 정렬 기법이 사용되는 경우가 많다.

 

아래의 그림을 보자.

greedy algorithm 그림 (출처: https://levelup.gitconnected.com/greedy-algorithms-2999d1367828)

최단 경로를 찾기 위해 그리디 알고리즘을 사용하여 결과를 얻는다면, A-C-G-I-J(19)의 결과가 나올 것이다. 하지만 위 알고리즘에서 최적의 해는 A-B-E-H-J(12)이다.

 

이처럼 그리디 알고리즘으로 최적의 해를 보장하는 경우도 많으나 그렇지 못한 경우가 더 많다.

그럴 때는 다이나믹 프로그래밍(Dynamic Programming) 등의 기타 알고리즘 기법을 적용해야 하기도 한다.


reference

www.youtube.com/watch?v=PNPIk3hc6ic

반응형

'Algorithm' 카테고리의 다른 글

Dynamic Programming  (0) 2021.01.18
Brute Force & Back Tracking  (0) 2021.01.13
[Algorithm] BFS  (0) 2021.01.08
[Algorithm] DFS  (0) 2021.01.08
[Algorithm] 멀티탭 스케줄링 (백준 1931)  (0) 2021.01.07

댓글