그리디 알고리즘
눈앞의 이익만 우선 추구하는 알고리즘을 총칭한다. 최적해를 찾을 수 있으면 찾지만, 없다면 그런대로 괜찮은 해를 찾아내는 것이 목표다. 이 때문에 대부분 최적해를 보장하지 못하지만 드물게 최적해를 보장하는 경우도 있다.
그리디 알고리즘으로 최적해가 보장되는 않는 예는 다음과 같다.
- 이진트리 최적합 경로 찾기
- 동전 바꾸기
- 배낭 문제
최적해가 보장되는 예는 다음과 같다.
- 최소 신장 트리 : prim, kruskal
- 최단 경로 : 다익스트라
- 회의실 배정 문제
여기서 몇가지를 뽑아서 설명하겠다.
동전 바꾸기
동전을 모아서 특정 액수를 만들되 동전의 개수를 최소로 하는 문제다.
다만 이 문제는 모든 동전의 액면이 일반적인 화폐의 유통과 같았을 때, 즉 500원, 100원, 50원, 10원일 때 그리디 알고리즘으로 인한 최적해가 보장된다.
하지만 그렇지 않은 경우엔, 그리디 알고리즘으로 최적해가 보장되지 않는다.
배낭 문제
넣을 수 있는 무게에 상한이 있는 배낭에 가치가 제각각인 물건들을 넣고 배낭에 넣은 물건의 총 가치가 최대가 되도록 하는 문제다. 그리디 알고리즘에서는 무게 당 가치가 가장 큰 물건부터 넣는다. 다만 이렇게만 하면 최적해가 보장되지 않고 물건을 잘라서 넣는다는 가정 하에 최적해를 보장할 수 있다.
최소 신장 트리
프림과 크루스칼 알고리즘으로, 최적해를 보장한다.
Prim(G,r){ //정점 r에서 시작, 최소신장트리를 구함
S<-Q; //정점 집합
T<-R; //간선 집합
while(S != V){
S에서 V-S를 연결하는 간선들 중 최소 길이인 x,y를 찾는다. //그리디한 부분이다.
간선 (x,y)를 T에 포함시킴;
정점 y를 집합 S에 포함시킴;
}
}
728x90
반응형
'기록 > 알고리즘' 카테고리의 다른 글
알고리즘(17) - NP-완비 (0) | 2023.06.09 |
---|---|
알고리즘(16) - 문자열 매칭 (0) | 2023.06.08 |
알고리즘(14) - 그래프 (0) | 2023.05.24 |
알고리즘(13) - 동적 프로그래밍 dynamic programming (0) | 2023.05.17 |
알고리즘(12) - 집합의 처리 (4) | 2023.05.08 |