일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- HTML #CSS
- 컴퓨터공학 #Java #자바 #클래스 #객체 #인스턴스
- 컴퓨터공학 #c #c언어 #문자열입력
- BOJ #컴퓨터공학 #C++ #알고리즘 #자료구조
- 컴퓨터공학 #자료구조 #스택 #c++ #알고리즘 #백준문제풀이
- 잔
- Today
- Total
영벨롭 개발 일지
[알고리즘]그리디 알고리즘 Greedy Algorithm 본문
[ 그리디 알고리즘 Greedy algorithm ]
그리디 알고리즘(greedy algorithm)은 매 단계에서 '가장 좋아보이는' 해답을 선택하는 알고리즘으로 지역적인 최적의 해결 방법으로부터 전역적인 최적의 해결 방법을 구성하는 방식입니다.
즉, 당장 눈 앞에 보이는 최적의 상황만을 쫓는 가장 단순한 형태의 알고리즘입니다. 때문에 욕심쟁이 또는 탐욕 알고리즘이라고 불리기도 합니다.
★ 그리디 알고리즘을 사용하기 적합한지 판단하는 기준
1. 최적 부분 구조(optimal substructure) 속성
: 주어진 문제 P에 대한 최적의 솔루션이 P의 부분 문제들의 최적의 솔루션으로 구성될 경우, 문제 P가 최적의 부분 구조를 갖는다고 말합니다.
2. 그리디 선택(greedy choice) 속성
: 주어진 문제 P에 대한 지역적 최적 솔루션을 반복적으로 선택하여 전체 최적 솔루션을 구할 수 있는 경우, 문제 P가 그리디 선택 속성을 갖는다고 말합니다.
★ 그리디 알고리즘 vs 동적 계획법
그리디 알고리즘은 빠르게 해를 찾을 수 있다는 장점이 있는 반면, 그 해가 항상 최적의 해라는 보장을 할 수 없습니다.
동적 계획법은 모든 방법을 일일이 검토하기 때문에 항상 최적의 해를 구할 수 있는 반면, 그만큼 시간이 오래 걸린다는 단점이 있습니다.
그리디 알고리즘 | 동적 계획법 |
빠름 | 느림 |
항상 최적해 X | 항상 최적해 O |
다음 그림에서 그리디를 사용하여 최소값을 구할 때의 해와 실제 최적해의 차이점을 볼 수 있습니다.
https://iridescent-zeal.tistory.com/16?category=1261295
★ 그리디 알고리즘의 대표적인 문제
1. 거스름돈 문제
거슬러줘야 할 돈으 N원일 때, 1000원 500원 100원 50원 10원으로 거슬러 줄 수 있는 경우 중, 화폐의 개수가 가장 적은 경우를 구하는 문제입니다.
가장 적은 양의 화폐를 건내주는 것이 가장 편하므로 거스름돈 문제에서는 그리디 알고리즘을 통해 큰 단위의 돈부터 생각합니다.
2. 최단 작업 우선 스케줄링 shortest-job-first scheduling
은행 창구 대기열에 N명의 사람이 기다리고 있을 때, 이들은 서로 일 처리에 필요한 시간이 다릅니다.
이때 평균 대기 시간을 줄이기 위해서는 일 처리에 걸리는 시간이 짧은 사람일 수록 먼저 은행 업무를 보게 하면 평균 대기 시간을 줄일 수 있습니다.
3. 분할 가능 배낭 문제 factional knapsack problem
가방의 최대 무게가 T를 넘지 않도록 가방에 넣는 물건들의 가격 합이 최대가 되도록 물건을 선택하는 문제입니다.
'분할이 가능한' 문제이므로 주어진 물건을 원하는 형태로 얼마든지 분할할 수 있고, 각 물건의 일부분만을 배낭에 담을 수 있다고 가정합니다.
각 물건을 단위 무게당 가격을 기준으로 정렬하고, 그리디 방식에 따라 단위 무게당 가격이 높은 순서로 물건을 선택합니다.
'CS > 알고리즘' 카테고리의 다른 글
[알고리즘]MST 최소 신장 트리 알고리즘 - Kruskal & Prim (0) | 2022.06.09 |
---|---|
[알고리즘]분할정복을 이용한 정렬 알고리즘 - 병합 정렬 & 쾌속 정렬 (0) | 2022.05.06 |
[알고리즘]이진 탐색 Binary Search 알고리즘 (0) | 2022.05.04 |
[알고리즘]브루트 포스 알고리즘, Brute Force Algorithm (0) | 2022.03.18 |
[알고리즘]랜덤 미로 생성 알고리즘: 엘러(Eller)의 알고리즘 (0) | 2022.03.07 |