[알고리즘] 그리디 알고리즘 (Greedy Algorithm)

헛헛한꿔녀니·2023년 12월 5일
0

알고리즘

목록 보기
7/9
post-thumbnail

💡 그리디 알고리즘 (Greedy Algorithm)

👉 매 순간 현재 기준으로 최선의 답을 선택해 나가는 기법

  • 빠르게 근사치를 계산할 수 있다.
  • 결과적으로는 최적해가 아닐 수도 있다.

💡 그리디 알고리즘 예시

👉 Activity Selection Problem

  • N개의 활동과 각 활동의 시작/종료 시간이 주어졌을 때, 한 사람이 최대한 많이 할 수 있는 활동의 수 구하기
ActivityABCDE
시작14246
종료553710
  • 종료 시간 기준으로 정렬한다.
  • 먼저 종료되는 활동 순, 겹치지 않는 순으로 선택한다.
ActivityCABDE
시작21446
종료355710
  1. 가장 먼저 종료되는 C
  2. A는 시작시간이 이미 지나버렸으므로 패스
  3. 그 다음 일찍 종료되는 B
  4. D도 이미 시작했으므로 패스
  5. 마지막으로 남은 E를 선택하면 총 3가지 활동을 할 수 있게된다.

👉 거스름돈 (동전의 최소 개수)

  1. case 1
  • 잔돈 : 890원
  • 동전의 종류 : 10, 50, 100, 500
    -> 큰 동전부터 계산한다.
잔돈5001005010
개수1314
  1. case 2 (그리디 알고리즘을 적용할 수 없는 경우)
  • 잔돈 : 890원

  • 동전의 종류 : 10, 50, 100, 400, 500
    -> 큰 동전부터 계산한다.

  • 그리디 알고리즘 결과

    잔돈5004001005010
    개수10314
  • 우리가 원하는 정답 (동전의 최소 개수)

    잔돈5004001005010
    개수02014

👉 그리디 알고리즘 적용 조건

  • 그리디 알고리즘은 빠르지만 최적해를 보장하지는 못한다.
  • 아래 두 가지 조건에 해당하는 경우 적용할 수 있다.
    • 탐욕적 선택 특성 (Greedy choice property) : 지금 선택이 다음 선택에 영향을 주지 않는다.
    • 최적 부분 구조 (Optimal substructure) : 전체 문제의 최적해는 부분 문제의 최적해로 이루어진다.

0개의 댓글