더북(TheBook)

간단히 연습 삼아 그림 1-4에 나온 8 × 8판을 트로미노로 채우는 문제를 풀어보자.

대부분의 분할 정복 알고리즘에서는 더 작은 부분 문제를 재귀적으로 푼다. 위의 예제에서처럼 부분 문제는 같은 문제의 더 작은 인스턴스를 나타내기 때문이다. 하지만 반드시 그래야만 하는 것은 아니다. 특히 이렇게 판과 관련된 문제의 경우, 주어진 판보다 작은 버전의 부분 판으로 판을 반드시 나눠야 하는 것은 아니다. 대표적인 예로 2n - 카운터 문제(2.037)와 직선 트로미노 채우기(2.078)와 같은 문제를 들 수 있다.

분할 정복 전략과 관련해 하나 더 짚고 넘어갈 것이 있다. 앞에서 배운 감소 정복을 분할 정복의 특수 케이스로 생각하는 사람이 있는데 둘은 전혀 다른 설계 전략으로 보는 것이 낫다. 둘의 가장 큰 차이점은 단계별로 풀어야 하는 부분 문제의 수다. 단계별로 만들어지는 부분 문제의 수가 분할 정복에서는 몇 개씩이지만 감소 정복에서는 한 개씩이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.