본문 바로가기
Problem Solving/알고리즘

분할 정복

by 사향낭 2022. 1. 7.

Divide & Conquer

 

주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산

 

 

일반적인 재귀 호출은 문제를 한 조각과 나머지 전체로 나누는 반면, 분할 정복은 거의 같은 크기의 부분 문제로 나눔.

 

 

세 가지의 구성 요소

  • 문제를 더 작은 문제로 분할하는 과정 (Divide)
  • 각 문제에 대해 구한 답을 원래 문제에 대한 답으로 병합하는 과정 (Merge)
  • 더이상 답을 분할하지 않고 곧장 풀 수 있는 매우 작은 문제 (Base case)

 

가장 대표격이라 할 수 있는 문제는

 

6549번: 히스토그램에서 가장 큰 직사각형

입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그 다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤

www.acmicpc.net

 

'Problem Solving > 알고리즘' 카테고리의 다른 글

0 - 1 BFS  (0) 2022.03.22
Prefix function, Knuth-Morris-Pratt algorithm  (0) 2022.01.17
Following materials  (0) 2022.01.17
동적 계획법  (0) 2022.01.07
무식하게 풀기  (0) 2022.01.06

댓글