Study/Today_I_Learned

[알고리즘] 탐욕 알고리즘 Greedy algorithm

RUMJIE 럼지 2022. 8. 31. 15:22
728x90

1. 그리디 알고리즘이란?

 매순간 최적이라고 생각하는 경우를 선택하는 알고리즘입니다. 'greedy' 혹은 탐욕 이라고 이름이 붙은 이유는 전체적인 맥락에서의 최적과 각 순간(locally)에서 최적이라고 생각되는 경우가 다를 수도 있기 때문입니다. 그리디 알고리즘에서는 지나간 선택 중에서 혹시 더 좋은 경우의 수가 있었는지 돌아보지 않는다는 점이 동적 프로그래밍과 다른 점입니다.

2. 한계

'각 단계'에서의 최선을 선택하기 때문에 반드시 최적의 해를 구할 수 있는 것은 아닙니다.  따라서 overall optimal option 보다는 최적에 가장 가까운 값을 구하기 위해 사용하는 알고리즘입니다.

 최적의 답을 구해주지 않는다면 왜 그리디 알고리즘을 활용할까요? 그 이유는 시간 절약 때문입니다. 더 적은 시간을 들여 정답에 가까운 값을 구하고자 할 때 활용할 수 있겠습니다. 

3. Greedy vs Divide and Conquer vs Dynamic programming

Greedy Divide & Conquer Dynamic Programming
각 순간에서의 최선의 선택지를 고름으로써 최적화 더 간단한 문제의 서브문제로 나눔으로써 문제를 풀기 위해 multi-threading & recursion 을 활용 Divide and Conquer와 같지만 계산을 반복하지 않기 위해 서브문제의 각 답을 caching 
항상 최적의 해를 찾지는 않지만, 매우 빠름 항상 최적의 해를 찾을 수 있지만 그리디보다 시간이 오래 걸림  항상 최적의 해를 찾을 수 있지만 적은 데이터셋에서는 소용 없음
메모리를 거의 사용하지 않음 재귀 호출을 기억하기 위해 메모리 사용 기억 및 테이블화에 많은 메모리 사용

참고: https://skerritt.blog/greedy-algorithms/

4. 문제풀이

백준 1931번, 11399번 on Github
extra problems: 백준 그리디 알고리즘 단계, 프로그래머스 그리디   

 

728x90