그리드 알고르즘이란?
매 선택에서 최적이라는 생각되는 값을 또는 지금 이 순간 당장 최적인 답을 선택하는 알고리즘입니다.
그러나 최선의 답을 선택함에도 불구하고, 전체적인 부분을 봤을 때는 최선이 아닐 수 있습니다.
전체적인 부분으로 최선이 아니라는 말은 아래 노드를 보며 설명하도록 하겠습니다.
아래의 그림은 노드의 숫자 합이 가장 큰 선택을 하였습니다.
왼쪽 노드의 경우 일반적으로 전체적인 부분을 봤을 때는 1-2-99가 제일 합이 크기 때문에 최선의 선택이나
오른쪽 노드의 경우 지금 이 순간 당장 최적의 답을 선택한다면 1-10-40 입니다.
그렇기 때문에 매 순간마다 최선의 답을 선택 했지만 전체적인 부분을 봤을 때는 최선이 아니라는 말입니다.
그리드 알고리즘을 사용하는 이유?
N번 그리드를 반복해서 수행 한다면 O(n)이라는 시간 복잡도가 나옵니다.
즉, 그리드의 큰 장점은 계산 속도가 빠르다는 것입니다.
몇몇 문제에서는 최적해를 빠르게 찾아 낼 수 있는데 그리디 알고리즘을 사용할 수 있는 문제는 두가지 속성을 만족해야합니다.
1. 탐욕 선택 속성(greedy choice property)
-> 한번의 선택이 다음 선택에는 전혀 무관한 값이어야 한다. ( 앞의 선택이 이후의 선택에 영향을 주면 안된다. )
2. 최적 부분 구조(optimal substructure)
-> 매 순간의 최적해가 문제에 대한 최적해여야 한다. ( 문제 전체에 대한 최적해가 부분 문제에 대해서도 역시 최적해가 된다.)
예제 문제 및 풀이
https://bokhead.tistory.com/27
https://bokhead.tistory.com/26
https://bokhead.tistory.com/33
https://bokhead.tistory.com/32
2839, 1026 작성중
참고 자료