공부

탐욕법 (greedy algorithms)

snowfield 2020. 4. 12. 21:32

정의

  • 탐욕법은 문제를 해결하는 과정에서 그 순간 마다 최적의 결정을 하는 방식으로 진행하여 최종 결론에 도답하는 문제 해결 방식.
  • 그 순간의 상황에서 가장 좋다고 생각하는 걸 선택하기 때문에 가장 좋은 결과를 보장하는 것은 아니다.
  • 동적 프로그래밍 사용 시 지나치게 많은 일을 한다는 것에서 착안하여 고안된 알고리즘
    • 동적 프로그래밍을 대체하는 것은 아니며, 같이 쓰이며 보완하는 개념
  • 예시 사진

이 그림과 같이 실질적으로 순간의 상황마다 최적의 값을 구하는 그리디 알고리즘으로 따라가보면 11의 값을 얻게 되지만, 실제의 최적의 답은 99이다. 이와 같이 가장 좋은 결과를 보장하는 것이 아님을 알 수 있다.

 

활용되는 문제

  • 활동 선택 문제
    • 각각의 활동들은 시작시간과 종료시간이 있다.
    • 한 사람이 최대한 많이 할 수 있는 액티비티의 수와 액티비티의 종류를 구하는 것이다.
    • 직관적으로 생각하면 활동들이 빨리 끝나는 걸 고르면 된다.
  • 분할 가능 배낭 문제
    • 물건이 무거울 경우 쪼개 넣을 수 있다.
    • 즉, 무게가 초과할 것 같으면 물건을 쪼개서 일부만 넣을 수 있다.
    • 부피 (또는 무게) 대비 가치가 높은 물건들부터 담으면 되기 때문에 탐욕 알고리즘에 속한다.

 

그리디 알고리즘을 사용한 알고리즘

  • 프림 알고리즘
  • 다익스트라 알고리즘

출처