알고리즘 정리

그리디(Greedy) 알고리즘

쿠쿠s 2022. 1. 25. 11:19

 

 

그리디 알고리즘은 최적해를 구하는 데에 사용되는 근사적인 방법으로,  매 선택에서 그 순간에 가장 최적이라 생각되는것을 선택하여 결과에 도달하는 방법입니다. 매 순간 가장 최적을 선택하기 때문에 현재 상황의 선택이 나중에 미칠 영향은 고려하지 않습니다. 그래서 결과를 만들었다고 해서 그것이 최적이라는 보장이 없습니다.

하지만 이 알고리즘을 적용할 수 있는 문제들은 지역적으로, 전역적으로 최적인 문제입니다.

 

 

 

지역적으로 전역적으로 무슨말인지 헷갈리시다면 위 그림을 보시면 바로 이해가 가능합니다.

 

 

왼쪽 그림은 최소값을 찾는다고 가정했을때 지역적으로, 전역적으로 최적인 답을 만족하는 그래프의 형태이고

오른쪽 그림은 지역적으로는 최적인 답을 찾을 수 있지만, 전역적으로는 최적인 답이 아닙니다.

그래서 문제를 접하면 왼쪽그래프 형태와 같이 지역적,전역적으로 최적인 문제인가, 현재 상황에서 최적의 답만 선택해도 풀 수 있는지 파악하셔야 합니다.

 

그리디 알고리즘으로 푸는 문제는 대부분 탐욕스런 선택 특성(greedy choice property)최적 부분 구조 조건(optimal substructure)이라는 두가지 조건이 만족됩니다. 탐욕스런 선택 조건은 앞의 선택이 미래의 선택에 영향을 주지 않는것이며, 최적 부분 구조 조건은 문제에 대한 최적해가 부분 문제에 대해서도 역시 최적해라는 것 입니다.

 

또 이 알고리즘은 기준에 따라 좋은 것을 선택하는 알고리즘이므로 문제를 접할 때 '큰 순서, 작은 순서'와 같은 기준을 문제에 내포시킵니다. 그래서 정렬 알고리즘과 주로 짝을 맞추어서 나오기 때문에 정렬하는 다양한 방법(Comparator, 우선순위 큐 등) 들을 공부하시면 문제 푸는데 도움이 될 겁니다.

 

 

 

 

 

참고 - 위키백과