이것저것

Greedy Algorithm 본문

Algorithm

Greedy Algorithm

nays111 2021. 1. 7. 00:51

매 순간 최선의 경우만을 골라간다 (나중은 생각하지 않는다!)

동전 거스름돈 문제

  • 10,50,100,500 원 동전들을 무한하게 갖고 있다.
  • 손님에게 800원을 거슬러주려고 할 때, 동전을 최소한으로 주는 방법은?

⇒ 금액을 큰 것부터 주면 좋다. (800 - 500 - 100 - 100 -100) Greedy 이다.

  • 100, 400, 500 원 동전들을 무한하게 갖고 있다.
  • 손님에게 800원을 거슬러 주려고 할 때, 동전을 최소한으로 주는 방법은?

⇒ Greedy Algorithm이 먹히지 않는다. (400+400 = 800, 동전 두개씀)

문제가 그리디 문제인지 판별하는 것이 어렵다!

정당성 증명 (두 가지 조건 만족하면 Greedy)

1. 탐욕적 선택 속성

모든 경우를 볼 필요없이 항상 최선의 경우만 골라가면 최적해라는 것을 보인다. 탐욕적으로 선택할 때, "손해" 볼 일이 없다.

2. 최적 부분 구조

부분 문제의 최적해에서 전체 문제의 최적해를 만들 수 있다. (DP 처럼)

대부분의 경우 너무 당연해서 쉽고 직관적이다.

이전에 했던 선택이 후의 선택에 영향을 끼치면 탐욕법이 성립은 안한다고 알고 있습니다.

정리

  • 항상 그때그때마다 최선의 경우만 탐욕적으로 쫓는 알고리즘
  • 정말 이 문제가 그리디로 풀릴지 신중히 판단하자.
    • 반례가 없을까 고민
    • 공부할 때는 문제마다 증명해봐야 도움이 된다.
    • 실전에서는 시간이 부족할테니 엄밀한 증명은 힘듦

'Algorithm' 카테고리의 다른 글

Set / Map  (0) 2021.01.08
Priority Queue (우선순위큐)  (0) 2021.01.08
소수 (에라토스테네스의 체)  (0) 2021.01.07
유클리드 호제법  (0) 2021.01.07
Brute force  (0) 2021.01.07
Comments