탐욕 알고리즘 (Greedy Algorithm)

Mixer·2022년 6월 6일
0

Greedy Algorithm

매 순간 최적인 경우를 찾아가면서 최적의 답을 찾아 내는 알고리즘

  • 탐욕 알고리즘은 최적해를 구하는 데에 사용되는 근사적인 방법이다
  • 탐욕 알고리즘은 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택한다.
  • 순간마다 선택은 그 순간에 대해 지역적으로는 최적이지만, 그 선택들을 계속 수집하여 최종적(전역적)인 해답을 만들었다고 해서, 그것이 최적이라는 보장은 없다.
  • 탐욕 알고리즘을 적용할 수 있는 문제들을 지역적으로 최적이면서 전역적으로 최적인 문제들이다.

탐욕 알고리즘의 조건

탐욕 알고리즘은 DFS/BFS, DP들 보다 빠른 속도때문에 적용할 수 있다면 가장 빠르게 결과를 얻을 수 있다.

그러면 빠르게 탐욕 알고리즘이 적용 가능한지 파악하는 것이 중요할텐데, 탐욕 알고리즘을 적용하려면
탐욕스런 선택 (Greedy Choice Property)최적 부분 구조 조건(Optimal Substructure) 이라는 두 조건을 만족 시켜야한다.

최적 부분 구조 조건(Optimal Substructure)

최적 부분 구조 조건(Optimal Substructure)은 동적 계획법(Dynamic Programming) 에서 작은 부분 문제에서 구한 최적의 답으로 합쳐진 큰 문제의 최적의 답을 구할 수 있어야 한다는 것

거스름돈 문제
동전은 10원,50원,100원,500원

물건 가격은 4,270원

손님이 5,000원을 냈을때
가장 적은 개수의 동전을 거슬러 줘야할때를 가정
최소 동전 개수를 구해라
  • 500원 : 1개

  • 100원 : 2개

  • 50원 : 0개

  • 10원 : 3개

  • 최소 동전 6개

탐욕스런 선택 조건 (Greedy Choice Property)

앞의 선택이 이후의 선택에 영향을 주지 않는다는 것이다

  • 730원

    • 최적의 선택 500원 * 1개 차감
  • 230원

    • 최적의 선택 100원 * 2개 차감
  • 30원

    • 최적의 선택 10원 * 3개 차감

    최소 동전은 6개

    위 과정에서 동전을 고르는 행위는 현재 남은 금액에 따라 선택을 하기 때문에,
    내가 500원을 선택한 앞의 행위는 다음 선택에서 100원을 선택하는 것에 영향을 주지 않는다.

profile
Minthug'life

0개의 댓글

관련 채용 정보