본문 바로가기

code 공부

탐욕 알고리즘(Greedy Algorithm), 매트로이드 구조(Matroid Theory)

그리디 알고리즘/탐욕 알고리즘/Greedy Algorithm

 

- 매 선택마다 바로 눈앞에 보이는 최적의 상황만을 쫓아 최적해를 도출하는 알고리즘

- 최적해를 항상 보장하는 것은 아님!

 

- 그리디 알고리즘을 만족하려면 두가지 조건을 성립해야한다.

1. 탐욕스러운 선택 조건

→ 이 선택으로 인해 전체 문제의 최적해를 반드시 도출할 수 있어야 함, 즉 앞의 선택이 이후의 선택에 영향을 주지 않는다.

2, 최적 부분 구조 조건

문제에 대한 최종 해결 방법이 부분 문제에서도 최적의 해결방법이다, 즉 전체 문제가 여러 갈래로 나뉘고, 이 갈래 마다도 최적해가 도출되어야 한다는 뜻.

 

이 두가지 조건이 모두 성립하지 않는 경우에는 그리디 알고리즘으로 최적해를 도출할 수 없음. 

 


매트로이드 구조 : 그리디 알고리즘이 최적해를 가려낼 수 있는 지 판별할 수 있는 수학적 공간

 

-  단 그리디 알고리즘을 적용할 수 있는 모든 경우를 판별하는 것은 아님

- 즉 매트로이드 구조일 경우에 그리디 알고리즘을 사용하면 최적해를 도출할 수 있지만, 반대로 그리디 알고리즘으로 풀리는 문제가 모두 매트로이드 구조는 아니라는 뜻이다.

 

매트로이드 구조 예시 : 백준 11047번 동전 0

11047번: 동전 0 (acmicpc.net)

 

11047번: 동전 0

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

www.acmicpc.net

해결 방안 : 가장 큰 동전 값 부터 카운트를 시작한다.