분할정복 (Divide and Conquer)

컴퓨터과학·AI
한 줄 정의: 큰 문제를 풀기 쉬운 작은 문제들로 쪼갠 뒤, 각각을 따로 해결하고 그 결과를 합쳐서 원래 문제의 답을 구하는 방법입니다.

쉽게 풀면

두꺼운 전화번호부에서 특정 이름을 찾는 상황을 떠올려보세요. 첫 페이지부터 한 장씩 넘기며 찾으면 오래 걸리지만, 책을 절반으로 쪼개 찾는 이름이 앞쪽에 있는지 뒤쪽에 있는지 판단한 뒤, 해당하는 절반만 다시 절반으로 쪼개는 식으로 반복하면 훨씬 빨리 찾을 수 있습니다. 이렇게 큰 덩어리를 계속 절반(혹은 여러 조각)으로 나누어 각각을 간단히 해결한 다음, 그 답들을 다시 조립해서 전체 답을 만드는 전략이 분할정복입니다. "나누기(Divide) → 각자 풀기(Conquer) → 합치기(Combine)"의 세 단계로 요약됩니다.

왜 중요한가

분할정복은 정렬, 탐색, 행렬 연산 등 컴퓨터과학의 기초 알고리즘 설계 패러다임 중 하나로, 문제의 규모가 커질수록 계산량이 얼마나 늘어나는지를 분석하는 알고리즘 복잡도 이론과 밀접하게 연결됩니다. 또한 부분 문제들이 서로 독립적이라는 특성 덕분에 병렬·분산 컴퓨팅 환경에 자연스럽게 적용할 수 있어, 대규모 데이터를 다루는 시스템 논문에서 성능 개선 전략으로 자주 인용됩니다.

논문에서는 이렇게 쓰입니다

"대용량 이미지 데이터를 다수의 부분 영역으로 분할한 뒤 병렬로 처리하는 분할정복(divide and conquer) 전략을 통해 전체 처리 시간을 단축하였다."

이 문장은 하나의 크고 복잡한 작업을 여러 개의 작은 독립적인 작업으로 나누어 동시에 처리한 다음, 그 결과들을 합쳐서 최종 결과를 얻는 방식을 사용했다는 뜻입니다. 정렬 알고리즘, 대규모 데이터 병렬 처리, 신호·이미지 처리 분야에서 계산 효율을 높이기 위해 자주 언급됩니다.

"본 연구에서는 대규모 유전체 서열 정렬 문제를 다수의 하위 구간으로 분할정복 방식으로 나누어 처리함으로써 계산 시간을 크게 줄였다."

생물정보학 분야에서도 긴 서열 데이터를 작은 구간으로 나누어 각각 분석한 뒤 결과를 통합하는 방식으로 분할정복 전략이 활용된다는 뜻입니다.

"제안하는 최적화 기법은 분할정복 방식으로 탐색 공간을 재귀적으로 축소하여 최적해에 더 빠르게 수렴하도록 설계되었다."

최적화 알고리즘 연구에서는 전체 탐색 공간을 반복적으로 절반씩 좁혀나가며 계산 효율을 높이는 데에도 분할정복 개념이 응용된다는 의미입니다.

조금 더 깊게 보면

분할정복 알고리즘의 효율성은 흔히 재귀 관계식(recurrence relation)을 세우고 이를 마스터 정리(Master Theorem) 같은 방법으로 분석해 시간 복잡도를 도출합니다. 나누는 단계와 합치는 단계에 드는 비용, 그리고 나뉜 부분 문제의 개수와 크기가 전체 성능을 좌우하며, 이 균형이 깨지면 오히려 비효율적인 경우도 있습니다. 병렬 컴퓨팅 맥락에서는 부분 문제들을 여러 프로세서나 노드에 분배하는 과정에서 통신 비용과 부하 분산(load balancing)이 추가로 고려해야 할 요소가 됩니다.

주의할 점

분할정복은 부분 문제들이 서로 겹치지 않고 독립적일 때 가장 효과적입니다. 만약 나뉜 부분 문제들이 같은 계산을 반복해서 포함한다면, 그 결과를 저장해두고 재사용하는 동적계획법을 쓰는 편이 더 효율적일 수 있습니다. 또한 문제를 나누고 합치는 과정 자체에도 비용이 들기 때문에, 항상 탐욕 알고리즘보다 빠른 것은 아닙니다.

관련 용어