반응형
그리디 알고리즘은 원하는 답을 여러 개의 조각으로 쪼개고, 각 단계마다 답의 한 부분을 만들어가는 방식이다.
이는 완전 탐색이나 동적 계획법과 유사하지만 각 단계마다 지금 당장 가장 좋은 방법만 선택한다.
즉 이 방식은 지금의 선택이 앞으로 남은 선택들에 어떤 영향을 끼칠지는 고려하지 않는다.
이렇게 문제를 해결하는 경우 최적해를 찾지못하는 경우가 많아진다.
그럼에도 그리디 알고리즘이 사용되는 경우는 아래 두 가지가 있다.
1) 그리디 알고리즘을 사용해도 항상 최적해를 구할 수 있느 문제를 만난 경우, 이는 동적 계획법보다 수행시간이 훨씬 빠르다.
2) 시간이나 공간적 제약으로 인해 다른 방식으로 최적해를 찾기 힘든 경우 대신 적당한 근사해를 찾는 것으로 타협할 수 있다. 이때 그리디 알고리즘은 최적은 아니나 임의의 답 보다는 좋은 답을 구하는 용도로 유용하다.
알고리즘의 정당성 증명
1) 탐욕적 선택 속성
동적 계획법처럼 답의 모든 부분을 고려하지 않고 탐욕적으로만 선택하더라도 최적해를 구할 수 있다는 것이다.
2)최적 부분 구조
항상 최적의 선택만을 내려서 전체 문제의 최적해를 얻을 수 있음을 보여야 한다.
출처: 알고리즘 문제해결 전략(구종만)
728x90
반응형
'알고리즘 > 알고리즘 이론' 카테고리의 다른 글
[알고리즘] 너비 우선 탐색 (BFS) (0) | 2021.04.06 |
---|---|
[알고리즘] 다이나믹 프로그래밍 (DP) (0) | 2021.02.18 |
[알고리즘] 깊이 우선 탐색 (DFS) (0) | 2021.02.08 |
[알고리즘] 다익스트라(Dijkstra)의 최단경로 알고리즘 (0) | 2021.02.01 |
[C++] 코딩테스트 준비를 위한 C++ : 표준라이브러리(stl) (4) | 2021.01.29 |